自然语言处理(NLP)——LDA模型:对电商购物评论进行情感分析

一、2020数学建模美赛C题简介

从提供的亚马逊电商平台的商品评价数据中识别关键模式、关系、度量和参数。

需求

  1. 以此告知阳光公司在线销售策略
  2. 识别潜在的重要设计功能,以增强产品的满意度
  3. 阳光公司对数据基于时间的模式特别感兴趣

评价内容

  1. 个人评级,星级评价,1~5分
  2. 评论,文本信息
  3. 帮助评分, 其他用户对“评论”的作用的评价

提供数据

tsv格式的数据, 如下图
在这里插入图片描述

二、解题思路

使用LDA模型量化评论,再结合其他数据进行下一步数据挖掘。这里主要讨论LDA。

三、LDA简介

LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。所谓生成模型,就是说,我们认为:

  • 一篇文章以一定概率选择了某个主题
  • 这个主题以一定概率选择了某个词语得到。
  • 文档到主题服从多项式分布,主题到词服从多项式分布。
  • 每一篇文档代表了一些主题所构成的一个概率分布,而每一个主题又代表了很多单词所构成的一个概率分布。

应用

  • LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。

使用了词袋(bag of words)方法

  • 将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。
  • 但是词袋方法没有考虑词与词之间的顺序,这简化了问题的复杂性,同时也为模型的改进提供了契机。

四、代码实现

代码头部全局变量,方便理解后续的代码:

import re
import nltk
import pandas as pd
from nltk.corpus import stopwords
from nltk.stem.wordnet import WordNetLemmatizer
from gensim import corpora, models

TOPIC_NUM = 1  # 主题数

lmtzr = WordNetLemmatizer()

m_files = [r"..\data\microwave.tsv",
           r"..\data\microwave_lda_1rmv_cols.tsv",
           r"..\data\microwave_lda_2dup_revs.tsv",
           r"..\data\microwave_lda_3rmv_invds.tsv",
           r"..\data\microwave_lda_4pos_revs.txt",
           r"..\data\microwave_lda_5neg_revs.txt",
           r"..\data\microwave_lda_6pos_rev_words.txt",  # 文本进行了处理
           r"..\data\microwave_lda_7neg_rev_words.txt",
           r"..\data\microwave_lda_8pos_topic.tsv",
           r"..\data\microwave_lda_9neg_topic.tsv",
           r"..\data\microwave_lda_10pos_topic_words.txt",
           r"..\data\microwave_lda_11neg_topic_words.txt",
           r"..\data\microwave_lda_12rev_words.tsv",
           r"..\data\microwave_lda_13rev_score.tsv"]

#  停用词集合
stop_words = set(stopwords.words('english'))
stop_words = [word for word in stop_words if word not in ['not']]
# print(stop_words)
# 自定义停用词
m_stop_words = ['would', 'br', 'microwave', 'use', 'get', 'old', 'new', 'look', 'work', 'could', 'oven',
                'purchase', 'take', 'make', 'buy', 'go', 'come', 'say', 'not', 'bought', 'even', 'ge',
                'also', 'ca', 'dry']
# 情感分析中重要的词性
m_tags = ['MD', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'RP', 'RB', 'RBR', 'RBS', 'JJ', 'JJR', 'JJS']
# 正则表达式过滤特殊符号用空格符占位,双引号、单引号、句点、逗号
pat_letter = re.compile(r'[^a-zA-Z \']+')
# 还原常见缩写单词
pat_is = re.compile("(it|he|she|that|this|there|here)(\'s)", re.I)
pat_s = re.compile("(?<=[a-zA-Z])\'s")  # 找出字母后面的字母
pat_s2 = re.compile("(?<=s)\'s?")
pat_not = re.compile("(?<=[a-zA-Z])n\'t")  # not的缩写
pat_would = re.compile("(?<=[a-zA-Z])\'d")  # would的缩写
pat_will = re.compile("(?<=[a-zA-Z])\'ll")  # will的缩写
pat_am = re.compile("(?<=[I|i])\'m")  # am的缩写
pat_are = re.compile("(?<=[a-zA-Z])\'re")  # are的缩写
pat_ve = re.<
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值