snownlp对比jieba,如何处理分词和获得分词词性?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
snownlp
在自然语言处理领域,是以情感分析特长而闻名的。它的很多功能和著名的jieba
分词相比,两者是有很多重复的功能的。那么,本文就来对比一下snownlp
和jieba
的分词和获得词性功能。
大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文描述自然语言处理领域里面,snownlp
和jieba
的分词效果对比。测试环境:win10
,python@3.6.8
,snownlp@0.12.3
,jieba@0.42.1
。
jieba
分词
根据已有的文章内容,可以知道jieba
分词的分词函数有四个,其中两个可以切出词性。这些函数还都有个默认值是cut_all=False
,为精准切词方式。大多数情况下,都应该使用cut_all=False
。参考文章:
- https://newsn.net/say/jieba.html
- https://newsn.net/say/jieba-cut.html
- https://newsn.net/say/jieba-lcut.html
所以,这里采用的函数是:
import jieba
import jieba.posseg
words = "苏南大叔毕业于北京大学"
_result = jieba.posseg.lcut(words)
_list = [ w.word+"/"+w.flag for w in _result ]
print(" ".join(_list)) # 苏南/ns 大叔/n 毕业/n 于/p 北京大学/nt
jieba.add_word("苏南大叔",tag="ns")
_result = jieba.posseg.lcut(words)
_list = [ w.word+"/"+w.flag for w in _result ]
print(" ".join(_list)) # 苏南大叔/ns 毕业/n 于/p 北京大学/nt
这里输出为:
苏南/ns 大叔/n 毕业/n 于/p 北京大学/nt
苏南大叔/ns 毕业/n 于/p 北京大学/nt
这个例子表明:jieba
支持自定义分词,比如专有名词“苏南大叔”,这个就是可以自定义的。同时,“毕业”这个词儿的词性结果,似乎有些问题。
snownlp
分词
snownlp
测试代码:
from snownlp import SnowNLP
s = SnowNLP("苏南大叔毕业于北京大学")
print("分词结果:",s.words)
print("词性标注:",list(s.tags))
输出结果:
分词结果: ['苏南', '大叔', '毕业', '于', '北京大学']
词性标注: [('苏南', 'ns'), ('大叔', 'n'), ('毕业', 'v'), ('于', 'p'), ('北京大学', 'nt')]
s.tags
这个词性标注结果,是个zip
数据类型。关于这个类型的输出问题,参考文章:
根据snownlp
的官方文档,这里的分词结果并没有自定义词典的功能,也就是说,无法分出“苏南大叔”这个词。另外,snownlp
的着力点是情感分析,所以,能拿来分词的语句,都应该是由一定的感情色彩的句子,否则体现不出snownlp
的优势。
相关链接
snownlp
官方文档链接:
- https://github.com/isnowfy/snownlp
- https://newsn.net/say/nlp-code.html
- https://newsn.net/say/python-zip.html
- https://newsn.net/say/jieba.html
- https://newsn.net/say/jieba-cut.html
- https://newsn.net/say/jieba-lcut.html
总结
对比结果表明,单就分词这个需求角度来说,jiba
显然更具有优势,可以调整分词条目。但是默认的分词效果也有不准确的地方。snownlp
所针对的句子,都应该具有一定的情感色彩。所以,理论上适用的范围更小,并且不能自定义分词效果。所以,单单就分词这个角度来说,jieba
效果更好。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。