现在只需要导入一个包就OK了 简单方便了ansj_seg-5.0.1-all-in-one.jar
好了不说了。直接贴与lucene的代码
其实就这么一句话,就OK了。
public static Analyzer analyzer = new AnsjAnalyzer(AnsjAnalyzer.TYPE.index);
public static void main(String[] args) throws IOException { Setfilter = new HashSet () ; String stopDicStr = "y" ; BufferedReader br = new BufferedReader(new StringReader(stopDicStr)) ; String temp = null ; while((temp=br.readLine())!=null){ filter.add(temp) ; } StringReader reader = new StringReader("测试中华人名共和王y健") ; Tokenizer tokenizer = new AnsjTokenizer(new IndexAnalysis(reader), filter); while(tokenizer.incrementToken()){ CharTermAttribute attribute = tokenizer.getAttribute(CharTermAttribute.class) ; System.out.println(attribute); } }
5.0.1 使用的jdk1.6.不过这里上传的包我处理过的。需要用jdk1.7的版本
public static void main(String[] args) { /** * 这里我还是要说名下AnsjAnalyzer.TYPE里面有6个参数index, query, to, dic, user, search * 这个6个参数使用的分词调用方式是不同的。具体调用的是什么分词方式。我下面贴ansj的源码 * */ Analyzer ca = new AnsjAnalyzer(TYPE.index); String content = "王占三李四王五,中华人名共和国xx格原信息技术有限公司" ; try { TokenStream tokenStream = ca.tokenStream(content, new StringReader(content)) ; while(tokenStream.incrementToken()){ CharTermAttribute attribute = tokenStream.getAttribute(CharTermAttribute.class) ; System.out.println(attribute); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } ca.close(); }
/** * 获得一个tokenizer就是这段了 * IndexAnalysis、DicAnalysis、ToAnalysis 三个调用方式 * @param reader * @param type * @param filter * @return */ public static Tokenizer getTokenizer(BufferedReader reader, TYPE type, Setfilter) { Tokenizer tokenizer; switch (type) { case index: if (reader == null) { tokenizer = new AnsjTokenizer(new IndexAnalysis(), filter); } else { tokenizer = new AnsjTokenizer(new IndexAnalysis(reader), filter); } break; case dic: case user: if (reader == null) tokenizer = new AnsjTokenizer(new DicAnalysis(), filter); } else { tokenizer = new AnsjTokenizer(new DicAnalysis(reader), filter); } break; case to: case query: case search: if (reader == null) { tokenizer = new AnsjTokenizer(new ToAnalysis(), filter); } else { tokenizer = new AnsjTokenizer(new ToAnalysis(reader), filter); } break; default: if (reader == null) { tokenizer = new AnsjTokenizer(new ToAnalysis(), filter); } else { tokenizer = new AnsjTokenizer(new ToAnalysis(reader), filter); } } return tokenizer; }
面向索引的分词-IndexAnalysis:
支持:用户自定义分词,数字识别、人名识别功能:
Result term= IndexAnalysis.parse("材米油盐是一个主副食品"); System.out.println(term.toString()); Iteratorit=term.iterator(); while(it.hasNext()){ org.ansj.domain.Term t=it.next(); if(t.getNatureStr() !=null && !(t.getNatureStr().equalsIgnoreCase("null"))&& t.getNatureStr().startsWith("n")){ System.out.println(t.getNatureStr()); System.out.println(t.getName()); } }
材/ng,米/q,油盐/n,油/n,盐/n,是/v,一个/m,一/m,个/q,主副食品/n,主副食/n,主/ag,副食品/n,副食/n,副/b,食品/n,食/v,品/ng
用户自定义词典优先级升高-DicAnalysis:
如果你有自定义词库用这个很好
精准分词-ToAnalysis。
好吧,最后说下ansj_seg5.X升级的内容:
1、支持自训练CRF模型的加载。目前支持CRF++ 及 Wapiti两种模型。并提供训练语料的生成工具。
2、将默认crfmodel移动到jar包内。并压缩了大小控制在16m。
3、正式发布了DicAnalysis分词策略,使用户自定义词典优先级升高。如果你用户自定义词典足够强建议用这个方式的分词。
4、将分词结果封装为Result对象。这样便于对结果的二次处理。
5、增加Recognition接口,对结果的二次处理。可以通过链式调用的方式增加你的操作。同时6、去掉了FilterModifWord类,用Recognition重新来实现。
7、删除了DownLibrary.java 类的功能。不再提供自动下载模型的方式
原谅我吧。。。jar太大 ,eye不让上传 这里给你们一个百度云的链接地址:
JAR:
http://pan.baidu.com/s/1hspuLM0