[023]中文分词——ansj

来源:互联网 发布:2016大型网络赛车游戏 编辑:程序博客网 时间:2024/06/01 23:34

最近在做新闻分类的相关研究学习,其中一个重要环节便是中文分词,分词的好坏也决定着后续新闻分类的好坏,于是google发现一个叫ansj的分词工具很好用,遇到一个好东西就要好好吃透它,于是查找很多相关资料,并应用到自己的项目程序中,在这里与大家分享。

简介

新闻分类中的分词只是一种应用,比如:检索、自然语言处理、数据挖掘等方面工作都需要用到中文分词,所以ansj还是值得好好研究一下的。

Ansj 是一个开源的 Java 中文分词工具,基于中科院的 ictclas 中文分词算法,比其他常用的开源分词工具(如mmseg4j)的分词准确率更高。

Ansj中文分词是一款纯Java的、主要应用于自然语言处理的、高精度的中文分词工具,目标是“准确、高效、自由地进行中文分词”,可用于人名识别、地名识别、组织机构名识别、多级词性标注、关键词提取、指纹提取等领域,支持行业词典、用户自定义词典。

分词速度达到每秒钟大约200万字左右(mac air下测试),准确率能达到96%以上
目前实现了.中文分词. 中文姓名识别 . 用户自定义词典
可以应用到自然语言处理等方面,适用于对分词效果要求高的各种项目.

下载jar

访问 http://maven.nlpcn.org/org/ansj/ 最好下载最新版 ansj_seg/
如果你用的是1.x版本需要下载tree_split.jar。
如果你用的是2.x版本需要下载nlp-lang.jar。
如果你用的是3.x以上版本只需要下载 ansj_seg-[version]-all-in-one.jar 一个jar包就够用了。

Java代码示例

static int keyWordNum = 30;//对文章进行分词,返回最关键的、出现频率最高的30个词static KeyWordComputer kwc = new KeyWordComputer(keyWordNum);
JSONObject keyWordsJson = new JSONObject();//根据tfidf规则对文章title及content进行分词,获得分词及其出现的次数List<Keyword> kw = kwc.computeArticleTfidf(title, content); //或者List<Keyword> kw = kwc.computeArticleTfidf(content);for(int i = 0; i < kw.size(); i++){    keyWordsJson.put(kw.get(i).getName(), kw.get(i).getFreq());}
kw.get(i).getScore()//可获得对应词在文档中的权重分数

基本分词速度非常快.在macAir上.能到每秒300w字每秒.同时准确率也很高.但是对于新词他的功能十分有限:

List<Term> parse = BaseAnalysis.parse(content);

ansj精准分词,易用性,稳定性.准确性.以及分词效率上.都取得了一个不错的平衡:

public static List<Term> toAnalysis(String content){    return ToAnalysis.parse(content);}

nlp的适用方式.1.语法实体名抽取.未登录词整理.只要是对文本进行发现分析等工作,40w字每秒的速度:

public static List<Term> nlpAnalysis(String content){    return NlpAnalysis.parse(content);}

上面三种方法不仅对内容项进行分词,还标注出了每个词的词性。

相关链接

官网地址:http://www.ansj.org/
Github地址:https://github.com/ansjsun/ansj_seg
使用帮助:http://nlpchina.github.io/ansj_seg/
开源中国社区博客:http://www.oschina.net/search?scope=blog&q=Ansj
搜狗语料库:http://www.sogou.com/labs/resources.html?v=1

0 0