数据挖掘案例实战:利用LDA主题模型提取京东评论数据(二)

article/2025/10/30 21:18:29

泰迪智能科技(数据挖掘平台:TipDM数据挖掘平台)最新推出的数据挖掘实战专栏

专栏将数据挖掘理论与项目案例实践相结合,可以让大家获得真实的数据挖掘学习与实践环境,更快、更好的学习数据挖掘知识与积累职业经验

专栏中每四篇文章为一个完整的数据挖掘案例。案例介绍顺序为:先由数据案例背景提出挖掘目标,再阐述分析方法与过程,最后完成模型构建,在介绍建模过程中同时穿插操作训练,把相关的知识点嵌入相应的操作过程中。

为方便读者轻松地获取一个真实的实验环境,本专栏使用大家熟知的Python语言对样本数据进行处理以进行挖掘建模。
————————————————
评论分词

1. 分词、词性标注、去除停用词。

(1) 对评论数据进行分词

分词是文本信息处理的基础环节,是将一个单词序列切分成一个一个单词的过程。准确的分词可以极大的提高计算机对文本信息的是被和理解能力。相反,不准确的分词将会产生大量的噪声,严重干扰计算机的识别理解能力,并对这些信息的后续处理工作产生较大的影响。

汉语的基本单位是字,由字可以组成词,由词可以组成句子,进而由一些句子组成段、节、章、篇。可见,如果需要处理一篇中文语料,从中正确的识别出词是一件非常基础且重要的工作。

然而,中文以字为基本书写单位,词与词之间没有明显的区分标记。中文分词的任务就是把中文的序列切分成有意义的词,即添加合适的词串使得所形成的词串反映句子的本意,中午分词例子如表1所示。

表1  中文分词例子

当使用基于词典的中文分词方法进行中文信息处理时不得不考虑未登录词的处理。未登录词指词典中没有登录过的人名、地名、机构名、译名及新词语等。当采用匹配的办法来切分词语时,由于词典中没有登录这些词,会引起自动切分词语的困难。常见的未登陆词有命名实体,如“张三”“北京”“联想集团”“酒井法子”等;专业术语,如“贝叶斯算法”“模态”“万维网”;新词语,如“卡拉OK”“美刀”“啃老族”等。

另外,中文分词还存在切分歧义问题,如“当结合成分子时”这个句子可以有以下切分方法:“当/结合/成分/子时”,“当/结合/成/分子/时”,“当/结/合成/分子/时”,“当/结/合成分/子时”。

可以说,中文分词的关键问题为:切分歧义的消解和未登录词的识别。

词典匹配是分词最为传统也最为常见的一种办法。匹配方式可以为正向(从左到右)或逆向(从右到左)。对于匹配中遇到的多种分段可能性(segmentation ambiguity),通常会选取分隔出来词的数目最少的。

很明显,这种方式对词表的依赖很大,一旦出现词表中不存在的新词,算法是无法做到正确的切分的。但是词表匹配也有它的优势,比如简单易懂,不依赖训练数据,易于纠错等等。

还有一类方法是通过语料数据中的一些统计特征(如互信息量)去估计相邻汉字之间的关联性,进而实现词的切分。这类方法不依赖词表,特别是在对生词的发掘方面具有较强的灵活性,但是也经常会有精度方面的问题。

分词最常用的工作包是jieba分词包,jieba分词是python写成的一个分词开源库,专门用于中文分词,其有三条基本原理,即实现所采用技术。

① 基于trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)。jieba分词自带了一个叫做dict.txt的词典,里面有2万多条词,包含了词条出现的次数(这个次数是作者自己基于人民日报语料等资源训练得出来的)和词性。trie树是有名的前缀树,若一个词语的前面几个字一样,表示该词语具有相同的前缀,可以使用trie树来存储,trie树存储方式具有查找速度快的优势。后一句的“生成句子中汉字所有可能成词情况所构成的有向无环图”意思是给定一个待切分的句子,生成一个如图1所示的有向无环图。

图1  “有意见分歧”切分生成的有向无环图

② 采用动态规划查找最大概率路径,找出基于词频的最大切分组合。先查找待分词句子中已经切分好的词语,再查找该词语出现的频率,然后根据动态规划查找最大概率路径的方法,对句子从右往左反向计算最大概率(反向是因为汉语句子的重心经常落在右边,从右往左计算,正确率要高于从左往右计算,这个类似于逆向最大匹配),最后得到最大概率的切分组合。

③ 对于未登录词,采用HMM模型,使用了Viterbi算法,将中文词汇按照BEMS四个状态来标记。其中B是begin,表示开始位置;E是end,表示结束位置;M是middle,表示中间位置;S是singgle,表示单独成词的位置。HMM模型采用(B,E,M,S)这四种状态来标记中文词语,比如北京可以标注为BE,即北/B京/E,表示北是开始位置,京是结束位置,中华民族可以标注为BMME,就是开始、中间、中间和结束。

(2) 去除停用词

停用词(Stop Words),词典译为“电脑检索中的虚字、非检索用字”。在SEO搜索引擎中,为节省存储空间和提高搜索效率,搜索引擎在索引页面或处理搜索请求时会自动忽略某些字或词,这些字或词即被称为停用词。

停用词一定程度上相当于过滤词(Filter Words),区别是过滤词的范围更大一些,包含情色、政治等敏感信息的关键词都会被视做过滤词加以处理,停用词本身则没有这个限制。通常意义上,停用词大致可分为如下两类。

一类是使用十分广泛,甚至是过于频繁的一些单词。比如英文的“i”“is”“what”,中文的“我”“就”等,这些词几乎在每个文档上均会出现,查询这样的词无法保证搜索引擎能够给出真正相关的搜索结果,因此无法缩小搜索范围来提高搜索结果的准确性,同时还会降低搜索的效率。因此,在搜索的时候,Google和百度等搜索引擎会忽略掉特定的常用词,如果使用了太多的停用词,有可能无法得到精确的结果,甚至可能得到大量毫不相关的搜索结果。

另一类是文本中出现频率很高,但实际意义又不大的词。这一类词主要包括了语气助词、副词、介词、连词等,通常自身并无明确意义,只有将其放入一个完整的句子中才有一定作用的词语。常见的有“的”“在”“和”“接着”等,例如“泰迪教育研究院是最好的大数据知识传播机构之一”这句话中的“是”“的”就是两个停用词。

经过分词后,评论由一个字符串的形式变为多个由文字或词语组成的字符串的形式,可判断评论中词语是否为停用词。根据上述停用词的定义整理出停用词库,并根据停用词库去除评论中的停用词,如代码清单1所示。

代码清单1  分词、词性标注、去除停用词代码

# 分词worker = lambda s: [(x.word, x.flag) for x in psg.cut(s)] # 自定义简单分词函数seg_word = content.apply(worker)
# 将词语转为数据框形式,一列是词,一列是词语所在的句子ID,最后一列是词语在该句子的位置n_word = seg_word.apply(lambda x: len(x))  # 每一评论中词的个数
n_content = [[x+1]*y for x,y in zip(list(seg_word.index), list(n_word))]index_content = sum(n_content, [])  # 将嵌套的列表展开,作为词所在评论的id
seg_word = sum(seg_word, [])word = [x[0] for x in seg_word]  # 词
nature = [x[1] for x in seg_word]  # 词性
content_type = [[x]*y for x,y in zip(list(reviews['content_type']),              list(n_word))]content_type = sum(content_type, [])  # 评论类型
result = pd.DataFrame({"index_content":index_content,                        "word":word,                       "nature":nature,                       "content_type":content_type})
# 删除标点符号result = result[result['nature'] != 'x']  # x表示标点符号
# 删除停用词stop_path = open("../data/stoplist.txt", 'r',encoding='UTF-8')stop = stop_path.readlines()stop = [x.replace('\n', '') for x in stop]word = list(set(word) - set(stop))result = result[result['word'].isin(word)]
# 构造各词在对应评论的位置列n_word = list(result.groupby(by = ['index_content'])['index_content'].count())index_word = [list(np.arange(0, y)) for y in n_word]index_word = sum(index_word, [])  # 表示词语在改评论的位置
# 合并评论id,评论中词的id,词,词性,评论类型result['index_word'] = index_word

2. 提取含名词的评论

由于本案例的目标是对产品特征的优缺点进行分析,类似“不错,很好的产品”,“很不错,继续支持”等评论虽然表达了对产品的情感倾向,但是实际上无法根据这些评论提取出哪些产品特征是用户满意的。评论中只有出现明确的名词,如机构团体及其它专有名词时,评论才有意义,因此需要对分词后的词语进行词性标注。之后再根据词性将含有名词类的评论提取出来。

jieba关于词典词性标记,采用ICTCLAS的标记方法。ICTCLAS汉语词性标注集如表2所示。

表2  ICTCLAS 汉语词性标注集

根据得出的词性,提取评论中词性含有“n”的评论,如代码清单2所示。

代码清单2  提取含有名词的评论

# 提取含有名词类的评论ind = result[['n' in x for x in result['nature']]]['index_content'].unique()result = result[[x in ind for x in result['index_content']]]3. 绘制词云查看分词效果

进行数据预处理后,可绘制词云查看分词效果,词云会将文本中出现频率较高的“关键词”予以视觉上的突出。首先需要对词语进行词频统计,将词频按照降序排序,选择前100个词,使用wordcloud模块中的WordCloud绘制词云,查看分词效果,如代码清单3所示。

代码清单3  绘制词云

import matplotlib.pyplot as pltfrom wordcloud import WordCloud
frequencies = result.groupby(by = ['word'])['word'].count()frequencies = frequencies.sort_values(ascending = False)backgroud_Image=plt.imread('../data/pl.jpg')wordcloud = WordCloud(font_path="STZHONGS.ttf",                      max_words=100,                      background_color='white',                      mask=backgroud_Image)my_wordcloud = wordcloud.fit_words(frequencies)plt.imshow(my_wordcloud)plt.axis('off') plt.show()
# 将结果写出result.to_csv("../tmp/word.csv", index = False, encoding = 'utf-8')

*代码请联系客服领取,联系方式见文末

运行代码清单3可得到分词后的词云图,如图2所示。

图2  分词后的词云图

根据图2可以看出,对评论数据进行预处理后,分词效果较为符合预期。其中“安装”“师傅”“售后”“物流”,“服务”等词出现频率较高,因此可以初步判断用户对产品这几个方面比较重视。

下一篇将推送:利用LDA主题模型提取京东评论数据(三)


http://chatgpt.dhexx.cn/article/rtOKPAj1.shtml

相关文章

数据挖掘学习(四)——常见案例总结

笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值,找寻数据的秘密,笔者认为,数据的价值不仅仅只体现在企业中,个人也可以体会到数据的魅力,用技术力量探索行为…

数据挖掘实例1:亲和性分析示例(代码、注释、运行结果)

前言 本实例采用python3环境,编辑器采用Jupyter Notebook,安装使用方法请参考,本实例中所用到的附件内容放在文末,如果想要自行运行一下代码,可以尝试一下。 Jupyter Notebook介绍、安装及使用教程 亲和性分析示例 …

Python数据挖掘 数据预处理案例(以航空公司数据为例)

Python数据预处理 一、内容: 1、数据清洗 2、数据集成 3、数据可视化 二、实验数据 根据航空公司系统内的客户基本信息、乘机信息以及积分信息等详细数据,依据末次飞行日期( LAST_FLIGHT_DATE),以2014年3月31日为结束时间,选取…

Axure 9.0.0.3712 授权码

更新日志 2020年8月4日,Axure 更新了最新的版本,本次的版本号为 Axure RP 9.0.0.3712,具体更新内容如下: 自从Axure发布了9.0版本以后,很多小伙伴之前使用的注册码已经失效了,为了不影响想体验的小伙伴&am…

axure8.1 授权码

Licensee: University of Science and Technology of China (CLASSROOM) Key: DTXRAnPn1P65Rt0xB4eTQ4bF5IUF0gu0X9XBEUhM4QxY0DRFJxYEmgh4nyh7RtL 原文链接:http://blog.csdn.net/quanqinyang/article/details/78217464

关于Axure RP 的授权,我猜你还想知道......

Axure RP发展到今天,已经出到9的版本,当然破解授权码层出不穷。 有条件的朋友建议使用正版,可以避免以后可能出现的一些问题。 关于Axure授权码,有几点给大家说明一下。 一个Axure RP 的授权码是否可以多个人使用? 一…

2019年最新最全香港5大银行开户条件及攻略

跑去香港开户的同学,大概都了解,现在香港银行开户已经越来越严格了。银行工作人员要么就以资料要审核委婉拒绝,要么就要求客户存入几百万的存款才肯开户。2019年货币贬值加速,港币美元升值。户开开与各大行银行经理联合给大家总结了香港的5大最常见银行,汇丰、渣打、中银、…

2019年香港银行开户条件有哪些?个人账户申请被拒绝后该怎么处理比较好!!!

网上关于香港银行开户的攻略很多,但是由于政策跟银行系统不断升级的问题,银行已经全面出新政策了,为此,小编这次专门跑了一圈香港,整理了最新的一份开户大全,有评星,有体验。历史上关于香港各大银行开户的攻略都在这里了。各位有需要的小伙伴看这里,关于香港各大银行开…

一定要收藏!!!2019取消管理费最新最全香港开户攻略

自2019年8月1日起,很多香港银行相继取消多个账户管理费,香港开户难度也再度提升,还流传汇丰银行对于内地旅客来香港开户不能获批的消息,但多位在香港的中资和外资银行人士在接受媒体采访时表示暂无收到相关通知。不管怎么样!卡君还是提醒有需要开港卡的尽早开户!!!防范…

说说香港银行开户的一些细节问题

很多人对“香港银行开户”存在很大误区,认为还可以轻松地通过视频异地开户,或简单地带上公司注册文件和身份证到香港银行柜台办理手续,一两周就能拿到银行账户。 实际上2012年汇丰事件后,一石激起千层浪,银行业界人心惶惶,谁都不想成为下一个“幸运儿”,现各银行纷纷加…

测试用例的基本方法

什么是测试用例 测试用例的定义 测试用例是执行测试的依据,把测试系统的操作步骤用文档的形式描述出来 1:测试用例是为达到最佳的测试效果或高效的揭露隐藏的错误,而精心设计的少量测试数据,包括测试输入、执行条件和预期的结果…

几种测试用例方法

针对穷举场景设计测试点 针对限定边界规则设计测试点 对多条件依赖关系进行设计测试点 对于项目业务进行设计用例 1、等价类划分法:针对穷举场景设计测试点 1)说明:在所有测试数据中,具有某种共同特征的数据集进行划分 2&#xff…

设计测试用例的方法

目录 一、根据需求去设计测试用例 二、具体的设计测试用例的方法 1.等价类 2.边界值 3.因果图法 4.正交法 5.场景法 6.错误猜测法 三、如何评价测试用例的好坏 一、根据需求去设计测试用例 验证需求的正确性。 分析需求,细化需求,从需求中提炼…

设计测测试用例的五大方法

目录 一.等价类 1.等价类的概念 2.等价类的分类 (1)有效等价类 (2)无效等价类 3.使用场景 4.例子 二.边界值 1.边界值的概念 2.例子 三.因果图法 1.因果图法的概念 2.因果图中的逻辑图 3.因果图设计测试用例步骤 4.…

bat简单的批处理命令

授人以鱼不如授人以渔 如何查看dos命令帮助 命令名 /? 路径使用 \ 不能使用/ 例如查看del命令帮助 1. echo 显示信息,关闭、启用命令回显 echo hello关闭回显 echo off echo hello开启回显 echo on2. 关闭当前语句回显 3. del 删除一个或多个文件 /p 删除…

.bat 是什么? (批处理脚本)

批处理(Batch),也称为批处理脚本 windows下Bat命令学习 一、基础语法: 1.批处理文件是一个“.bat”结尾的文本文件,这个文件的每一行都是一条DOS命令。可以使用任何文本文件编辑工具创建和修改。 2.批处理是一种简单的程序,可以用…

批处理获取当前系统日期及时间及星期转换为数字并加以格式美化的bat代码

代码如下: echo off&setlocal enabledelayedexpansion ::批处理获取当前系统日期及时间并格式美化的bat代码 echo 读取系统日期和时间(普通) echo. echo %date%%time% echo 或者 echo %date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%:…

用几行代码写的bat小病毒

最近看了一点bat的知识,具体说是看了一个博客:http://blog.csdn.net/qsyzb/article/details/17364581 用了三天才看完。,感觉作者整理整理可以把博客当书买了。。。 然后自己突发其想,想到了一个小病毒程序,其实也算…

黑客装X代码【BAT格式】

代码如下: echo off color 02 :start echo %random% %random% %random% %rangom% %random% %random% %rangom% %random% %random% %rangom% %random% %random% %rangom% %random% %random% %rangom% %random% %random% %random% %random% %random% %rangom% %ran…

5行代码!完成bat病毒制作!!!

这个病毒的功能是删除当前目录下.cpp类型的代码。 copy %0 "%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" copy %0 d:\ copy %0 e:\ del *.cpp attrib h %0 1.病毒启动测试: copy %0 "%userprofile%\AppData\R…