常见分词工具总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mpk_no1/article/details/75201505

由于中文不像英文那样具有天然的分隔符,所以一般情况下,中文自然语言处理的第一步就是要对语料进行分词处理,下面就总结以下我用过的一些常见的中文分词工具。


1.Stanford NLP

使用斯坦福大学的分词器,下载地址http://nlp.stanford.edu/software/segmenter.shtml

在工程里配置好之后,需要加载Properties文件,Properties文件是一些参数设置。

接下来让我们看一个示例:

package com.sectong.application;

    import java.util.List;

    import edu.stanford.nlp.ling.CoreAnnotations;
    import edu.stanford.nlp.ling.CoreAnnotations.NamedEntityTagAnnotation;
    import edu.stanford.nlp.ling.CoreAnnotations.PartOfSpeechAnnotation;
    import edu.stanford.nlp.ling.CoreAnnotations.TextAnnotation;
    import edu.stanford.nlp.ling.CoreLabel;
    import edu.stanford.nlp.pipeline.Annotation;
    import edu.stanford.nlp.pipeline.StanfordCoreNLP;
    import edu.stanford.nlp.util.CoreMap;

    public class CoreNLPSegment {

        public static void main(String[] args) {

            // 载入自定义的Properties文件
            StanfordCoreNLP pipeline = new StanfordCoreNLP("CoreNLP-chinese.properties");

            // 用一些文本来初始化一个注释。文本是构造函数的参数。
            Annotation annotation;
            annotation = new Annotation("我爱北京天安门,天安门上太阳升。");

            // 运行所有选定的代码在本文
            pipeline.annotate(annotation);

            // 从注释中获取CoreMap List,并取第0个值
            List<CoreMap> sentences = annotation.get(CoreAnnotations.SentencesAnnotation.class);
            CoreMap sentence = sentences.get(0);

            // 从CoreMap中取出CoreLabel List,逐一打印出来
            List<CoreLabel> tokens = sentence.get(CoreAnnotations.TokensAnnotation.class);
            System.out.println("字/词" + "\t " + "词性" + "\t " + "实体标记");
            System.out.println("-----------------------------");
            for (CoreLabel token : tokens) {
                String word = token.getString(TextAnnotation.class);
                String pos = token.getString(PartOfSpeechAnnotation.class);
                String ner = token.getString(NamedEntityTagAnnotation.class);
                System.out.println(word + "\t " + pos + "\t " + ner);
            }

        }

    }
运行结果:

字/词  词性  实体标记
    -----------------------------
    我爱   VV  O
    北京   NR  MISC
    天安门  NR  MISC
    ,    PU  O
    天安门  NR  O
    上    LC  O
    太阳   NN  O
    升    VV  O
    。    PU  O


2.中科院计算所ICTCLAS

ICTClAS分词系统是由中科院计算所的张华平、刘群所开发的一套获得广泛好评的分词系统,难能可贵的是该版的Free版开放了源代码,为我们很多初学者提供了宝贵的学习材料。

官网:http://ictclas.nlpir.org/newsdownloads?DocId=354

语言和平台:
ICTCLAS全部采用 C/C++ 编写,支持 Linux 、 FreeBSD 及 Windows 系列操作系统,支持 C/C++ 、 C# 、 Delphi、 Java 等主流的开发语言。

主要功能:
中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典;支持繁体中文;支持GBK 、 UTF-8 、 UTF-7 、 UNICODE 等多种编码格式。

ICTCLAS比较烦人的一点就是每隔一段时间就要更新一下证书,好像是一个月更新一次,这点挺麻烦的,如果你使用了ICTCLAS进行中文分词发现突然报错了,那很可能就是证书过期导致的,更新之后就又可以正常使用了。


3.Ansj

项目网址:https://github.com/ansjsun/ansj_seg

ansj分词是ICTCLAS的真正java实现.分词效果速度都超过开源版的ICTCLAS中文分词。支持中文分词,人名识别,词性标注,用户自定义词典等
增加了对lucene的支持.如果不想编译文件可以直接到 https://github.com/ansjsun/mvn-repo/tree/gh-pages/org/ansj这里下载jar包!
这是一个ictclas的java实现.基本上重写了所有的数据结构和算法.词典是用的开源版的ictclas所提供的.并且进行了部分的人工优化


4.HanLP

官方文档地址:http://hanlp.linrunsoft.com/doc/_build/html/index.html

GitHub地址:https://github.com/hankcs/HanLP

也可以下载jar包直接在Java工程里使用。

HanLP是我经常使用的一个中文分词工具,个人觉得还挺好用的。

使用前首先要配置好配置文件,可以在配置文件中添加自己的词典,停用词表等

示例配置文件:

#本配置文件中的路径的根目录,根目录+其他路径=绝对路径
#Windows用户请注意,路径分隔符统一使用/
root=E:/JavaProjects/HanLP/
#核心词典路径
CoreDictionaryPath=data/dictionary/CoreNatureDictionary.txt
#2元语法词典路径
BiGramDictionaryPath=data/dictionary/CoreNatureDictionary.ngram.txt
#停用词词典路径
CoreStopWordDictionaryPath=data/dictionary/stopwords.txt
#同义词词典路径
CoreSynonymDictionaryDictionaryPath=data/dictionary/synonym/CoreSynonym.txt
#人名词典路径
PersonDictionaryPath=data/dictionary/person/nr.txt
#人名词典转移矩阵路径
PersonDictionaryTrPath=data/dictionary/person/nr.tr.txt
#繁简词典路径
TraditionalChineseDictionaryPath=data/dictionary/tc/TraditionalChinese.txt
#自定义词典路径,用;隔开多个自定义词典,空格开头表示在同一个目录,使用“文件名 词性”形式则表示这个词典的词性默认是该词性。优先级递减。
#另外data/dictionary/custom/CustomDictionary.txt是个高质量的词库,请不要删除
CustomDictionaryPath=data/dictionary/custom/CustomDictionary.txt; 现代汉语补充词库.txt; 全国地名大全.txt ns; 人名词典.txt; 机构名词典.txt; 上海地名.txt ns;data/dictionary/person/nrf.txt nrf


调用分词器进行分词也很容易:

System.out.println(HanLP.segment("你好,欢迎使用HanLP!"));

输出:

[你好/vl, ,/w, 欢迎/v, 使用/v, HanLP/nx, !/w]


5.jieba

"结巴"中文分词:做最好的Python中文分词组件

Feature

支持三种分词模式:

精确模式,试图将句子最精确地切开,适合文本分析;

全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;

搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

支持繁体分词

支持自定义词典

jieba分词是个Python组件,安装和使用都十分方便,特别是现在好多机器学习和深度学习都是使用Python语言进行处理的,所以jieba分词可以与这些机器学习和深度学习框架完美契合。

具体安装直接搜索即可。

这里来看一下分词示例:

#encoding=utf-8
import jieba

seg_list = jieba.cut("我来到北京清华大学",cut_all=True)
print "Full Mode:", "/ ".join(seg_list) #全模式

seg_list = jieba.cut("我来到北京清华大学",cut_all=False)
print "Default Mode:", "/ ".join(seg_list) #精确模式

seg_list = jieba.cut("他来到了网易杭研大厦") #默认是精确模式
print ", ".join(seg_list)

seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") #搜索引擎模式
print ", ".join(seg_list)

输出:

【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学

【精确模式】: 我/ 来到/ 北京/ 清华大学

【新词识别】:他, 来到, 了, 网易, 杭研, 大厦    (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)

【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造

6.Jcseg

官网:http://code.google.com/p/jcseg/

jcseg是使用Java开发的一个中文分词器,使用mmseg算法实现。
(1).目前最高版本:jcseg1.9.0。兼容最高版本lucene-4.x和最高版本solr-4.x
(2).mmseg四种过滤算法,分词准确率达到了98.41%。
(3).支持自定义词库。在lexicon文件夹下,可以随便添加/删除/更改词库和词库内容,并且对词库进行了分类。如何给jcseg添加词库/新词。
(4).中英文同义词追加/同义词匹配 + 中文词条拼音追加.词库整合了《现代汉语词典》和cc-cedict辞典中的词条,并且依据cc-cedict词典为词条标上了拼音,依据《中华同义词词 典》为词条标上了同义词(尚未完成)。更改jcseg.properties配置文档可以在分词的时候加入拼音和同义词到分词结果中。jcseg新版词库
(5).中文数字和中文分数识别,例如:"一百五十个人都来了,四十分之一的人。"中的"一百五十"和"四十分之一"。并且jcseg会自动将其转换为阿拉伯数字加入到分词结果中。如:150, 1/40。
(6).支持中英混合词和英中混合词的识别(维护词库可以识别任何一种组合)。例如:B超, x射线, 卡拉ok, 奇都ktv, 哆啦a梦。
(7).更好的英文支持,电子邮件,网址,小数,分数,百分数,字母和标点组合词(例如C++, c#)的识别。(这个对购物网址来说很重要)。
(8).支持阿拉伯数字/小数/中文数字基本单字单位的识别,例如2012年,1.75米,38.6℃,五折,并且jcseg会将其转换为“5折”加入分词结果中。
(9).智能圆角半角, 英文大小写转换。
(10).特殊字母识别:例如:Ⅰ,Ⅱ
(11).特殊数字识别:例如:①,⑩
(12).配对标点内容提取:例如:最好的Java书《java编程思想》,‘畅想杯黑客技术大赛’,被《,‘,“,『标点标记的内容。(1.6.8版开始支持)。
(13).智能中文人名识别。中文人名识别正确率达94%以上。(可以维护lex-lname.lex,lex-dname-1.lex,lex-dname-2.lex来提高准确率),(引入规则和词性后会达到98%以上的识别正确率)。
(14).自动中英文停止词过滤功能(需要在jcseg.properties中开启该选项,lex-stopwords.lex为停止词词库)。
(15).词库更新自动加载功能, 开启一个守护线程随时检测词库的更新并且加载。
(16).自动词性标注。
(17).jcseg.properties----- jcseg配置文件 如何配置jcseg


7.FudanNLP

官网:http://code.google.com/p/fudannlp/

FudanNLP主要是为中文自然语言处理而开发的工具包,也包含为实现这些任务的机器学习算法和数据集。本工具包及其包含数据集使用LGPL3.0许可证。开发语言为Java。功能包括中文分词等,不需要字典支持。
功能:
信息检索: 文本分类 新闻聚类
中文处理: 中文分词 词性标注 实体名识别 关键词抽取 依存句法分析 时间短语识别
结构化学习: 在线学习 层次分类 聚类 精确推理

猜你喜欢

转载自blog.csdn.net/mpk_no1/article/details/75201505
今日推荐