Excel如何对短文本进行模糊去重(按相似度去重)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Excel如何对短文本进行模糊去重(按相似度去重)?相关的知识,希望对你有一定的参考价值。

在做一项舆情分析工作,从一个免费不太成熟系统导出批量网络媒体文章。标题列经常有比如:“标题1:XX省居然出现如此失信情况!标题2:震惊!XX省居然出现如此失信情况!标题3:XX省,居然出现如此失信情况!震惊!”。自带去重功能不能识别重复文章,求一个可以根据匹配程度去重的公式,或通过如何操作可以高效去重,谢谢!

参考技术A Excel中的精确查找功能十分简单,比如说,我们需要查找“办公族”,就会直接在查找内容中输入“办公族”。那如果要查包含“办公”这2个字的词该怎么办呢,这就必须用Excel中的通配符进行模糊查找。Excel中的通配符为(?)和(*)。其中问号代表单个字符,而星号则可以代表一个和多个字符。

具体做法

1、我们现在需要找“办公”后加一个任意字符的数据,打开一篇Excel工作表,切换到“开始”选项卡,单击“编辑”组中“查找和选择”组下的“查找”命令。

2、此时会弹出一个“查找和替换”对话框,并且自动切换到了“查找”选项卡,我们在“查找内容”文本框中输入“办公?”或者“办公*”,然后单击“查找全部”按钮。

3、大家现在可以查看查找的结果了,如下图所示。

提示:因为英文的问号(?)和星号(*)现在已经成了通配符,当我们需要查找这两个符号的时候只需要在相应的符号前加上波浪号(~)即可。

Excel中的模糊查找还是很有用处的,用法也比较简单,只需记住通配符的作用就行了,你学会了吗?
参考技术B 可以用代码进行分析。
比如找到最长的一行,然后按1、2、3、4个连续的字作为分析的依据并给予权重,分析其他行得到的权重值百分比超过一定的值就去重或者在一行的不同列罗列 。

文本去重算法——simhash简介

一、基本概念

simhash是为了计算一篇文档之间的相似度存在的,通过simhash算法可以计算出文档的simhash值,通过各个文档计算出的二进制值来计算文档之间的汉明距离,然后根据汉明距离来比较文档之间的相似度。汉明距离是指两个相同长度的字符串相同位置上不同的字符的个数。 
 
simhash算法分为5个步骤:分词、hash、加权、合并、降维,具体过程如下所述: 
 

二、步骤

1、分词 
        给定一段语句,进行分词,得到有效的特征向量,然后为每一个特征向量设置1-5等5个级别的权重(如果是给定一个文本,那么特征向量可以是文本中 的词,其权重可以是这个词出现的次数)。例如给定一段语句:“腾讯上海分公司三楼食堂的快餐”,分词后为:“腾讯 上海分公司 三楼 食堂 的 快餐”,然后为每个特征向量赋予权值:腾讯(4) 上海分公司(5) 三楼(3) 食堂(2) 的(1) 快餐(5),其中括号里的数字代表这个单词在整条语句中的重要程度,数字越大代表越重要。 
2、hash 
      通过hash函数计算各个特征向量的hash值,hash值为二进制数01组成的n-bit签名。比如“腾讯”的hash值Hash(腾讯)为100101,“上海分公司”的hash值Hash(上海分公司)为“101011”。就这样,字符串就变成了一系列数字。 
3、加权 
     在hash值的基础上,给所有特征向量进行加权,即W = Hash * weight,且遇到1则hash值和权值正相乘,遇到0则hash值和权值负相乘。例如给“腾讯”的hash值“100101”加权得 到:W(腾讯) = 100101*4 = 4 -4 -4 4 -4 4,给“上海分公司”的hash值“101011”加权得到:W(上海分公司)=101011*5 = 5 -5 5 -5 5 5,其余特征向量类似此般操作。 
4、合并 
       将上述各个特征向量的加权结果累加,变成只有一个序列串。拿前两个特征向量举例,例如“腾讯”的“4 -4 -4 4 -4 4”和“上海分公司”的“5 -5 5 -5 5 5”进行累加,得到“4+5 -4+-5 -4+5 4+-5 -4+5 4+5”,得到“9 -9 1 -1 1”。 
5、降维 
       对于n-bit签名的累加结果,如果大于0则置1,否则置0,从而得到该语句的simhash值,最后我们便可以根据不同语句simhash的汉 明距离来判断它们的相似度。例如把上面计算出来的“9 -9 1 -1 1 9”降维(某位大于0记为1,小于0记为0),得到的01串为:“1 0 1 0 1 1”,从而形成它们的simhash签名。

三、举例

现在有两串文本,文本1:“你妈妈  你回家吃饭  ,回家罗回家罗”;文本2:“你妈妈  你回家吃饭  ,回家罗回家罗”。显然这两句话有很高的相似度,我们来看看经过simhash算法后,两者的simhash签名。 
 
1、求文本1的simhash签名。 
a、分词:你(3)妈妈(3)喊(2)你(3)回家(4)吃饭(4)哦(2),回家罗(3)回家罗(3)。 
b、hash:你(001000)妈妈(010100)喊(001000)你(001000)回家(100001)吃饭(101001)哦(101000)回家罗(100110)回家罗(100110)。 
c、加权:你(-3 -3 3 -3 -3 -3)妈妈(-3 3 -3 3 -3 -3)喊(-2 -2 2 -2 -2 -2)你(-3 -3 3 -3 -3 -3)回家(4 -4 -4 -4 -4 4)吃饭(4 -4 4 -4 -4 4)哦(2 -2 2 -2 -2 -2)回家罗(3 -3 -3 3 3 -3)回家罗(3 -3 -3 3 3 -3)。 
d、合并:5 -21 1 -9 -15 -11 
e、降纬:1 0 1 0 0 0 
 
2、求文本2的simhash签名。 
a、分词:你(3)妈妈(3)叫(2)你(3)回家(4)吃饭(4)啦(2),回家罗(3)回家罗(3)。 
b、hash:你(001000)妈妈(010100)叫(000011)你(001000)回家(100001)吃饭(101001)啦(100010)回家罗(100110)回家罗(100110)。 
c、加权:你(-3 -3 3 -3 -3 -3)妈妈(-3 3 -3 3 -3 -3)叫(-2 -2 -2 -2 2 2)你(-3 -3 3 -3 -3 -3)回家(4 -4 -4 -4 -4 4)吃饭(4 -4 4 -4 -4 4)啦(2 -2 -2 -2 2 -2)回家罗(3 -3 -3 3 3 -3)回家罗(3 -3 -3 3 3 -3)。 
d、合并:5 -21 -7 -9 -7 -7 
e、降纬:1 0 0 0 0 0 
 
3、计算汉明距离 
上述得到的simhash签名分别为:“101000”和“100000” 
计算汉明距离为1。

以上是关于Excel如何对短文本进行模糊去重(按相似度去重)?的主要内容,如果未能解决你的问题,请参考以下文章

利用Linux命令行进行文本按行去重并按重复次数排序

HBase实战 | 基于HBase构建千亿级文本数据相似度计算与快速去重系统

excel怎么去重

文本去重SimHash算法

海量数据相似度计算之simhash和海明距离

文本去重算法——simhash简介