电影评价情感分析

前言本模块将使用IMDB情绪分析数据集,数据集包含100,000条正面和负面的多段电影评论。利用NLP技术来预测电影评论是正向情绪还是负面情绪。什么是NLP?NLP(自然语言处理)是一种...
摘要由CSDN通过智能技术生成

前言

本模块将使用IMDB情绪分析数据集,数据集包含100,000条正面和负面的多段电影评论。利用NLP技术来预测电影评论是正向情绪还是负面情绪。

什么是NLP?

NLP(自然语言处理)是一种用于解决文本问题的技术。本模块将会用word2vec进行加载和清理IMDB电影评论,用模型预测是赞成还是反对。

模块分为三部分:

  •  基本自然语言处理:Bag of Words面向初学者,介绍了基本自然语言处理技术。

  • 用于文本理解的深度学习:在第2部分和第3部分中,深入研究如何使用Word2Vec训练模型以及如何将所得的词向量用于情感分析。

01

第一部分

读取数据集

import pandas as pd
import numpy as np
from bs4 import BeautifulSoup
import re
# 载入数据集
train = pd.read_csv('labeledTrainData.tsv',
                    header=0, 
                    delimiter="\t", 
                    quoting=3)

调用get_text()得到没有标签或标记的评论文本。

BeautifulSoup是一个非常强大的库。这里用正则表达式删除标记并不是很好,最好还是使用BeautifulSoup之类的包。

处理标点,数字和停用词:NLTK和正则表达式

在考虑如何清除文本时,应该考虑我们要解决的是什么数据问题。对于许多问题,删除标点符号是有意义的。但我们正在解决情感分析问题,并且可能“ !!!” 或“ :-(”可能带有情感,应将其视为单词。在本模块中,为简单起见,我完全删除了标点符号,但是您可以自己使用它。

# 定义方法来清理文本数据:去掉停用词、标点符号
# 把句子转成单词列表
def review_to_words(raw_review):
    # 去除html标签
    review_text = BeautifulSoup(raw_review,
                       'html.parser').get_text()
    # 剔除非单词字符,并用空格替换
    letters_only = re.sub("[^a-zA-Z]", " " , review_text)
    # 转为为小写字母,并切分成单词
    words = letters_only.lower().split()
    # 剔除停用词
    stops = set(stopwords.words("english")) 
    meaningful_words = [w for w in words if not w in stops]
    return " ".join(meaningful_words)

注释,将停用词列表转换为set是为了提高速度;由于我们将要调用该函数数万次,因此它需要快速运行,并且在Python中搜索集合比搜索列表要快得多。

OK,准备工作都做完了,现在可以循环清理所有训练集:

num_reviews = train['review'].size
clean_train_reviews = []
for i in range(num_reviews):
    if (i + 1) % 1000 == 0:
        print("Review %d of %d\n" % (i+1, num_reviews)) 
    clean_train_reviews.append(review_to_words(train['review'][i]))

使用Bag of Words构造特征

两个句子:

Sentence 1: "The cat sat on the hat"

Sentence 2: "The dog ate the cat and the hat"

根据这两句话可以得到词集合如下:

{ the, cat, sat, on, hat, dog, ate, and }

bags of words:计算每个单词在句子中出现的次数。

Sentence 1, "the" 出现两次,  "cat", "sat", "on",  "hat" 各出现一次, 所以第一句话的特征词:

{ the, cat, sat, on, hat, dog, ate, and }

对应的特征向量是:

  • Sentence 1: { 2, 1, 1, 1, 1, 0, 0, 0 }

同样的,可以得到: 

  • Sentence 1: { 3, 1, 0, 0, 1, 1, 1, 1}

下面用python实现上面的功能:「scikit-learn」

# Bag of Words构造特征
from sklearn.feature_extraction.text import CountVectorizer
# 初始化CountVectorizer对象
vectorizer = CountVectorize
  • 6
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值