python︱四款中文分词模块尝试:jiebaTHULACSnowNLPpynlpir
Posted 素质云笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python︱四款中文分词模块尝试:jiebaTHULACSnowNLPpynlpir相关的知识,希望对你有一定的参考价值。
四款Python中中文分词的尝试。尝试的有:jieba、SnowNLP(MIT)、pynlpir(大数据搜索挖掘实验室(北京市海量语言信息处理与云计算应用工程技术研究中心))、thulac(清华大学自然语言处理与社会人文计算实验室)
四款都有分词功能,本博客只介绍作者比较感兴趣、每个模块的内容。jieba在这不做介绍
.
一、SnowNLP
只处理的unicode编码,所以使用时请自行decode成unicode。来源:https://github.com/isnowfy/snownlp
以下功能都是笔者比较感兴趣的:
情感分析(现在训练数据主要是买卖东西时的评价,所以对其他的一些可能效果不是很好,待解决)
文本分类(Naive Bayes)
转换成拼音(Trie树实现的最大匹配)
繁体转简体(Trie树实现的最大匹配)
提取文本关键词(TextRank算法)
提取文本摘要(TextRank算法)
Tokenization(分割成句子)
文本相似(BM25)
# 转化为拼音from snownlp import SnowNLP
s = SnowNLP("杭州西湖风景很好,是旅游胜地!")
s.pinyin
['hang',
'zhou',
'xi',
'hu',
'feng',
'jing',
'hen',
'hao',
',',
'shi',
'lv',
'you',
'sheng',
'di',
'!']
# 繁体转为简体s = SnowNLP(u'「繁體字」「繁體中文」的叫法在臺灣亦很常見。')
s.han
'「繁体字」「繁体中文」的叫法在台湾亦很常见。'
# 自动摘要text = u'''自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分。 '''s = SnowNLP(text)
s.summary(5)
['因而它是计算机科学的一部分',
'自然语言处理是计算机科学领域与人工智能领域中的一个重要方向',
'自然语言处理是一门融语言学、计算机科学、数学于一体的科学',
'所以它与语言学的研究有着密切的联系',
'这一领域的研究将涉及自然语言']
# 计算BM2.5 相似性s = SnowNLP([[u'这篇', u'文章',u'非常好'],
[u'那篇', u'文章',u'一般般'],
[u'这个']])#s.tfs.idf
s.sim([u'这篇', u'文章',u'非常好'])# [0.3756070762985226, 0, 0]
[0.45263029953948547, -0.45263029953948547, 0]
参考《文本相似度-bm25算法原理及实现》
BM25是通过q和s中的公共词汇进行相似度计算的算法,BM25算法的相关性得分公式可总结为:
该篇博客自己写了一个bm2.5实现的软件。
.
二、thulac
来源:https://github.com/thunlp/THULAC-Python
设置比较一般,内容也可能不够多样性。不过有:c++ Java so,仅处理UTF8编码中文文本,之后会逐渐增加支持其他编码的功能,敬请期待,也有三个版本的分词模型:
(1)简单的分词模型Model_1,仅支持分词功能。该模型由人民日报分词语料库训练得到。
(2)分词和词性标注联合模型Model_2,支持同时分词和词性标注功能。该模型由人民日报分词和词性标注语料库训练得到。
(3)我们还提供更复杂、完善和精确的分词和词性标注联合模型Model_3和分词词表。该模型是由多语料联合训练训练得到(语料包括来自多文体的标注文本和人民日报标注文本等)。由于模型较大,如有机构或个人需要,通过审核后我们会将相关资源发送给联系人。
thulac(user_dict=None, model_path=None, T2S=False, seg_only=False, filt=False, deli='_')初始化程序,进行自定义设置
user_dict 设置用户词典,用户词典中的词会被打上uw标签。词典中每一个词一行,UTF8编码
T2S 默认False, 是否将句子从繁体转化为简体
seg_only 默认False, 时候只进行分词,不进行词性标注
filt 默认False, 是否使用过滤器去除一些没有意义的词语,例如“可以”。
model_path 设置模型文件所在文件夹,默认为models/
deli 默认为‘_’, 设置词与词性之间的分隔符
rm_space 默认为True, 是否去掉原文本中的空格后再进行分词
初始化设置
thulac(user_dict=None, model_path=None, T2S=False, seg_only=False, filt=False, deli=’_’)
user_dict 设置用户词典,用户词典中的词会被打上uw标签。词典中每一个词一行,UTF8编码
T2S 默认False, 是否将句子从繁体转化为简体
seg_only 默认False, 时候只进行分词,不进行词性标注
filt 默认False, 是否使用过滤器去除一些没有意义的词语,例如“可以”。
model_path 设置模型文件所在文件夹,默认为models/
deli 默认为‘_’, 设置词与词性之间的分隔符
rm_space 默认为True, 是否去掉原文本中的空格后再进行分词
分词结果
cut(文本, text=False) 对一句话进行分词
cut_f(输入文件, 输出文件) 对文件进行分词
cut和cut_f
命令行模式
python -m thulac input.txt output.txt
从input.txt读入,并将分词和词性标注结果输出到ouptut.txt中
如果只需要分词功能,可在增加参数”seg_only”
python -m thulac input.txt output.txt seg_only
词性解释
n/名词 np/人名 ns/地名 ni/机构名 nz/其它专名
m/数词 q/量词 mq/数量词 t/时间词 f/方位词 s/处所词
v/动词 a/形容词 d/副词 h/前接成分 k/后接成分
i/习语 j/简称 r/代词 c/连词 p/介词 u/助词 y/语气助词
e/叹词 o/拟声词 g/语素 w/标点 x/其它
thu1 = thulac.thulac(model_path = '/usr/local/lib/python3.5/dist-packages/thulac/models') #默认模式text = thu1.cut("杭州西湖风景很好,是旅游胜地!", text=False) #进行一句话分词print(text)
Model loaded succeed
[['杭州', 'ns'], ['西湖', 'ns'], ['风景', 'n'], ['很', 'd'], ['好', 'a'], [',', 'w'], ['是', 'v'], ['旅游', 'v'], ['胜地', 'n'], ['!', 'w']]
# 与Jieba对比一下import jieba seg_list = jieba.cut("杭州西湖风景很好,是旅游胜地!", cut_all=False) print("Full Mode: " + "/ ".join(seg_list)) # 全模式
Full Mode: 杭州/ 西湖/ 风景/ 很/ 好/ ,/ 是/ 旅游胜地/ !
.
三、pynlpir
加载之后就遇到了报错:
RuntimeError: NLPIR function ‘NLPIR_Init’ failed.
License 这是授权文件夹,存放了十一个组件的授权文件 license for 7 days: 授权期限为7天 license for one month: 授权期限为一个月。
也就是说,要不断更新license,开源的真不彻底,之后就没尝试其中的功能了。
import pynlpir s = 'NLPIR分词系统前身为2000年发布的ICTCLAS词法分析系统,从2009年开始,为了和以前工作进行大的区隔,并推广NLPIR自然语言处理与信息检索共享平台,调整命名为NLPIR分词系统。'pynlpir.segment(s)
以上是关于python︱四款中文分词模块尝试:jiebaTHULACSnowNLPpynlpir的主要内容,如果未能解决你的问题,请参考以下文章