项目列表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*")