项目列表发现几乎重复

List of items find almost duplicates

在 excel 中,我有艺术家、歌曲、版本的列表。 此列表包含超过 15000 条记录。 问题是该列表确实包含一些 "duplicate" 记录。我说 "duplicate" 是因为它们不完全匹配。有些人可能有一些错字,我想解决这个问题并删除那些记录。

例如一些记录:

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

每个破折号表示一个单独的列(因此填写了 A、B、C 3 列)

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

我发现了模糊查找工具。然而我正在研究 mac,因为它在 mac 上不可用,所以我被卡住了。

任何正则表达式魔术或 vba 脚本可以帮助我吗? 也可以查看该行的相似程度(比如 80% 相似)。

在你的循环中尝试这个工作表函数:

=COUNTIF(Range,"*yourtexttofind*")

您可以使用数组公式来指示重复项,并且可以修改下面的内容以显示行号,这会检查条目下方的行是否有任何可能的 80% 重复项,其中 80% 被视为左侧对吧,不总比较。我的数据是a1:a15000

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

这种方式也会查回列表,表示找到的

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

第一个条目即第 1 行是公式的第一部分,最后一行需要 +

之后的最后一部分

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

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

你没有问,但这里有一个数据库会非常好。原因是您可以进行笛卡尔连接(这是为数不多的有效用途之一)并将每条记录与其他记录进行比较。例如:

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

是的,这将是一个非常昂贵的查询,具体取决于记录的数量(在您的示例中为 225,000,000 行),但它会冒泡到最有可能重复/匹配项的顶部。不仅如此,您还可以合并 "reasonable" 联接以消除明显的不匹配,例如将其限制为组匹配、几乎匹配、以相同字母开头等的情况,或者预先过滤掉 Levenschtein大于 x.