基于 Python 和 NLTK 的推特情感分析

作者:宋彤彤

1. 导读

NLTK 是 Python 的一个自然语言处理模块,其中实现了朴素贝叶斯分类算法。这次 Mo 来教大家如何通过 python 和 nltk 模块实现对推文按照正面情绪(positive)和负面情绪(negative)进行归类。

在项目内部有可运行的代码教程 naive_code.ipynb 和 经过整理方便进行部署的部署文件 Deploy.ipynb,大家可以结合之前发布的Mo平台部署介绍一文学习如何部署属于自己的应用。大家也可以打开下方项目地址,对部署好的应用进行一下测试,比如简单输入 ‘My house is great.’ 和 ‘My house is not great.’ 来判断它们分别是 positve 还是 negative。

2. 准备工作

2.1 导入工具包

首先,导入我们用到的工具包 nltk。

import nltk

# 如果没有这个包,可以根据下面的代码进行操作

# pip install nltk

# import nltk

# nltk.download() # 对依赖资源进行下载,一般下载 nltk.download('popular') 即可

2.2 准备数据

训练模型需要大量的标记数据才能有比较好的效果。这里我们先用少量的数据来帮助我们了解整个的流程和原理,如果需要更好的实验结果,可以加大训练数据的数量。

因为该模型是一个二分类模型,我们需要两类数据,分别标记为 'positive' 和 'negative'。初步训练好的模型需要测试数据来检验效果。

# 标记为 positive 的数据

pos_tweets = [('I love this car', 'positive'),

('This view is amazing', 'positive'),

('I feel great this morning', 'positive'),

('I am so excited about the concert', 'positive'),

('He is my best friend', 'positive')]

# 标记为 negative 的数据

neg_tweets = [('I do not like this car', 'negative'),

('This view is horrible', 'negative'),

('I feel tired this morning', 'negative'),

('I am not looking forward to the concert', 'negative'),

('He is my enemy', 'negative')]

#测试数据,备用

test_tweets = [('I feel happy this morning', 'positive'),

('Larry is my friend', 'positive'),

('I do not like that man', 'negative'),

('My house is not great', 'negative'),

('Your song is annoying', 'negative')]

2.3 特征提取

我们需要从训练数据中提取有效的特征对模型进行训练。这里的特征是标签即其对应的推特中的有效单词。那么,怎么提取这些有效单词呢?

首先,分词并将所有单词变成小写,取长度大于 2 的单词,得到的列表代表一条 tweet;然后,将训练数据所有 tweet 包含的单词进行整合。

# 数据整合及划分成词,删除长度小于2的单词

tweets = []

for (words, sentiment) in pos_tweets + neg_tweets:

words_filtered = [e.lower() for e in words.split() if len(e) >= 3]

tweets.append((words_filtered, sentiment))

print(tweets)

# 提取训练数据中所有单词,单词特征列表从推特内容中提取出的单词来表示

def get_words_in_tweets(tweets):

all_words = []

for (words, sentiment) in tweets:

all_words.extend(words)

return all_words

words_in_tweets = get_words_in_tweets(tweets)

print(words_in_tweets)

为了训练分类器,我们需要一个统一的特征,那就是是否包含我们词库中的单词,下面的特征提取器可以对输入的 tweet 单词列表进行特征提取。

# 对一条 tweet 提取特征,得到的字典表示 tweet 包含哪几个单词

def extract_features(document):

document_words = set(document)

features = { }

for word in word_features:

features['contains({})'.format(word)] = (word in document_words)

return features

print(extract_features(['love', 'this', 'car']))

2.4 制作训练集并训练分类器

利用 nltk 的 classify 模块的 apply_features 方法制作训练集。

# 利用 apply_features 方法制作训练集

training_set = nltk.classify.apply_features(extract_features, tweets)

print(training_set)

训练朴素贝叶斯分类器。

# 训练朴素贝叶斯分类器

classifier = nltk.NaiveBayesClassifier.train(training_set)

到此,我们的分类器初步训练完成,可以使用了。

3. 测试工作

我们的分类器效果如何呢?先用我们事先准备好的测试集检验一下。可以得到 0.8 的正确率。

count = 0

for (tweet, sentiment) in test_tweets:

if classifier.classify(extract_features(tweet.split())) == sentiment:

print('Yes, it is '+sentiment+' - '+tweet)

count = count + 1

else:

print('No, it is '+sentiment+' - '+tweet)

rate = count/len(test_tweets)

print('Our correct rate is:', rate)

关于 'Your song is annoying' 这一句分类错误的原因,是我们的词库里没有关于 'annoying' 一词的任何信息。这也说明了数据集的重要性。

4. 分析总结

分类器的 _label_probdist 是标签的先验概率。 在我们的例子中,标记为 positive 和 negtive 标签的概率都是 0.5。

分类器的 _feature_probdist 是 特征/值概率词典。它与 _label_probdist 一起用于创建分类器。特征/值概率词典将预期似然估计与特征和标签相关联。我们可以看到,当输入包含 'best' 一词时,输入值被标记为 negative 的概率为 0.833。

我们可以通过 show_most_informative_features() 方法来显示分类器中最有信息价值的特征。我们可以看到,如果输入中不包含 'not',那么标记为 positive 的可能性是 negative 的 1.6 倍;不包含 'best',标记为 negative 的可能性是 positive 的1.2倍。

print(classifier._label_probdist.prob('positive'))

print(classifier._label_probdist.prob('negative'))

print(classifier._feature_probdist)

print(classifier._feature_probdist[('negative', 'contains(best)')].prob(True))

print(classifier.show_most_informative_features())

5. 参考资料

关于我们

Mo(网址:https://momodel.cn) 是一个支持 Python的人工智能在线建模平台,能帮助你快速开发、训练并部署模型。

近期 Mo 也在持续进行机器学习相关的入门课程和论文分享活动,欢迎大家关注我们的公众号获取最新资讯!

python评论情感分析nltk_基于 Python 和 NLTK 的推特情感分析相关推荐

  1. NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码

    NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码 目录 全部代码 相关文章 NLP之情感分析:基于python编程(jieba库)实现中文文本情 ...

  2. 【Mo 人工智能技术博客】基于 Python 和 NLTK 的推特情感分析

    基于 Python 和 NLTK 的推特情感分析 作者:宋彤彤 1. 导读 NLTK 是 Python 的一个自然语言处理模块,其中实现了朴素贝叶斯分类算法.这次 Mo 来教大家如何通过 python ...

  3. 某策略游戏公测期运营情况分析报告-基于python

    某策略游戏测试阶段运营情况分析报告-基于python 背景 了解数据 字段含义 加载必要的库 读取数据 查看数据类型和数据结构 统计缺失值 删除重复数据 游戏总体情况 注册人数变化 活跃用户数变化 活 ...

  4. python微博爬虫分析_基于Python的新浪微博爬虫研究

    基于 Python 的新浪微博爬虫研究 吴剑兰 (江苏警官学院,江苏 南京 210031 ) [摘 要] 摘 要:对比新浪提供的 API 及传统的爬虫方式获取微博的优缺点, 采用模拟登陆和网页解析技术 ...

  5. python微博评论情感分析_基于Python的微博情感分析系统设计

    2019 年第 6 期 信息与电脑 China Computer & Communication 软件开发与应用 基于 Python 的微博情感分析系统设计 王 欣 周文龙 (武汉工程大学邮电 ...

  6. python微博文本分析_基于Python的微博情感分析系统设计

    基于 Python 的微博情感分析系统设计 王欣 ; 周文龙 [期刊名称] < <信息与电脑> > [年 ( 卷 ), 期] 2019(000)006 [摘要] 微博是当今公众 ...

  7. python信用评分卡_基于Python的信用评分卡模型分析(二)

    上一篇文章基于Python的信用评分卡模型分析(一)已经介绍了信用评分卡模型的数据预处理.探索性数据分析.变量分箱和变量选择等.接下来我们将继续讨论信用评分卡的模型实现和分析,信用评分的方法和自动评分 ...

  8. 基于python的数据爬取与分析_基于Python的网站数据爬取与分析的技术实现策略

    欧阳元东 摘要:Python为网页数据爬取和数据分析提供了很多工具包.基于Python的BeautifulSoup可以快速高效地爬取网站数据,Pandas工具能方便灵活地清洗分析数据,调用Python ...

  9. python微信好友分析_基于python实现微信好友数据分析(简单)

    一.功能介绍 本文主要介绍利用网页端微信获取数据,实现个人微信好友数据的获取,并进行一些简单的数据分析,功能包括: 1.爬取好友列表,显示好友昵称.性别和地域和签名, 文件保存为 xlsx 格式 2. ...

最新文章

  1. C++简单使用Jsoncpp来读取写入json文件
  2. 4.6、Libgdx线程介绍
  3. 跟我一起写udev规则
  4. 转载:介绍几本专业的书籍,一起学习
  5. OpenKruise v0.10.0 版本发布:新增应用弹性拓扑管理、应用防护等能力
  6. Sql Server之旅——第六站 为什么都说状态少的字段不能建索引
  7. java socket 传输压缩文件_java基于socket传输zip文件功能示例
  8. svn中status为missing的文件的处理方式
  9. 网宿科技与国汽智控达成战略合作 共推智能网联汽车技术落地
  10. 下列哪个可做 Android 数据存储,Android应用开发试题
  11. 爱快--虚拟机单网卡(带机上网)
  12. jsp----中文乱码
  13. SpringMVC之安全性(三)Twitter登入
  14. docker 进入停止的容器_在Docker中运行一个Ubuntu镜像
  15. 破解并配置WebStorm
  16. java 单点登录(SSO)
  17. js根据出生年月获取年龄
  18. 【M1兼容】草图大师mac 英文版 SketchUp 2021 Mac
  19. Verilog 中的Procedural continuous assignments
  20. wamp下载和使用PHPDocumentor

热门文章

  1. 《正在到来的数据革命:大数据》阅读笔记
  2. java 打印十字图
  3. 打印空心菱形c语言编程,用C语言打印空心菱形问题
  4. 如何恢复笔记本的工作报表呢
  5. IRIS 2021 技术文档 First Look 29 技术概要:LDAP 和 InterSystems 产品
  6. 【ffmpeg】编译及使用外部的编解码器
  7. 虚拟机中再安装虚拟化软件Xp以上
  8. Node.js创造者Ryan Dahl专访
  9. 未来的五年,你认为最值得创业的行业是什么?
  10. EdgeChrome浏览器暗模式设置