首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python基于NLTK+jieba+SnowNLP的情感分析(一)

搜集了网上一些论坛的玩家反馈信息,需要进行正负面分析,刚开始是用jieba分词然后关键词匹配的做法去实现的,但是发现这样子做比较不合情理,因为不带情感、简单的分词会对真实意思产生偏差

比如:

我不喜欢今天的电影

分词之后的效果是

我,不,喜欢,今天,的,电影

所以我的做法是

1、适用nltk的NaiveBayesClassifier包进行关键词训练进行

2、WordPunctTokenizer进行带情感的分词

3、classifier.classify+SnowNLP进行正负面分析

接下来分步讲解实现方式

1、数据准备、特征提取

我自有一批正面关键词和负面关键词,需要注入到nltk里面,这样可以使它在进行分析的时候,把我的词库也加到影响因子里面

def word_feats(words):

return dict([(word, True) for word in words])

# 训练将特征提取之后的对象适用NaiveBayesClassifier进行训练

classifier = NaiveBayesClassifier.train(train_set)

2、分词

分词需要用到nltk的stopwords去过滤一些噪音,以免对分析结果产生太多影响

fromnltk.corpusimportstopwords

word_lst = WordPunctTokenizer().tokenize(text)

word_lst =[wforwinword_lstif(wnot instopwords.words('stop_word'))]

使用stopwords.words的时候可能会出现如下图的提醒,是因为我们本地还没有下载停顿词

命令行输入如下图,会弹出一个弹窗

在里面选择Corpora标签,里面找到stopword,选择好路径,点击下载

下载好时候会在目录下自动创建这么多文件,文件名就是stopwords.words('xxxxxx')里面的xxxxx,我是对中文进行去噪音,里面没有我需要的,所以我把这些文件都删了,创建了一个我自己的文件stop_word

stop_word里面的内容如下图,都是一些无关精要的符号、助词、连接词之类的,是在github上面找的一个比较全的,这个文件可以自己填充,训练属于自己的分析器

https://github.com/fwwdn/sensitive-stop-words/blob/master/stopword.dic

下图是做了一个比较,分别是用jieba分词、nltk不带去stop_word的分词效果、带stop_word的分词效果(具体实现看这一篇源码)

print(word_lst)

word_lst = WordPunctTokenizer().tokenize(text)

print(word_lst)

word_lst =[wforwinword_lstif(wnot instopwords.words('stop_word'))]

print(word_lst)

可以看到

第一行jieba分词把所有的单词都做了拆分,分词效果较好,但是不带情感

第二行是nltk分词,比较能体现一句话的大概意思,但是里面有“,”这样影响结果的噪音存在

第三行是去噪音之后的效果

classResult = classifier.classify(word_feats(word))之后,会返回pos|neg

score = pos/(pos+neg)

就可以得出一个正面的分值

还有一种是直接使用SnowNLP对句子进行分析,我也会在下一篇里面贴出源码

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181223G0GFV800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券