项目列表find几乎重复

在Excel中,我有一个艺术家,歌曲,版本列表。 该列表包含超过15000条logging。 问题是列表包含一些“重复”的logging。 我说“重复”,因为它们不完全匹配。 有些人可能有一些错字,我想解决这个问题,并删除这些logging。

所以例如一些logging:

ABBA - Mamma Mia - Party ABBA - Mama Mia! - Official 

每个破折号表示一个单独的列(所以3列A,B,C被填入)

我如何将它们标记为Excel中的重复项?

我已经find关于工具模糊查找。 然而,我在Mac上工作,因为它不是在Mac上可用我卡住了。

任何正则expression式魔术或vba脚本什么可以帮助我? 看看这个行有多相似也是可以的(比如80%的相似)。

Levenshtein(距离)algorithm是模糊文本匹配的常用方法之一。 这里有几个很好的实现:

https://stackoverflow.com/a/4243652/1278553

从那里,您可以直接在电子表格中使用该函数来查找实例之间的相似性:

在这里输入图像说明

你没有问,但是一个数据库在这里真的很好。 原因是你可以做一个笛卡尔连接(这是less数有效的用途之一),并比较每一个logging对每一个logging。 例如:

 select s1.group, s2.group, s1.song, s2.song, levenshtein (s1.group, s2.group) as group_match, levenshtein (s1.song, s2.song) as song_match from songs s1 cross join songs s2 order by group_match, song_match 

是的,这将是一个非常昂贵的查询,取决于logging的数量(在你的例子225,000,000行),但它会泡到顶部最可能的重复/匹配。 不仅如此,还可以包含“合理的”连接以消除明显的不匹配,例如将其限制为小组匹配,几乎匹配,以相同字母开头等等,或者预先筛选Levenschtein更大的组比x。

你可以使用一个数组公式来表示重复项,并且你可以修改下面的内容来显示行号,这将检查条目下的行是否有可能的80%重复,其中80%是从左到右,而不是总数比较。 我的数据是a1:a15000

=IF(NOT(ISERROR(FIND(MID($A1,1,INT(LEN($A1)*0.8)),$A2:$A$15000))),1,0)

这种方式也将回顾清单,以表明find的

=SUM(IF(ISERROR(FIND(MID($A2,1,INT(LEN($A1)*0.8)),$A3:$A$15000,1)),0,1))+SUM(IF(ISERROR(FIND(MID($A2,1,INT(LEN($A2)*0.8)),$A$1:$A1,1)),0,1))

第一行即第一行是公式的第一部分,最后一行将需要+之后的最后一部分

在你的循环中试试这个工作表的function:

 =COUNTIF(Range,"*yourtexttofind*")