首页 > 其他 > 详细

NLP之情感分析:SnowNLP

时间:2019-05-05 14:49:37      阅读:235      评论:0      收藏:0      [点我收藏+]

一 安装与介绍

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

pip install snownlp
技术分享图片

二 模块解析

2.1 seg [分词模块]

from snownlp import seg
from snownlp import SnowNLP

s = SnowNLP(u"今天我很快乐。你怎么样呀?");
print("[words]",s.words); # 分词

seg.train(trainDataFileOfPath); # 训练用户提供的自定义的新的训练分词词典的数据集
seg.save(targetDir+'seg2.marshal'); #保存训练后的模型
print(seg.data_path) # 查看 or 设置snownlp提供的默认分词的词典的路径

# [output]
[words] ['苏', '宁易', '购', ',', '是', '谁', '给', '你们', '下', '架', 'OV', '的', '勇气']
D:\Program Files (x86)\Anaconda3\lib\site-packages\snownlp\seg\seg.marshal 
技术分享图片
# 打开其目录seg中的data.txt:
迈/b 向/e 充/b 满/e 希/b 望/e 的/s 新/s 世/b 纪/e
中/b 共/m 中/m 央/e 总/b 书/m 记/e

# /b代表begin,/m代表middle,/e代表end,分别代表一个词语的开始,中间词和结尾,/s代表single,一个字是一个词的意思

2.2 sentiment [情感分析]

from snownlp import sentiment

s = SnowNLP(u"今天我很快乐。你怎么样呀?");
print("[sentiments]",s.sentiments); #情感性分析

sentiment.train(neg1.txt,pos1.txt); #   训练用户提供的自定义的新的训练分词词典的负面情感数据集和正面情感数据集
sentiment.save('sentiment2.marshal');  #保存训练后的模型

print(sentiment.data_path) # 查看 or 设置snownlp提供的默认情感分析模型的路径
# [output]
[sentiments] 0.884423983248302
D:\Program Files (x86)\Anaconda3\lib\site-packages\snownlp\sentiment\sentiment.marshal
技术分享图片

二 API

2.1 SnowNLP(text)

# s as SnowNLP(text)
1) s.words        词语
2) s.sentences   句子
3) s.sentiments 情感偏向,0-1之间的浮点数,越靠近1越积极
4) s.pinyin         转为拼音
5) s.han             转为简体
6) s.keywords(n) 提取关键字,n默认为5
7) s.summary(n)  提取摘要,n默认为5
8) s.tf                   计算term frequency词频
9) s.idf                 计算inverse document frequency逆向文件频率
10) s.sim(doc,index)          计算相似度

三 快速示例教程

# [code]
import os
from snownlp import SnowNLP
from snownlp import sentiment
from snownlp import seg

# snownlp - demo
text = [u"今天我很快乐。你怎么样呀?",u"苏宁易购,是谁给你们下架OV的勇气",u"恐怖",u"质量不太好"];
s = SnowNLP(text[2]) #载入文本
print("[words]",s.words); # 分词
print("[sentiments]",s.sentiments); #情感性分析
for sentence in s.sentences :#分句
    print("[sentence]",sentence);
    pass;

#sentiment.train('./neg.txt', './pos.txt');# 重新训练语料模型
#sentiment.save('sentiment.marshal'); # 保存好新训练的词典模型
print("[seg.data_path]",seg.data_path); # 查看seg子模块的词典位置
print("[sentiment.data_path]",sentiment.data_path); # 查看sentiment子模块的词典位置
#seg.data_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),'sentiment.marshal') # 设置词典位置
# [output]
[words] ['恐怖']
[sentiments] 0.293103448275862
[sentence] 恐怖
[seg.data_path] D:\Program Files (x86)\Anaconda3\lib\site-packages\snownlp\seg\seg.marshal
[sentiment.data_path] D:\Program Files (x86)\Anaconda3\lib\site-packages\snownlp\sentiment\sentiment.marshal

四 参考文献

NLP之情感分析:SnowNLP

原文:https://www.cnblogs.com/johnnyzen/p/10812772.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!