当前位置: 首页 > 后端技术 > Python

基于Python和NLTK的Twitter情感分析

时间:2023-03-26 00:50:08 Python

基于Python和NLTK的Twitter情感分析作者:宋彤彤1.简介NLTK是Python的一个自然语言处理模块,实现了朴素贝叶斯分类算法。这次墨老师将通过python和nltk模块,教大家如何根据正面和负面情绪对推文进行分类。项目内部有一个可运行的代码教程naive_code.ipynb和整理好的部署文件Deploy.ipynb,方便部署。大家可以结合之前发布的Mo平台部署介绍了解如何部署自己的应用。您也可以打开下面的项目地址,测试部署的应用,例如,直接输入“我的房子很棒”。和“我的房子不是很好。”分别判断它们是正还是负。本文内容只需要熟悉Python,就跟着小墨一起学习吧。项目地址:https://momodel.cn/explore/5eacf3097f8b5371a8480403?type=app2。准备工作2.1导入工具包首先导入我们使用的工具包nltk。importnltk#如果没有这个包,可以按照下面代码操作#pipinstallnltk#importnltk#nltk.download()#下载依赖资源,一般下载nltk.download('popular')2.2准备data训练模型需要大量的标注数据才能达到更好的效果。这里我们先用少量数据来帮助我们理解整个过程和原理。如果需要更好的实验结果,可以增加训练数据量。因为该模型是二元分类模型,所以我们需要两类数据,分别标记为“正”和“负”。预训练模型需要测试数据来检验效果。#标记为正面的数据pos_tweets=[('我喜欢这辆车','正面'),('这个观点太棒了','正面'),('今天早上我感觉很好','正面'),('我对演唱会很兴奋','积极'),('他是我最好的朋友','积极')]#标记为消极的数据neg_tweets=[('我不喜欢这辆车','消极'),('这个观点很可怕','消极'),('今天早上我觉得很累','消极'),('我不期待演唱会','消极'),('他是我的enemy','negative')]#testdata,sparetest_tweets=[('今天早上我很开心','positive'),('Larryismyfriend','positive'),('Idonotlikethatman','negative'),('Myhouseisnotgreat','negative'),('Yoursongisannoying','negative')]2.3特征提取我们需要从训练数据中提取有效特征训练模型。这里的特点是,hashtag是它在推文中对应的有效词。那么,如何提取这些有效词呢?首先对单词进行分词,将所有单词转为小写,取长度大于2的单词,得到的列表代表一条tweet;然后,整合训练数据中所有推文中包含的词。#数据整合分词,删除长度小于2的词e)>=3]tweets.append((words_filtered,sentiment))print(tweets)#提取训练数据中的所有词,词特征列表代表从推文内容中提取的词defget_words_in_tweets(tweets):all_words=[]for(words,sentiment)intweets:all_words.extend(words)returnall_wordswords_in_tweets=get_words_in_tweets(tweets)print(words_in_tweets)为了训练分类器,我们需要一个统一的特征,即是否包含wordsin我们的词库,如下的特征提取器可以对输入的推文词列表进行特征提取。#从推文中提取特征,生成的字典指示推文包含哪些词defextract_features(document):document_words=set(document)features={}forwordinword_features:features['contains({})'.format(word)]=(wordindocument_words)returnfeaturesprint(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=0for(tweet,sentiment)intest_tweets:ifclassifier.classify(extract_features(tweet.split()))==sentiment:print('是的,它是'+sentiment+'-'+tweet)count=count+1else:print('No,itis'+sentiment+'-'+tweet)rate=count/len(test_tweets)print('Ourcorrectrateis:',rate)'Yoursongisannoying'这句话分类错误原因是我们的词库中没有关于“烦人”这个词的任何信息。这也说明了数据集的重要性。4.分析总结分类器的_label_probdist是标签的先验概率。在我们的例子中,被标记为正面和负面的概率都是0.5。分类器的_feature_probdist是特征/值概率的字典。它与_label_probdist一起使用来创建分类器。特征/值概率字典将预期似然估计与特征和标签相关联。我们可以看到,当输入包含单词“best”时,输入值被标记为负的概率为0.833。我们可以使用show_most_informative_features()方法显示分类器的最多信息特征。我们可以看到,如果'not'不包含在输入中,被标记为正的可能性是负的1.6倍;如果不包括“最佳”,则标记为负面的可能性是正面的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())更多详情请进入项目:https://momodel.cn/explore/5eacf3097f8b5371a8480403?type=appfork到你的workbench进行实际操作学习。5.参考资料学习资料:http://www.nltk.org/book/参考博客:http://www.laurentluce.com/posts/twitter-sentiment-analysis-using-python-and-nltk/关于我们Mo(网址:https://momodel.cn)是一个支持Python的在线人工智能建模平台,可以帮助您快速开发、训练和部署模型。近期,莫老师也在持续分享机器学习相关的入门课程和论文。欢迎关注我们的公众号获取最新资讯!