资讯动态

利用Python实现酒店评论的情感分析

发布时间:2026/8/14 5:04:06 来源:尧图企业网站定制
♻️ 资源大小223KB➡️资源下载https://download.csdn.net/download/s1t16/87453195利用Python实现酒店评论的情感分析情感极性分析即情感分类对带有主观情感色彩的文本进行分析、归纳。情感极性分析主要有两种分类方法基于情感知识的方法和基于机器学习的方法。基于情感知识的方法通过一些已有的情感词典计算文本的情感极性正向或负向其方法是统计文本中出现的正、负向情感词数目或情感词的情感值来判断文本情感类别基于机器学习的方法利用机器学习算法训练已标注情感类别的训练数据集训练分类模型再通过分类模型预测文本所属情感分类。本文采用机器学习方法实现对酒店评论数据的情感分类利用Python语言实现情感分类模型的构建和预测不包含理论部分旨在通过实践一步步了解、实现中文情感极性分析。1 开发环境准备1.1 Python环境在python官网https://www.python.org/downloads/ 下载计算机对应的python版本本人使用的是Python2.7.13的版本。1.2 第三方模块本实例代码的实现使用到了多个著名的第三方模块主要模块如下所示1Jieba目前使用最为广泛的中文分词组件。下载地址jieba · PyPI2Gensim用于主题模型、文档索引和大型语料相似度索引的python库主要用于自然语言处理NLP和信息检索IR。下载地址gensim · PyPI本实例中的维基中文语料处理和中文词向量模型构建需要用到该模块。3Pandas用于高效处理大型数据集、执行数据分析任务的python库是基于Numpy的工具包。下载地址Client Challenge4Numpy用于存储和处理大型矩阵的工具包。下载地址numpy · PyPI5Scikit-learn用于机器学习的python工具包python模块引用名字为sklearn安装前还需要Numpy和Scipy两个Python库。官网地址scikit-learn: machine learning in Python — scikit-learn 1.9.0 documentation6MatplotlibMatplotlib是一个python的图形框架用于绘制二维图形。下载地址https://pypi.python.org/pypi/matplotlib7TensorflowTensorflow是一个采用数据流图用于数值计算的开源软件库用于人工智能领域。官网地址http://www.tensorfly.cn/下载地址Client Challenge2 数据获取2.1 停用词词典本文使用中科院计算所中文自然语言处理开放平台发布的中文停用词表包含了1208个停用词。下载地址http://www.hicode.cc/download/view-software-13784.html2.2 正负向语料库文本从http://www.datatang.com/data/11936 下载“有关中文情感挖掘的酒店评论语料”作为训练集与测试集该语料包含了4种语料子集本文选用正负各1000的平衡语料ChnSentiCorp_htl_ba_2000作为数据集进行分析。3 数据预处理3.1 正负向语料预处理下载并解压ChnSentiCorp_htl_ba_2000.rar文件得到的文件夹中包含neg负向语料和pos正向语料两个文件夹而文件夹中的每一篇评论为一个txt文档为了方便之后的操作需要把正向和负向评论分别规整到对应的一个txt文件中即正向语料的集合文档命名为2000_pos.txt和负向语料的集合文档命名为2000_neg.txt。具体Python实现代码如下所示运行完成后得到2000_pos.txt和2000_neg.txt两个文本文件分别存放正向评论和负向评论每篇评论为一行。文档部分截图如下所示3.2 中文文本分词本文采用结巴分词分别对正向语料和负向语料进行分词处理。特别注意在执行代码前需要把txt源文件手动转化成UTF-8格式否则会报中文编码的错误。在进行分词前需要对文本进行去除数字、字母和特殊符号的处理使用python自带的string和re模块可以实现其中string模块用于处理字符串操作re模块用于正则表达式处理。具体实现代码如下所示处理完成后得到2000_pos_cut.txt和2000_neg_cut.txt两个txt文件分别存放正负向语料分词后的结果。3.3 去停用词分词完成后即可读取停用词表中的停用词对分词后的正负向语料进行匹配并去除停用词。去除停用词的步骤非常简单主要有两个1读取停用词表2遍历分词后的句子将每个词丢到此表中进行匹配若停用词表存在则替换为空。具体实现代码如下所示根据代码所示停用词表的获取使用到了python特有的广播形式一句代码即可搞定stopkey [w.strip() for w in codecs.open(data\stopWord.txt, r, encodingutf-8).readlines()]读取出的每一个停用词必须要经过去符号处理即w.strip()因为读取出的停用词还包含有换行符和制表符如果不处理则匹配不上。代码执行完成后得到2000_neg_cut_stopword.txt和2000_pos_cut_stopword.txt两个txt文件。由于去停用词的步骤是在句子分词后执行的因此通常与分词操作在同一个代码段中进行即在句子分词操作完成后直接调用去停用词的函数并得到去停用词后的结果再写入结果文件中。本文是为了便于步骤的理解将两者分开为两个代码文件执行各位可根据自己的需求进行调整。3.4 获取特征词向量根据以上步骤得到了正负向语料的特征词文本而模型的输入必须是数值型数据因此需要将每条由词语组合而成的语句转化为一个数值型向量。常见的转化算法有Bag of Words(BOW)、TF-IDF、Word2Vec。本文采用Word2Vec词向量模型将语料转换为词向量。由于特征词向量的抽取是基于已经训练好的词向量模型而wiki中文语料是公认的大型中文语料本文拟从wiki中文语料生成的词向量中抽取本文语料的特征词向量。Wiki中文语料的Word2vec模型训练在之前写过的一篇文章“利用Python实现wiki中文语料的word2vec模型构建” 中做了详尽的描述在此不赘述。即本文从文章最后得到的wiki.zh.text.vector中抽取特征词向量作为模型的输入。获取特征词向量的主要步骤如下1读取模型词向量矩阵2遍历语句中的每个词从模型词向量矩阵中抽取当前词的数值向量一条语句即可得到一个二维矩阵行数为词的个数列数为模型设定的维度3根据得到的矩阵计算矩阵均值作为当前语句的特征词向量4全部语句计算完成后拼接语句类别代表的值写入csv文件中。主要代码如下图所示代码执行完成后得到一个名为2000_data.csv的文件第一列为类别对应的数值1-pos, 0-neg第二列开始为数值向量每一行代表一条评论。结果的部分截图如下所示3.5 降维Word2vec模型设定了400的维度进行训练得到的词向量为400维本文采用PCA算法对结果进行降维。具体实现代码如下所示运行代码根据结果图发现前100维就能够较好的包含原始数据的绝大部分内容因此选定前100维作为模型的输入。4 分类模型构建本文采用支持向量机SVM作为本次实验的中文文本分类模型其他分类模型采用相同的分析流程在此不赘述。支持向量机SVM是一种有监督的机器学习模型。本文首先采用经典的机器学习算法SVM作为分类器算法通过计算测试集的预测精度和ROC曲线来验证分类器的有效性一般来说ROC曲线的面积AUC越大模型的表现越好。首先使用SVM作为分类器算法随后利用matplotlib和metric库来构建ROC曲线。具体python代码如下所示运行代码得到Test Accuracy: 0.88即本次实验测试集的预测准确率为88%ROC曲线如下图所示。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价