python酒店评论分析_酒店评论的情感分析

本文通过机器学习方法,采用Python对酒店评论数据进行情感分析。首先介绍情感分析的基本方法,接着详细讲述了数据预处理(包括数据下载、停用词处理、分词等)、特征词向量获取(使用Word2Vec模型)、降维处理(PCA算法)以及模型构建(SVM和逻辑回归)。通过SVM模型得到88%的测试准确率,并用XGBoost进一步调优,提升了模型性能。
摘要由CSDN通过智能技术生成

一、情感分析

情感极性分析,即情感分类,对带有主观情感色彩的文本进行分析、归纳。情感极性分析主要有两种分类方法:基于情感知识的方法和基于机器学习的方法

基于情感知识的方法通过一些已有的情感词典计算文本的情感极性(正向或负向),其方法是统计文本中出现的正、负向情感词数目或情感词的情感值来判断文本情感类别

基于机器学习的方法利用机器学习算法训练已标注情感类别的训练数据集训练分类模型,再通过分类模型预测文本所属情感分类

本文采用机器学习方法实现对酒店评论数据的情感分类,旨在通过实践一步步了解、实现中文情感极性分析

下面详细介绍实战过程:

1)数据下载

a)停用词:

本文使用中科院计算所中文自然语言处理开放平台发布的中文停用词表,包含了1200多个停用词。下载地址:

b)正负向语料库:

文本从

数据集已经被我上传到百度文库:

c)数据解压:

下载上面的数据后,在桌面新建情感分析文件夹,进入情感分析文件夹,新建data文件夹,然后将上面的压缩文件解压到data下面,并将stopWord.txt放于data平行目录

在情感分析文件夹下按住shift+鼠标右键,选择在此处新建dos窗口,然后输入jupyter notebook,新建酒店评论情感分析的脚本文件:

2)数据预处理

a)正负向语料预处理

为了方便之后的操作,需要把正向和负向评论分别规整到对应的一个txt文件中,即正向语料的集合文档(命名为2000_pos.txt)和负向语料的集合文档(命名为2000_neg.txt),这里注意encoding和errors参数的使用,否则会解码错误

这里的2000代表正负预料总共2000条数据

import logging

import os

import sys

import codecs

program = os.path.basename( sys.argv[0] )

logger = logging.getLogger( program )

logging.basicConfig( format='%(asctime)s: %(levelname)s: %(message)s' )

logging.root.setLevel( level=logging.INFO )

def getContent(fullname):

f = codecs.open(fullname, 'r', encoding="gbk", errors="ignore")

lines = []

for eachline in f:

#eachline = eachline.decode('gbk','ignore').strip()

eachline = eachline.strip()

if eachline:#很多空行

lines.append(eachline)

f.close()

#print(fullname, 'OK')

return lines

inp = 'data/ChnSentiCorp_htl_ba_2000'

folders = ['neg', 'pos']

for foldername in folders:

logger.info('running ' + foldername + ' files.')

outp = '2000_' + foldername + '.txt'#输出文件

output = codecs.open( os.path.join('data/ChnSentiCorp_htl_ba_2000', outp), 'w')

i = 0

rootdir = os.path.join(inp, foldername)

for each_txt in os.listdir(rootdir):

contents = getContent( os.path.join(rootdir, each_txt) )

i = i + 1

output.write(''.join(contents) + '\n' )

output.close

logger.info("Saved "+str(i)+" files.")

然后我们来看看合并后的文件(2000_pos.txt和2000_neg.txt)

b)中文文本分词,并去停顿词

采用结巴分词分别对正向语料和负向语料进行分词处理。在进行分词前,需要对文本进行去除数字、字母和特殊符号的处理,使用python自带的string和re模块可以实现

其中string模块用于处理字符串操作,re模块用于正则表达式处理。 具体实现代码如下所示:

import jieba

import os

import codecs

import re

def prepareData(sourceFile, targetFile):

f =codecs.open(sourceFile, 'r', encoding='gbk')

target = codecs.open(targetFile, 'w', encoding='gbk')

print( 'open source file: '+ sourceFile )

print( 'open target file: '+ targetFile )

lineNum = 0

for eachline in f:

lineNum += 1

print('---processing ', sourceFile, lineNum,' article---')

eachline = clearTxt(eachline)

#print( eachline )

seg_line = sent2word(eachline)

#print(seg_line)

target.write(seg_line + '\n')

print('---Well Done!!!---' * 4)

f.close()

target.close()

#文本清洗

def clearTxt(line):

if line != '':

line = line.strip()

#去除文本中的英文和数字

line =

  • 2
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值