NLTK软件包包含了电影评论和分类器,可以比较容易实现电影评论的分类:正面评价还是负面评价。本文的算法使用了分句、分词、去停用词、词性标注、词性还原,而不是直接将电影评论分词后直接使用。尽管效果类似,但是这样处理更贴近实际应用情况:

from nltk.corpus import movie_reviews
from nltk import tokenize
from nltk.corpus import stopwords
from nltk import pos_tag
import nltk.classify.util
from nltk.classify import NaiveBayesClassifier
from nltk.corpus import wordnet
from nltk.stem import WordNetLemmatizer
# 获取单词的词性
def get_pos(tag):if tag.startswith('J'):return wordnet.ADJelif tag.startswith('V'):return wordnet.VERBelif tag.startswith('N'):return wordnet.NOUNelif tag.startswith('R'):return wordnet.ADVelse:return None
def extract_features(word_list):return dict([(word, True) for word in word_list])def features(movie,type):#读取句子pos_features=[]stopWords = set(stopwords.words('english'))for f in movie.fileids(type):raw_sents = movie.raw(f)sents = tokenize.sent_tokenize(raw_sents)# 分割单词,去停用词raw_words = [tokenize.word_tokenize(s) for s in sents]words_features = [w for r in raw_words for w in r if w not in stopWords and len(w) > 2 and w.isalpha()]#词性标注wnl = WordNetLemmatizer()words_tag = pos_tag(words_features)  # 获取单词词性lemmas_sents = []for tag in words_tag:wordnet_pos = get_pos(tag[1]) or wordnet.NOUNwords = wnl.lemmatize(tag[0], pos=wordnet_pos)lemmas_sents.append(words)pos_features.append((extract_features(lemmas_sents),type))return pos_features# 转换为小写
pos_features = features(movie_reviews, 'pos')
neg_features = features(movie_reviews, 'neg')threshold_factor = 0.8
pos_threshold = int(threshold_factor * len(pos_features))
neg_threshold = int(threshold_factor * len(neg_features))
# 提取特征 800个积极文本800个消极文本构成训练集  200+200构成测试文本
features_train = pos_features[:pos_threshold] + neg_features[:neg_threshold]
features_test = pos_features[pos_threshold:] + neg_features[neg_threshold:]# 训练朴素贝叶斯分类器
classifier = NaiveBayesClassifier.train(features_train)
print("\n分类器的准确性:", nltk.classify.util.accuracy(classifier, features_test))input_reviews = ["This is a dull movie. I would never recommend it to anyone.","The movie was terrible and the story was confusion","As a whole,this movie not only has a wonderful plot but also provide food for thought","I really enjoyed that film!",
]
# 运行分类器,获得预测结果
print("\n预测:")
for review in input_reviews:print("\n评论:", review)probdist = classifier.prob_classify(extract_features(review.split()))pred_sentiment = probdist.max()# 打印输出print("预测结果:", pred_sentiment)print("可能性:", round(probdist.prob(pred_sentiment), 2))

说明:

  1. 函数get_pos()
    此函数的作用是根据输入的词性,返回wordnet中定义的词性。输入的词性根据tag的首字母判断。比如首字母是“V”,则对应的词性是动词。
    2.函数extract_features()
    此函数的作用是将输入的词汇列表转换为字典格式。贝叶斯分类器要求的输入格式。
    3.函数features()
    此函数的作用是读入影评数据,然后进行分句、分词、去停用词、词性标注、词性还原等,处理影评数据,生成贝叶斯分类器需要的数据。
    4.生成数据集
    5.使用贝叶斯分类器进行训练
    6.测试

使用NLTK做电影评论分析相关推荐

  1. 【Python数据分析】文本情感分析——电影评论分析(二)

    接上一篇<[Python数据分析]文本情感分析--电影评论分析(一)>. 目录 文本向量化 词袋模型 TF-IDF 建立模型 构建训练集与测试集 特征选择 方差分析 逻辑回归 朴素贝叶斯 ...

  2. 情感分析之电影评论分析-基于Tensorflow的LSTM

    1. 深度学习在自然语言处理中的应用 自然语言处理是教会机器如何去处理或者读懂人类语言的系统,目前比较热门的方向,包括如下几类: 对话系统 - 比较著名的案例有:Siri,Alexa 和 Cortan ...

  3. 【Python数据分析】文本情感分析——电影评论分析(一)

      情感分析是文本分析的一种,它能够从一段文本描述中理解文本的感情色彩,是褒义.贬义还是中性.常见的情感分析的使用场景就是客户对商品或服务的评价.反馈,传统模式下的人工审核,不仅消耗大量人力,而且效率 ...

  4. 使用CNN做电影评论的负面检测——本质上感觉和ngram或者LSTM同,因为CNN里图像检测卷积一般是3x3,而文本分类的话是直接是一维的3、4、5...

    代码如下: from __future__ importdivision, print_function, absolute_importimporttensorflow as tfimporttfl ...

  5. Pytorch+Text-CNN+Word2vec+电影评论情感分析实战

    文章目录 0.前言 1.电影评论数据集 2.数据读取 3.数据预处理 4.准备训练和测试集 5.加载词向量模型Word2vec 6.定义网络 7.训练网络 8.测试网络和可视化 9.总结 0.前言 很 ...

  6. 分析句子情感——NLTK电影评论

    import nltk.classify.util from nltk.classify import NaiveBayesClassifier from nltk.corpus import mov ...

  7. 20行代码实现电影评论情感分析

    背景 情感分析有很多的应用场景,比如做一个电商网站,卖家需要时刻关心用户对于商品的评论是否是正面的.再比如做一个电影的宣传和策划,电影在键盘侠们中的口碑也至关重要.互联网上关于任何一个事件或物品都有可 ...

  8. lstm训练情感分析的优点_LSTM对电影评论进行简单的情感分析

    今天自己尝试使用LSTM对电影评论进行简单的情感分析 代码中npy文件: 代码使用的数据集是IMDB,网盘地址: 首先读取已经做好的词向量模型 import numpy as np # 这里有两个表, ...

  9. 自然语言处理实战——对电影评论进行情感分析(英文)

    写在前: 本次的训练集和测试集还有停用词我都放在我的公众号里面了(为了方便大家提取特意去开的公众号哈哈哈哈) 公众号:YOLO的学习进阶日常 对话框输入:英文文本分析 数据源 做本次实战的契机是疫情期 ...

最新文章

  1. python opencv 透视变换
  2. uva 10759 Dice Throwing
  3. 深度解密Go语言之scheduler
  4. 更新npm至最新版本
  5. js中的时间与毫秒数互相转换
  6. 探讨NET Core数据进行3DES加密或解密弱密钥问题
  7. 数据分析师 需求分析师_是什么让分析师出色?
  8. [转载]Docker的安装配置及使用详解
  9. 10 分钟了解 Flutter 跨平台方案
  10. 台式计算机麦说不了话,耳机有声音麦克风没声音怎么办?解决电脑耳机有声音麦不能说话...
  11. Pygame制作音乐播放器
  12. mysql 本月第一天_mysql日期 获取本月第一天 获取下个月的第一天
  13. 递归的算法求1,1,2,3,5,8.......的第30位数是多少,然后求这些数的和.
  14. transform.invert 预处理逆操作
  15. TextView简介
  16. 读论文,衣物检索:Clothing Retrieval with Visual Attention Model(2017.10.31)
  17. springboot停车场车辆定位管理可视化分析系统 毕业设计-附源码101702
  18. 如何创建自己的云盘-私有云盘
  19. ThingsBoard添加高德地图
  20. Linux 下编译 VLC

热门文章

  1. 可信验证与TPCM技术
  2. 第十二章:synchronized与锁升级
  3. Git之cherry-pick
  4. python的水藻生长问题_如何抑制水中藻类生长
  5. 什么东西比地球上的沙子还要多?
  6. Google地球影像下载及导航软件
  7. TDUCK-PRO表单系统版本部署教程-详细
  8. 跟随自己,让自己的灵魂做主
  9. 谷歌出品,数据集搜索引擎上线了!
  10. 智能手环数据研究2——数据准确性研究简易评估