正在进入ing...

使用SnowNLP做情感分析(自己训练数据)

发布时间:2022-08-03 浏览量: 39 文章分类: python

之前机器学习还是一个门槛很高的学科,但是得益于这几年计算机技术的突飞猛进,让我这种学渣也可以方便简单的使用上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))
-----> ['语言', '匹', '配式']

keywordssnowNLP下的一个方法,接受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) 是研究人与计算机交互的语言问题的一门学科']

summarysnowNLP下一个方法,有一个可选参数

  • 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')的引用路径即可。