1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > snownlp 中文文本情感分析 相似度计算 分词等

snownlp 中文文本情感分析 相似度计算 分词等

时间:2021-08-16 19:55:17

相关推荐

snownlp 中文文本情感分析 相似度计算 分词等

snownlp 官网:/project/snownlp/

SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了[TextBlob](/sloria/TextBlob)的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。注意本程序都是处理的unicode编码,所以使用时请自行decode成unicode。【貌似没有转化也行】

各个功能的相关原理:

* 中文分词([Character-Based Generative Model](/anthology//Y/Y09/Y09-2047.pdf))

* 词性标注([TnT](/anthology//A/A00/A00-1031.pdf) 3-gram 隐马)

* 情感分析(现在训练数据主要是买卖东西时的评价,所以对其他的一些可能效果不是很好,待解决)

* 文本分类(Naive Bayes)

* 转换成拼音(Trie树实现的最大匹配)

* 繁体转简体(Trie树实现的最大匹配)

* 提取文本关键词([TextRank](http://acl.ldc.upenn.edu/acl/emnlp/pdf/Mihalcea.pdf)算法)

* 提取文本摘要([TextRank](http://acl.ldc.upenn.edu/acl/emnlp/pdf/Mihalcea.pdf)算法)

* tf,idf

* Tokenization(分割成句子)

* 文本相似([BM25](/wiki/Okapi_BM25))

* 支持python3(感谢[erning](/erning))

安装:

pip install snownlp

结合功能的简单实例:

# -*- coding: utf-8 -*-from snownlp import SnowNLPs = SnowNLP(u'这个东西真心很赞')# 1.分词print(s.words)# ['这个', '东西', '真心', '很', '赞']# 2.词性tagslist = s.tagsfor tage in tagslist:print(tage, end=',')# ('这个', 'r'),('东西', 'n'),('真心', 'd'),('很', 'd'),('赞', 'Vg'),# 3.情感打分print(s.sentiments)# 0.9769551298267365# 4.获得每个字的拼音print(s.pinyin)# ['zhe', 'ge', 'dong', 'xi', 'zhen', 'xin', 'hen', 'zan']# 5.繁体字转为简体字s = SnowNLP(u'「繁體字」「繁體中文」的叫法在臺灣亦很常見。')print(s.han)# 「繁体字」「繁体中文」的叫法在台湾亦很常见。text = u'''自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分。'''s = SnowNLP(text)# 6.提取关键词print(s.keywords(3) )# ['语言', '自然', '计算机']# 7.摘要抽取(关键句抽取)print(s.summary(3))# ['因而它是计算机科学的一部分', '自然语言处理是计算机科学领域与人工智能领域中的一个重要方向', '自然语言处理是一门融语言学、计算机科学、数学于一体的科学']# 8.句子分割senList = s.sentences # 句子链表for sen in senList:print(sen)# 自然语言处理是计算机科学领域与人工智能领域中的一个重要方向# 它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法# 自然语言处理是一门融语言学、计算机科学、数学于一体的科学# 因此# 这一领域的研究将涉及自然语言# 即人们日常使用的语言# 所以它与语言学的研究有着密切的联系# 但又有重要的区别# 自然语言处理并不是一般地研究自然语言# 而在于研制能有效地实现自然语言通信的计算机系统# 特别是其中的软件系统# 因而它是计算机科学的一部分s = SnowNLP([[u'这篇', u'文章'],[u'那篇', u'论文'],[u'这个', u'这个']])# 9.计算tf值(即词频)print(s.tf)# [{'这篇': 1, '文章': 1}, {'那篇': 1, '论文': 1}, {'这个': 2}]# 10.计算机idf值(即逆文档频率:可以用于tf-idf关键词提取)print(s.idf)# {'这篇': 0.5108256237659907, '文章': 0.5108256237659907, '那篇': 0.5108256237659907, '论文': 0.5108256237659907, '这个': 0.5108256237659907}# 11.计算文本相似度print(s.sim([u'文章'])) # 相似度# [0.5108256237659907, 0, 0]s = SnowNLP('即逆文档频率:关键词提取')print(s.sim('文档')) # 相似度# [0, 0, 2.0368819272610397, 2.0368819272610397, 0, 0, 0, 0, 0, 0, 0, 0]

关于训练

不满意准确度,这个支持自己训练(本人暂未尝试)

现在提供训练的包括分词,词性标注,情感分析,而且都提供了用来训练的原始文件,GITHUB网址

以分词为例

分词在`snownlp/seg`目录下

from snownlp import segseg.train('data.txt')seg.save('seg.marshal')#from snownlp import tag#tag.train('199801.txt')#tag.save('tag.marshal')#from snownlp import sentiment#sentiment.train('neg.txt', 'pos.txt')#sentiment.save('sentiment.marshal')

这样训练好的文件就存储为`seg.marshal`了,之后修改`snownlp/seg/__init__.py`里的`data_path`指向刚训练好的文件即可

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。