使用SnowNLP做情感分析(自己训练数据)
之前机器学习还是一个门槛很高的学科,但是得益于这几年计算机技术的突飞猛进,让我这种学渣也可以方便简单的使用上NLP
相关的能力。真的是爽。
安装
这个就比较简单,直接pip install snownlp
即可。
使用
由于snownlp
的用法还比较多,这里我展开将常用的分别罗列一下。
中文分词
from snownlp import SnowNLP
s = SnowNLP("wuyabala.com,佩恩的博客")
print(s.words)
-----> ['wuyabala.com,', '佩恩', '的', '博', '客']
你没有看错,只要三行代码,分词就已经出来了。
词性标注
from snownlp import SnowNLP
s = SnowNLP("wuyabala.com,佩恩的博客")
print(list(s.tags))
-----> [('wuyabala.com,', 'Tg'), ('佩恩', 'Tg'), ('的', 'u'), ('博', 'Tg'), ('客', 'Ng')]
情感分析
这个是我使用比较多的,但是要注意,这个库本身作者带的训练集是电商类的,所以如果你不是电商类情感分析,需要自己重新弄一下训练集(不用担心也很简单,后面我会说如何操作)
from snownlp import SnowNLP
s = SnowNLP("wuyabala.com,佩恩的博客")
print(s.sentiments)
-----> 0.6590462771630324
上面的意思是65%的概率是正向的,0为负向、1为正向
拼音转换
这个功能是通过Trie树实现的最大匹配,具体代码如下
from snownlp import SnowNLP
s = SnowNLP("wuyabala.com,佩恩的博客")
print(s.pinyin)
-----> ['wuyabala.com,', 'pei', 'en', 'de', 'bo', 'ke']
繁体转换简体
这个功能也是通过Trie树实现的最大匹配,具体代码如下
from snownlp import SnowNLP
s = SnowNLP("這是一段繁體字")
print(s.han)
-----> 这是一段繁体字
文本断句
可以通过很简介的语句实现文本断句功能
from snownlp import SnowNLP
s = SnowNLP("wuyabala.com,佩恩的博客")
print(s.sentences)
-----> ['wuyabala.com', '佩恩的博客']
提取关键词
from snownlp import SnowNLP
s = SnowNLP("自然语言处理(NLP,Natural Language Processing) 是研究人与计算机交互的语言问题的一门学科。按照技术实现难度的不同,这类系统可以分成简单匹配式、模糊匹配式和段落理解式三种类型。")
print(s.keywords(3))
-----> ['语言', '匹', '配式']
keywords
是snowNLP
下的一个方法,接受2个参数
-
limit
类型是int
,默认值是5
,表示提取关键词的数量 -
merge
类型是boolean
,默认值是False
,表示是否需要把相关的词合并起来
提取文本摘要
from snownlp import SnowNLP
s = SnowNLP("自然语言处理(NLP,Natural Language Processing) 是研究人与计算机交互的语言问题的一门学科。按照技术实现难度的不同,这类系统可以分成简单匹配式、模糊匹配式和段落理解式三种类型。")
print(s.summary(2))
-----> ['自然语言处理(NLP', 'Natural Language Processing) 是研究人与计算机交互的语言问题的一门学科']
summary
是snowNLP
下一个方法,有一个可选参数
limit
类型是int
,默认值是5
,表示需要提取的摘要分句数量
模型训练
在很多情况下,我们不可能都用作者提供的电商模型来使用,所以就延伸出我们需要根据自己的实际情况来定制训练自己的模型。
# 语料训练文档,
# neg 存储的是负面情绪
# pos 存储的是正向情绪
from snownlp import sentiment
# 导入训练的语料库
sentiment.train('./neg.txt','./pos.txt')
# 将训练结果储存为 ntiment.marshal
sentiment.save('sentiment.marshal')
需要注意,如果你用的python
版本是3.x
的,那么你训练后的文件是sentiment.marshal.3
,然后将这个文件移动到你的安装目录下,找到安装snownlp/sentiment
替换里面的sentiment.marshal.3
,在修改__init__.py
里面os.path.join(os.path.dirname(os.path.abspath(__file__)),sentiment.marshal.3')
的引用路径即可。