安装
pip install snownlp
导包
from snownlp import SnowNLP
# 加载情感分析模块
from snownlp import sentiment
导入数据集
text=pd.read_excel("./自然语言文本.xlsx")
text.head()
更改行名称
# 改名
text.columns=['comment', 'predict', 'True_cls']
text.head()
训练自定义的neg.txt/pos.txt数据并保存训练模型(此处使用snownlp自带的购物数据)
sentiment的neg.txt和pos.txt,这两个里放的是负向情感和正向情感的句子。所以在训练的时候也只需要这样子放入句子即可:
同时仍然可以训练分词:seg
注意:
① 复制路径后,Windows10默认右斜杠,把它改成左斜杠如下才可运行
② 训练neg.txt/pos.txt,此处使用snownlp自带的(偏购物),
也可以自定义自身业务方向的词库
③ 保存位置可自己决定,但要把snownlp/seg/__init__.py或
snownlp/sentiment/__init__.py的data_path也改成你保存的位置,不然下次使用还是默认的。
sentiment.train('D:/Anaconda/Lib/site-packages/snownlp/sentiment/neg.txt',
'D:/Anaconda/Lib/site-packages/snownlp/sentiment/pos.txt')
# 本文将此保存文件移至原模型处,并修改了__init__.py
sentiment.save("./sentiment_my.marshal")
'''
'''
给每条评论计算得分(情感系数越大则表示正向)
text.comment.map(lambda x : SnowNLP(x).sentiments)
Out:
0 0.475748
1 0.598626
2 0.034824
3 0.939508
4 0.942496
5 0.052602
6 0.462825
7 0.043609
8 0.150083
Name: comment, dtype: float64
# 保存至表格字段中
text['proba']=proba
关键词提取
# 关键词提取 效果不怎么好
[SnowNLP(i).keywords(2) for i in comment]
Out:
[['衣服', '好'],
['还', '都'],
['太', '态度'],
['喜欢', '很'],
['衣服', '买'],
['不', '回'],
['快', '物流'],
['购', '网'],
['衣服', '一件']]
计算相似度(不是很准确)
tt=[["今天星期日,又到了一个周末,可是我还要加班,非常的生气不开心!"],
['还好今天星期一要上班,不然周末该如何是好'],
['周末来啦,还是很开心呢'],
['周末还是来了!'],
['相信未来一切光明。'],
['周末来啦'],
['周末来啦,还是很开心呢'],
['周末来啦,还是很开心呢']
]
SnowNLP(tt).sim(['周末来啦,还是很开心呢'])
Out:
[0, 0, 0.4519851237430572, 0, 0, 0, 0.4519851237430572, 0.4519851237430572]
# 计算BM2.5 相似性
s = SnowNLP([[u'这篇', u'文章',u'非常好'],
[u'那篇', u'文章',u'一般般'],
[u'这个']])
#s.tf
s.idf
s.sim([u'这篇', u'文章',u'非常好'])# [0.3756070762985226, 0, 0]
概率大于0.6设置为1,反之设置为-1
# 使用map高阶函数速度要比for循环快
text['proba'].map(lambda x: 1 if x>0.6 else -1)
Out:
0 -1
1 -1
2 -1
3 1
4 1
5 -1
6 -1
7 -1
8 -1
Name: proba, dtype: int64
#或者:
predict=[]
for i in proba:
if i>0.6:
predict.append(1)
else:
predict.append(-1)
predict
text['predict']=predict
预测的准确率
# 本次预测的准确率
(text.predict==text.True_cls).sum()/text.predict.size
Out: 0.6666666666666666