1.文本去重
(1)文本去重的基本解释及原因
文本去重,顾名思义,就是去除文本评论数据中重复的部分。无论获取到什么样的文本评论数据,首先要进行的预处理都应当是文本去重。文本去重的主要原因如下。
1)一些电商平台为了避免一些客户长时间不进行评论,往往会设置一道程序,如果用户超过规定的时间仍然没有做出评论,系统会自动替客户做出评论,当然这种评论的结果大多都会是好评(比如国美)。但是,这类数据显然没有任何分析价值,而且这种评论是大量重复出现的,必须去除。
2)同一个人可能会出现重复的评论,因为同一个人可能会购买多种热水器,然后在进行评论的过程中可能为了省事,就在多个热水器中采用同样或相近的评论,这里当然不乏有价值的评论,但是即使有价值也只有第一条有作用。
3)由语言的特点可知,在大多数情况下,不同人之间的有价值的评论不会出现完全重复,如果出现了不同人评论之间的完全重复,这些评论一般都是毫无意义的,诸如“好好好好好”“XX牌热水器 XX升”等或者是直接复制、粘贴上一人的评论,这种评论显然就只有最早评论出的才有意义(即只有第一条有作用)。
(2)常见文本去重算法概述及缺陷
前人的研究成果中,有许多的文本去重算法,大多都是先通过计算文本之间的相似度,再以此为基础进行去重,包括编辑距离去重、Simhash算法去重等,大多都存在一些缺陷。以编辑距离算法去重为例,编辑距离算法去重实际上就是先计算两条语料的编辑距离,然后进行阈值判断,如果编辑距离小于某个阈值则进行去除重复处理,这种方法针对类如:“XX牌热水器 XX升 大品牌高质量”以及“XX牌热水器 XX升 大品牌 高质量 用起来真的不错”的接近重复而又无任何意义的评论文本,去除的效果是很好的,主要为了去除接近重复或完全重复的评论数据,而并不要求完全重复,但是当这种方法测到都有意义,但是有相近的表达的时候就可能也会采取删除操作,这样就会造成错删,例如下面的例子,“还没正式使用,不知道怎样,但安装的材料费确实有点高,380”以及“还没使用,不知道质量如何,但安装的材料费确实贵,380”。这组语句的编辑距离只是比上一组大2而已,但是很明显这两句都是有意义的,如果阈值设为10(该组为9),就会带来错删问题。可惜的是,这一类的评论数据组还是不少的,特别是差评的语料,许多顾客不会用太多的言语表达,直至中心,这时问题就来了。
(3)文本去重选用的方法及原因
既然这一类相对复杂的文本去重的算法容易去除有用的数据,那么就需要考虑一些相对简单的文本去重思路。由于相近的语料存在不少是有用的评论,去除这类语料显然不合适,那么为了存留更多的有用语料,就只能对完全重复的语料下手。处理完全重复的语料直接采用最简单的比较删除法就好了,也就是两两对比,完全相同就去除的方法。
从上述的总结我们可以知道,存在文本重复问题的条目归结到底只有1条语料甚至0条语料是有用的,但是透过观察评论知道存在重复但是起码有1条评论有用的语料,而运用比较删除法显然只能定为留1条或者是全去除,因此只能设为留1条,以确保尽可能存留有用的文本评论信息。
观察比较删除法实现后的结果,总体效果还是很不错的。其代码如代码清单15-2所示。
代码清单15-2 原始数据去重
#-*- coding: utf-8 -*- import pandas as pd inputfile = '../data/meidi_jd.txt' #评论文件 outputfile = '../data/meidi_jd_process_1.txt' #评论处理后保存路径 data = pd.read_csv(inputfile, encoding = 'utf-8', header = None) l1 = len(data) data = pd.DataFrame(data[0].unique()) l2 = len(data) data.to_csv(outputfile, index = False, header = False, encoding = 'utf-8') print(u'删除了%s条评论。' %(l1 - l2))
代码详见:demo/code/clean_same.py
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论