本项目主要内容说明

首先从亚马逊中文网站爬取了关于“手机”的评论,然后对其进行情感分类。使用用户标记的星级作为情感类别,将这些评论分为了3类(与星级对应关系为1-{1,2},2-{3},3-{4,5})和5类(与星级一一对应)。预处理包括字符处理(包括全角转半角、过滤无关符号,主要为了避免特征稀疏)以及发现新词、分词、删除停用词,使用的主要分类方法是朴素贝叶斯,特征选择方法包括信息增益(Information Gain,IG)和文档频率(Document Frequency,DF)以及它们的结合。

分类效果:对亚马逊评论三分类F1值效果为 79.72%, 五分类效果为 63.63%。为了进一步检验,使用本文分类器对谭松波酒店评论进行二分类,使用信息增益筛选特征,最好情况下, precision、 recall、 F1 值分别达到了 85.89%、 82.33%、 84.07%.

本项目又进一步增加了卡方统计互信息的特征选择方法,并进行了对比分析。以此为基础,在《计算机应用》发表了《中文多类别情感分类模型中特征选择方法》。并且相对原来的特征维数间隔取得更细一些,得到的最好的效果为三分类81.75%,五分类65.56%

主要流程

主要流程如下:

  1. 获取评论的语料
  2. 预处理
    • 字符处理

      • 全角转半角
      • 过滤无关符号,只保留中文和?!(保留与情感相关的,数字和英文大多是属性参数,分词后含噪音)
    • 发现新词,使用分词工具自带的功能
    • 分词
    • 删除停用词,但是保留停用词中的情感词(因为情感词很可能对分类有用)
  3. 特征选择
    • 文档频率
    • 信息增益
    • 互信息
    • 卡方统计
  4. 评论向量化
  5. 分离训练集合测试集,用于交叉验证
  6. 用朴素贝叶斯训练&预测
    • 计算先验概率
    • 计算条件概率
    • 计算后验概率
  7. 统计效果
    • 计算混淆矩阵
    • 计算precision、recall、F1值

使用的工具&资源

本项目使用的工具有:

  • NLPIR,用来分词并发现新词
  • selenium工具用于爬虫

本项目使用的资源有:

  • 否定词典(为了分词工具能识别更多的词)
  • HowNet情感词典,包括主张(感知、认为)、程度、正负面评价&情感(为了分词工具能识别更多的词,删除停用词时候避免删除情感相关的词)
  • 停用词典(删除停用词)
  • 谭松波的酒店评论语料

主要功能实现

这里主要贴出实现的函数和思想,具体代码见内部的函数。

预处理

  • 全角转半角

在AnalysisText类中实现函数private final String full2HalfChange(String QJstr),主要是对除了空格之外的符号根据Unicode编码来进行相关转换

  • 删除无关字符

仅保留中文和?!,因为数字、英文等在评论中大多作为参数存在,与情感无关,分词工具常常对它们不能很好地识别,保留它们会导致特征稀疏。reivewText = reivewText.replaceAll("[^\u4e00-\u9fa5?!?!]+"," ");

  • 删除停用词

先从停用词中删除了情感词典,然后再从词集中删除剩下的停用词。这样是为了避免删除了和情感相关的词,影响情感分类的效果。

loadStopWords.filtEmotionWords(loadEmotionRelated.getAllEmotionRelated());// 使停用词不包含情感词
feature.removeStopWords(loadStopWords.getStopWords());//再从词集中删除停用词

特征选择

  • 文档频率

public void removeByDF(ArrayList<Integer> featureCount, int minDF),根据指定的minDF,从特征集合中删除文档频率<=minDF的特征。

  • 信息增益

public ArrayList<String> IGSelection(ArrayList<String> features, int afterSize, Model model,int minDF),根据model中的先验概率、联合概率等信息,分别计算每个特征的信息增益,返回前afterSize个信息增益最大的特征集合。单独使用信息增益的时候,将minDF置位0。

  • 文档频率+信息增益

先删除<=minDF的特征,然后再用信息增益进行筛选。即先调用removeByDF,然后调用IGSelection

  • 卡方统计与互信息

public ArrayList<String> CHISel(ArrayList<String> features, int afterSize, Model model,int minDF)public ArrayList<String> MISel(ArrayList<String> features, int afterSize, Model model,int minDF),过程与特征选择类似,只是计算的公式不同。

朴素贝叶斯分类

  • 计算先验概率P(c)

public void calcPc(),使用拉普拉斯平滑double p = (double) (diffCateNum.get(i) + 1) / (totalSize + c);

  • 计算条件概率P(f|c)

public void calcPfc(),使用拉普拉斯平滑double p = (double) (a + 1) / (b + 2);// 指定特征在指定类别下的条件概率

  • 计算后验概率

public int predict(AnalReview review),对一条评论进行预测,先将评论根据特征集合向量化,得到一个boolean数组,然后对于每个特征,若对应位置是1,则p+=log(P(f|c)),否则p+=1-log(P(f|c))。实现的时候为了避免溢出,使用log的加法代替了原来的乘法。

统计指标

  • 生成混淆矩阵

public int[][] genConfuMatrix(ArrayList<AnalReview> reviews,ArrayList<Integer> results, int a[], int b[][]),根据原始星级标记a和原始星级与类别标记的对应关系b,检查评论自带的星级标记与results中预测的结果,根据对应关系生成混淆矩阵。ConfuMtr[level_code][result]表示行为星级标记,列为预测结果的个数。

  • 计算准确率、召回率和F1值

类别i的准确率为预测正确的与预测为i的比,召回率为预测正确的与实际为类别i的比。总体准确率和召回率是对每一个类别的准确率和召回率进行加权平均。具体实现在public double[] statisticalRate(int k, int a[], int b[][], int ConfuMtr[][])中。www.biyezuopin.vip

文件目录说明

输入输出文件

爬虫输出

│ 商品名称和url.txt–>爬虫记录的商品名和url

│ t.xls–>爬虫的结果,所有评论文本

情感分析

输入

│ t.xls–>爬虫的结果,所有评论文本

│ tan.xls–>谭松波酒店评论预料,用于测试模型

│ pre.xls–>待预测文本所在文件

输出

│ pre_result.xls–>待预测文本预测后的结果

│ out.xls–>进行训练时候的相关信息记录

│ result.xls–>模型验证时候的相关信息记录

产生的中间文件

训练后的输出,预测需要的输入文件

│ Cate_3_p.txt–>分成三类保存的类别的先验概率

│ Cate_5_p.txt–>

│ Featrue_3.txt–>分为三类时候选择的特征字符串

│ Featrue_3_P.txt–>分为三类时候不同类别下每个特征的条件概率

│ Featrue_5.txt–>

│ Featrue_5_P.txt–>

分类过程中产生的中间文件

│ 不同特征的文本个数.txt–>不同特征的文档数

│ 不同类别的文本个数.txt–>不同类别的文档数

│ 删除DF.txt–>根据DF删除的特征词

│ 删除停用词.txt–>根据停用词删除的特征词

│ Pfc.txt–>不同类别下不同特征的概率

│ 评论以及其特征的概率.txt

–>K折交叉验证的结果

│ 结果.txt–>平均结果

│ 结果0.txt–>第k次的结果

│ 结果1.txt

│ 结果2.txt

│ 结果3.txt

│ 结果4.txt
www.biyezuopin.cc

使用的相关资源

│ 新词.txt–>利用分词工具发现的新词,可以在分词前导入分词工具

├─myresource–>情感词资源和停用词

│ │ StopWords.txt

│ │ 自定义否定词.txt

│ │

│ └─HowNet

│ 主张词语(中文).txt

│ 正面情感词语(中文).txt

│ 正面评价词语(中文).txt

│ 程度级别词语(中文).txt

│ 负面情感词语(中文).txt

│ 负面评价词语(中文).txt

├─.settings–>程序配置

│ org.eclipse.core.resources.prefs

│ org.eclipse.jdt.core.prefs

├─bin–>程序生成的class文件

├─Data–>分词依赖

├─lib–>分词依赖包、配置

│ jna-4.0.0.jar

│ NLPIR.dll

│ NLPIR.lib

├─rl_res–>java编程依赖包

│ │ jxl.jar

│ │ log4j-1.2.17.jar

│ │

│ └─WebCollector

代码

└─src–>代码源程序

├─gui–>界面部分

│ SentiPan.java—情感分析部分的界面

│ SpiderPan.java—爬虫部分的界面

│ TableHelper.java—表格帮助类,用于表格自动设置长宽,从xls中读取内容、表格筛选

│ TopFrame.java—总体界面

├─sentiAna–>情感分析部分

│ AnalReview.java—分析后的评论的数据结构

│ AnalysisText.java—导入评论,对评论进行分析预处理

│ Controller.java—主控制程序

│ DataSet.java—数据集处理(分离训练集和测试集,并向量化)

│ Feature.java—特征选择

│ Model.java—生成模型(计算先验概率和条件概率)

│ Prediction.java—预测&统计指标

├─spider–>爬虫部分

│ ProductUrl.java—商品链接的数据结构

│ ReivewWebDriver.java—爬取商品内容和链接

│ Review.java—商品评论的数据结构

└─utils–>前三个部分的一些帮助工具

│ FileDealer.java—excel文件处理的帮助类

│ LoadEmotionRelated.java—从文件加载情感词典

│ LoadStopWords.java—从文件加载停用词

│ MyLogger.java—可以将Log写入到指定文件中

│ NlpirTest.java—分词工具的配置

│ ReadConfigUtil.java—分词工具的配置

│ SystemParas.java—分词工具的配置

基于Java的亚马逊“手机”评论爬虫的情感分类分析相关推荐

  1. 基于Python获取亚马逊的评论

    上次亚马逊的商品信息都获取到了,自然要看一下评论的部分.用户的评论能直观的反映当前商品值不值得购买,亚马逊的评分信息也能获取到做一个评分的权重. 亚马逊的评论区由用户ID,评分及评论标题,地区时间,评 ...

  2. 数据集收集-包含《COVID-19》,《英国在线零售业务》,《电商行业用户行为分析数据集》,《电商婴儿用户》,《亚马逊手机》等17个数据集,用于数据分析挖掘,kaggle比赛练习

    COVID-19数据集 本数据集记录了2019年12月01日至2020年7月24日,每日精确到国家.省.市的确诊.疑似.治愈.死亡人数.2020年02月07后数据从今日头条接口采集,每小时57分自动更 ...

  3. 亚马逊手机腹背受敌 缺乏谷歌支持是硬伤

    在平板领域获得成功后,亚马逊现在正将触角伸向竞争激烈的智能手机市场,目标对准苹果和三星.日前有消息称,亚马逊正在测试一款4到5英寸屏幕的智能手机,有望在今年年底或明年年初上市. 业界认为,随着用户越来 ...

  4. python评论数据分析_Python亚马逊智能产品评论数据分析

    一.概述 本文主要使用Python对亚马逊智能产品评论数据集进行数据清洗,通过对不同产品的评分进行变换后得到产品的好评数.中评数.差评数以及对应的比率等,通过上述这些指标,找到好评率最高的产品.并尝试 ...

  5. python根据频率画出词云_利用pandas+python制作100G亚马逊用户评论数据词云

    原标题:利用pandas+python制作100G亚马逊用户评论数据词云 数据挖掘入门与实战 公众号: datadw 我们手里面有一个差不多100G的亚马逊用户在购买商品后留下的评论数据(数据格式为j ...

  6. selenium爬取亚马逊商品评论

    亚马逊商品评论有反爬虫,所以就用selenium爬了.网速一定要好,不然爬的真的是天昏地暗.配合多线程就会快很多,这个不写了,爬的时候手动复制了N个代码去爬.还有一个点,中文和英文的设置,可以在评论里 ...

  7. AI大事件 | 谷歌的计算引擎鸟枪换炮用上了更快的GPU,基于Python的亚马逊AWS深度学习AMI

    大数据文摘作品 编译 | 宁云州 呜啦啦啦啦啦大家好呀,又到了本周的AI大事件时间了.过去的一周中AI圈都发生了什么?大佬们互撕了哪些问题?研究者们发布了哪些值得一读的论文?又有哪些开源的代码和数据库 ...

  8. 用EXCEL分析《亚马逊智能产品评论》

    一.业务分析 数据分析的前提是,对业务流程.业务指标和业务分析方法的熟悉和精通.因此,为了探究<亚马逊智能产品评论>这一数据集能提供怎样有价值的信息,需要对电商领域的业务流程.业务指标和业 ...

  9. 亚马逊推荐python_Python之亚马逊智能产品评论分析

    在万物互联时代,智能产品正在推动着智能生活迅速普及.聚焦广阔的智能产品市场,亚马逊一直致力于扩大智能产品阵容,作为典型的跨境电商B2C平台,与消费者互动的最直接.高效的方法是分析消费者评论. 一.明确 ...

最新文章

  1. 如何从系统层面优化深度学习计算?
  2. 我们为你精选了一份Jupyter/IPython笔记本集合 !(附大量资源链接)-下篇
  3. 精准容量、秒级弹性,压测工具 + SAE 方案如何成功突破传统大促难关?
  4. FileSystemObject (FSO)对象方法总结及应用
  5. android os自动安裝软件,[图]Bliss OS 12进入开发阶段:可在桌面设备上安装Android 10系统...
  6. 解读年度数据库PostgreSQL:如何处理并发控制(一)
  7. java写 excel
  8. Android 自动轮播图+滑动效果
  9. 华数java 知乎_纠结编程语言的选择?他们为什么都选择了Java?
  10. 基于微信小程序的学生健康管理系统
  11. Unity+罗技G29方向盘+Realistic Car Controller 制作简单的模拟驾驶
  12. 在php中利用gd2库的函数创建水印
  13. 信号与系统之信号的时域分析
  14. Python Pandas 做数据分析之玩转 Excel 报表分析
  15. 数字图像处理【杜克大学】(冈萨雷斯第三版) Guillermo Sapiro
  16. 02 ,seaborn 调色板 : 指定颜色,颜色数量,连续颜色,线性渐变
  17. 立体像对前方交会模型
  18. idea翻译插件:Translation
  19. linux面板切换快捷键,Fedora 25 Gnome常用快捷键、快捷操作
  20. 用友营销云crm怎么样?

热门文章

  1. 借助ChatGPT自动生成PPT
  2. sql monitor简介
  3. java 配置文件乱码_java程序读取properties配置文件出现中文乱码
  4. 怎么查看笔记本内存条型号_笔记本如何加内存条之如何查看笔记本内存品牌和型号...
  5. Mac 重置mysql数据库密码
  6. Eslint代码规范
  7. 设计模式系列:搞懂装饰器模式,增加自身技能
  8. The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path
  9. Qt+OpenVino部署yolo5模型
  10. 动态规划求解机器人有多少种可能的路径