SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。注意本程序都是处理的unicode编码,所以使用时请自行decode成unicode。
简而言之就是:SnowNLP是一个Python写的类库,而且是针对中文的自然语言处理库。
注意,SnowNLP的情感分析文本只处理unicode编码。在下面的代码中,我们在字符串前加了一个u,代表unicode字符串。
from snownlp import SnowNLP
# 文本
text = u"""自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。
它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
自然语言处理是一门融语言学、计算机科学、数学于一体的科学。"""
# 分析
s = SnowNLP(text)
#输出文字内容
print(s.doc)
自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。
它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
自然语言处理是一门融语言学、计算机科学、数学于一体的科学。
#输出文本拼音
print(s.pinyin)
['Zi', 'ran', 'yu', 'yan', 'chu', 'li', 'shi', 'ji', 'suan', 'ji', 'ke', 'xue', 'ling', 'yu', '与', 'ren', 'gong', 'zhi', 'neng', 'ling', 'yu', 'zhong', 'de', 'yi', 'ge', 'zhong', 'yao', 'fang', 'xiang', '。', 'ta', 'yan', 'jiu', 'neng', 'shi', 'xian', 'ren', '与', 'ji', 'suan'o', 'fang', 'fa', '。', 'Zi', 'ran', 'yu', 'yan', 'chu', 'li', 'shi', 'yi', 'men', 'rong', 'yu', 'yan', 'xue', '、', 'ji', 'suan', 'ji', 'ke', 'xue', '、', 'shu', 'xue', '于', 'yi', 'ti', 'de', 'ke', 'xue', '。']
#将文本用标点符号分解存入列表
print(s.sentences)
['自然语言处理是计算机科学领域与人工智能领域中的一个重要方向', '它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法', '自然语
言处理是一门融语言学、计算机科学、数学于一体的科学']
#中文分词
print(s.words)
['自然', '语言', '处理', '是', '计算机', '科学', '领域', '与', '人工', '智能', '领域', '中', '的', '一个', '重要', '方向', '。', '它', '研
究', '能', '实现', '人', '与', '计算机', '之间', '用', '自然', '语言', '进行', '有效', '通信', '的', '各种', '理论', '和', '方法', '。', '
自然', '语言', '处理', '是', '一', '门融', '语言', '学', '、', '计算机', '科学', '、', '数学', '于', '一体', '的', '科学', '。']
#关键词挖掘,括号内为关键词个数
print(s.keywords(3))
['计算机', '语言', '自然']
#输出情绪为积极的概率
print(s.sentiments)
0.9999999999994513
导入京东电商评论数据集,利用SnowNLP批量进行情感分析。
from snownlp import SnowNLP
file = open('jd_comments.txt','r',encoding='utf-8')
txt = file.readline()
for txt in file:
txt = txt.strip('\n')
s = SnowNLP(txt)
#输出情绪为积极的概率
print(txt)
print(s.sentiments)
真的不错,电脑性价比超高,值得拥有,娱乐,办公都无压力,方便不占地方,售后满分?,有点小建议,希望客服联系我
0.9999940124391355
东西还可以吧 塑料的 读盘还可以 便宜价格能用就行 我看也就是满足下偶尔使用需求 带usb还带单独的电源供电不过也是usb的
0.02366718120217337
孩子在学画画,老师推荐购买的绘画笔。质量不错,商品实物和网上描述一样。更狠的是包装,两层纸盒包装,内部还有泡沫包裹,不错。
0.9954123929603816
嗯,主机很好 快递很好 嗯,客服服务小诺,嗯,服务很好,还送的一根线 还有客服吕布也非常耐心,,因为是电脑小白很多东西不知道。谢谢吕布
的远程帮忙你教我了很多硬盘安装 跑分也很高。
0.07737470859014162
收到货三四天了,昨天有空装上,就给印了八百多张,用着还行,比我以前那个老机器速度快了,全触屏,无线网络,扫描仪还没试。
0.05964857869841478
首先要吐槽一下,补寄发票是真的慢啊。接下来说一下这个电脑吧,观望这个还有联想的一款很久,联想的价格浮动特别频繁,而且显卡是阉割版的只有2G显
存,最终选择了这款,用了几天开机速度是很快,毕竟有固态硬盘。有4处设计不太人性化,第一,大小写没有指示灯,第二小键盘开关键也没有指示灯,第三
,快速开始低功耗也没指示灯,这3个没指示灯导致用户不知道现在是否开启。第四,电池不能卸载。我用LOL测试了一下强冷还有低功耗,强冷与低功耗的打
开与关闭有比较明显的变化,打开低功耗,FPS有明显变化,65到150左右,强冷的打开与关闭温度在50到68这样,总体还可以。电脑做工还行吧,这个价位还
算合适。
0.001825288988741347
京東配送, 物流超快. 晚上2230下單, 白天1126就收到!!! 包裝小小壓到了, 不過無損內容物. 東西很棒. 一天用下來都不用充電. 連線超快, APP很直
觀, 設定方便.
from snownlp import SnowNLP
import matplotlib.pyplot as plt
file = open('jd_comments.txt','r',encoding='utf-8')
txt = file.readline()
lis = []
for txt in file:
txt = txt.strip('\n')
s = SnowNLP(txt)
#输出情绪为积极的概率
#print(txt)
lis.append(s.sentiments)
plt.hist(lis, histtype='bar', rwidth=0.8)
plt.show()
可以看到正面评论大致有600条左右,负面评论有200条左右,整体来看对于该产品的用户评价趋于正面。
SnowNLP
也存在输出的情感值较为极端,大多数趋向于0和1,对于中间性评论的识别不够。