最近玩公众号会话停不下来: 玩转腾讯词向量:Game of Words(词语的加减游戏) ,准备把NLP相关的模块搬到线上,准确的说,搬到AINLP公众号后台对话,所以,趁着劳动节假期,给AINLP公众号后台聊天机器人添加了一项新技能:中文分词线上PK,例如在AINLP公众号后台对话输入:中文分词 我爱自然语言处理,就可以得到五款分词工具的分词结果:
现在的开源中文分词工具或者模块已经很丰富了,并且很多都有一些在封闭测试集上的效果对比数据,不过这仅仅只能展现这些分词工具在这个封闭测试集上的效果,并不能全面说明问题,个人觉得,选择一个适合自己业务的分词器可能更重要,有的时候,还需要加一些私人定制的词库。
这次首先选了5款中文分词工具,严格的来说,它们不完全是纯粹的中文分词工具,例如SnowNLP, Thulac, HanLP都是很全面的中文自然语言处理工具,这次,先试水它们的中文分词模块。安装这些模块其实很简单,只要按官方文档的方法安装即可,以下做个简单介绍,在 Python 3.x的环境下测试,Ubuntu16.04 或 MacOS 测试成功。
1) Jieba : https://github.com/fxsjy/jieba
“结巴”中文分词:做最好的 Python 中文分词组件
"Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentation module.
特点
支持三种分词模式:
精确模式,试图将句子最精确地切开,适合文本分析;
全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
支持繁体分词
支持自定义词典
MIT 授权协议
安装:
代码对 Python 2/3 均兼容
全自动安装:easy_install jieba 或者 pip install jieba / pip3 install jieba
半自动安装:先下载 http://pypi.python.org/pypi/jieba/ ,解压后运行 python setup.py install
手动安装:将 jieba 目录放置于当前目录或者 site-packages 目录
中文分词示例:
In [6]: import jieba
In [7]: seg_list = jieba.cut("我爱自然语言处理", cut_all=True)
In [8]: print("Full Mode: " + " ".join(seg_list)) # 全模式
Full Mode: 我 爱 自然 自然语言 语言 处理
In [9]: seg_list = jieba.cut("我爱自然语言处理", cut_all=False)
In [10]: print("Default Mode: " + " ".join(seg_list)) # 默认模式/精确模式
Default Mode: 我 爱 自然语言 处理
In [11]: seg_list = jieba.cut("我爱自然语言处理")
In [12]: print("Default Mode: " + " ".join(seg_list)) # 默认精确模式
Default Mode: 我 爱 自然语言 处理
In [13]: seg_list = jieba.cut_for_search("我爱自然语言处理") # 搜索引擎模式
In [14]: print("Search Mode: " + " ".join(seg_list)) # 搜索引擎模式
Search Mode: 我 爱 自然 语言 自然语言 处理
2) SnowNLP : https://github.com/isnowfy/snownlp
SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。注意本程序都是处理的unicode编码,所以使用时请自行decode成unicode。
Features 中文分词(Character-Based Generative Model) 词性标注(TnT 3-gram 隐马) 情感分析(现在训练数据主要是买卖东西时的评价,所以对其他的一些可能效果不是很好,待解决) 文本分类(Naive Bayes) 转换成拼音(Trie树实现的最大匹配) 繁体转简体(Trie树实现的最大匹配) 提取文本关键词(TextRank算法) 提取文本摘要(TextRank算法) tf,idf Tokenization(分割成句子) 文本相似(BM25) 支持python3(感谢erning)
安装:
$ pip install snownlp
中文分词示例:
In [18]: from snownlp import SnowNLP
In [19]: s = SnowNLP("我爱自然语言处理")
In [20]: print(' '.join(s.words))
我 爱 自然 语言 处理
3) PkuSeg : https://github.com/lancopku/pkuseg-python
pkuseg多领域中文分词工具; The pkuseg toolkit for multi-domain Chinese word segmentation
主要亮点
pkuseg具有如下几个特点:
多领域分词。不同于以往的通用中文分词工具,此工具包同时致力于为不同领域的数据提供个性化的预训练模型。根据待分词文本的领域特点,用户可以自由地选择不同的模型。 我们目前支持了新闻领域,网络领域,医药领域,旅游领域,以及混合领域的分词预训练模型。在使用中,如果用户明确待分词的领域,可加载对应的模型进行分词。如果用户无法确定具体领域,推荐使用在混合领域上训练的通用模型。各领域分词样例可参考 example.txt。
更高的分词准确率。相比于其他的分词工具包,当使用相同的训练数据和测试数据,pkuseg可以取得更高的分词准确率。
支持用户自训练模型。支持用户使用全新的标注数据进行训练。
支持词性标注。
编译和安装
目前仅支持python3
为了获得好的效果和速度,强烈建议大家通过pip install更新到目前的最新版本
通过PyPI安装(自带模型文件):
pip3 install pkuseg
之后通过import pkuseg来引用
建议更新到最新版本以获得更好的开箱体验:
pip3 install -U pkuseg
中文分词示例:
In [23]: import pkuseg
In [24]: pku_seg = pkuseg.pkuseg()
In [25]: print(' '.join(pku_seg.cut('我爱自然语言处理')))
我 爱 自然 语言 处理
4) THULAC : https://github.com/thunlp/THULAC-Python
THULAC:一个高效的中文词法分析工具包
THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。THULAC具有如下几个特点:
能力强。利用我们集成的目前世界上规模最大的人工分词和词性标注中文语料库(约含5800万字)训练而成,模型标注能力强大。
准确率高。该工具包在标准数据集Chinese Treebank(CTB5)上分词的F1值可达97.3%,词性标注的F1值可达到92.9%,与该数据集上最好方法效果相当。
速度较快。同时进行分词和词性标注速度为300KB/s,每秒可处理约15万字。只进行分词速度可达到1.3MB/s。
编译和安装
python版(兼容python2.x版和python3.x版)
从github下载(需下载模型文件,见获取模型)
将thulac文件放到目录下,通过 import thulac 来引用
thulac需要模型的支持,需要将下载的模型放到thulac目录下。
pip下载(自带模型文件)
pip install thulac
通过 import thulac 来引用
中文分词示例:
In [31]: import thulac
In [32]: thu_lac = thulac.thulac(seg_Only=True)
Model loaded succeed
In [33]: thu_result = thu_lac.cut("我爱自然语言处理", text=True)
In [34]: print(thu_result)
我 爱 自然 语言 处理
5) pyhanlp : https://github.com/hankcs/pyhanlp
pyhanlp: Python interfaces for HanLP
自然语言处理工具包HanLP的Python接口, 支持自动下载与升级HanLP,兼容py2、py3。
安装
pip install pyhanlp
注意pyhanlp安装之后使用的时候还会自动下载相关的数据文件,zip压缩文件600多M,速度有点慢,时间有点长
中文分词示例:
In [36]: from pyhanlp import HanLP
In [37]: han_word_seg = HanLP.segment('我爱自然语言处理')
In [38]: print(' '.join([term.word for term in han_word_seg]))
我 爱 自然语言处理
现在,可以拿起你的手机,对着AINLP公众号后台输入:中文分词 需要分词的内容,或者可以用语音输入: 来,试试语音(识别)聊天(机器人)
注:原创文章,转载请注明出处及保留链接“我爱自然语言处理”: http://www.52nlp.cn
本文链接地址: 五款中文分词工具在线PK: Jieba, SnowNLP, PkuSeg, THULAC, HanLP http://www.52nlp.cn/?p=11747