中文分词是进行中文文本分析的一个重要步骤。对于Java语言,有许多可选的分词工具,如中科院计算所的NLPIR(原ICTCLASS)、盘古分词、IKAnalyzer、PaodingAnalyzer,其中,试用过ICTCLASS及其后续版本,刚开始感觉不错,但是Java调用C语言的方式实在是受不了,没有原生Java编写的用着方便,最近在处理一些论坛评论数据,数据质量很差,感觉用这个就错得一塌糊涂,印象最不好的是以前做一个简单项目,结果在最关键的最后阶段,竟然显示证书到期,最后虽然解决了,但实在是对ICTCLASS的印象越来越差,最后就尝试其他的工具,试用了IKAnalyzer,很小,基本功能有,但附加功能好像较少,还有哈工大的分词系统,在线的,源码试用时好像要发邮件才能获得,嫌麻烦,呵呵,最后试用了AnsjSeg,项目在GitHub上,话说正逢GitHub被封还是怎么的,废了好一番功夫,最后总算用上了,感觉还不错,作者介绍的文档很详细,各种功能用起来很直接,虽然没有ICTCLASS看起来正式,但要得就是接地气,下面对相关的使用做一介绍:
AnsjSeg,得名于作者的主页ansj,作者名字是sj,So,就得了这个名字。这个工具可以讲是ICTCLASS的Java实现,作者测试比原版速度快。AnsjSeg提供了四种分词调用的方式:基本分词(BaseAnalysis)、精准分词(ToAnalysis)、NLP分词(NlpAnalysis)、面向索引分词(IndexAnalysis)。
1. 基本分词方式,速度快;
官方示例:
List<Term> parse = BaseAnalysis.parse("让战士们过一个欢乐祥和的新春佳节。");
System.out.println(parse);
result:[让/v, 战士/n, 们/k, 过/ug, 一个/m, 欢乐/a, 祥和/a, 的/uj, 新春/t, 佳节/n, 。/w]
2. 精准分词方式兼顾精度与速度,比较均衡;
官方示例:
List<Term> parse = ToAnalysis.parse("让战士们过一个欢乐祥和的新春佳节。");
System.out.println(parse);
3. NLP分词方式可是未登录词,但速度较慢;
官方示例:
List<Term> parse = NlpAnalysis.parse("洁面仪配合洁面深层清洁毛孔 清洁鼻孔面膜碎觉使劲挤才能出一点点皱纹 脸颊毛孔修复的看不见啦 草莓鼻历史遗留问题没辙 脸和脖子差不多颜色的皮肤才是健康的 长期使用安全健康的比同龄人显小五到十岁 28岁的妹子看看你们的鱼尾纹");
System.out.println(parse);
4. 面向索引方式适合用在在lucene等文本检索中用到。
官方示例:
List<Term> parse = IndexAnalysis.parse("主副食品");
System.out.println(parse);
result:[主副食品/n, 主副食, 副食, 副食品, 食品]
jar包中还有其他一些比较实用的功能,包括关键词提取、词性标注等,虽然感觉比较粗糙,但是还很实用。
AnsjSeg还可以设置用户词典与停用词。
AnsjSeg的官方GitHub地址是http://nlpchina.github.io/ansj_seg/,上面有较详细的说明。