IK分词源码下载地址:https://code.google.com/p/ik-analyzer/downloads/list
lucene源码下载地址:http://www.eu.apache.org/dist/lucene/java/
下载IK分词源码后,运行出现错误提示:
- Analyzer cannot be resolved to a type
- TokenStream cannot be resolved to a type
- OffsetAttribute cannot be resolved to a type
- OffsetAttribute cannot be resolved to a type
- CharTermAttribute cannot be resolved to a type
- CharTermAttribute cannot be resolved to a type
- TypeAttribute cannot be resolved to a type
- TypeAttribute cannot be resolved to a type
解决办法:
在项目project -->clean 下即可
自定义分词规则步骤:
里面的例子:
- import java.io.IOException;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Map.Entry;
-
- import org.apache.lucene.analysis.Analyzer;
- import org.apache.lucene.analysis.TokenStream;
- import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
- import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
- import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
- import org.wltea.analyzer.lucene.IKAnalyzer;
- public static void main(String[] args) {
- String testString = "张柏芝士蛋糕房 ZHANG'S CAKE SHOP,网友们Hold不住了:宋祖英语培训班、周渝民政服务中心、容祖儿童医院、吴奇隆胸医院、苏永康复中心、梁朝伟哥专卖、陈冠希望小学、吴彦祖传中医坊、林书豪华酒店";
- iktest1(testString);
- }
-
- // 实现普通分词
- public static Map<String, Object> iktest1(String testString){
- Map<String, Object> resultsMap = new HashMap<String, Object>();
- Analyzer ikAnalyzer = new IKAnalyzer(true);
- TokenStream ts = null;
- try {
- ts = ikAnalyzer.tokenStream("myik", testString);
- //词元位置属性
- OffsetAttribute offset = ts.addAttribute(OffsetAttribute.class);
- //词文本属性
- CharTermAttribute term = ts.addAttribute(CharTermAttribute.class);
- //词文本属性
- TypeAttribute type = ts.addAttribute(TypeAttribute.class);
- ts.reset();
- while (ts.incrementToken()){
- resultsMap.put("获得分词", term.toString());
- for (Object obj : resultsMap.entrySet()) {
- Entry entry = (Entry) obj;
- String key = (String) entry.getKey();
- String value = (String) entry.getValue();
- System.out.println(key + ":" + value);
- }
- //System.out.println(resultsMap);
- // System.out.println(offset.startOffset() + " - " + offset.endOffset() + " : " + term.toString() + " | " + type.type());
- }
- ts.end();
- } catch (IOException e) {
- e.printStackTrace();
- } finally{
- if (ts != null){
- try {
- ts.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- return resultsMap;
- }
-
- //实现只能分词2
- public static void testik02(){
-
- }
分词结果:
获得分词:张柏芝
获得分词:士
获得分词:蛋糕
获得分词:房
获得分词:zhang
获得分词:s
获得分词:cake
获得分词:shop
获得分词:网友
获得分词:们
获得分词:hold
获得分词:不
获得分词:住了
获得分词:宋祖英
获得分词:语
获得分词:培训班
获得分词:周渝民
获得分词:政
获得分词:服务中心
获得分词:容祖儿
获得分词:童
获得分词:医院
获得分词:吴奇隆
获得分词:胸
获得分词:医院
获得分词:苏永康
获得分词:复
获得分词:中心
获得分词:梁朝伟
获得分词:哥
获得分词:专卖
获得分词:陈冠希
获得分词:望
获得分词:小学
获得分词:吴彦祖
获得分词:传
获得分词:中医
获得分词:坊
获得分词:林
获得分词:书
获得分词:豪华酒店
这样分词不是很智能,分词需要我们自己设置。
存在的问题 还需要定义歧义字典。但是ik不支持歧义字典