我有两个电子表格,每个电子表格都提供有关在我的工作网络上运行的一堆应用程序的信息。他们是由两个独立的人创造的,他们似乎从来没有对应过。
因此,他们给予应用程序的名称在工作表之间不是一致的。然而,它们是相似的。例如,可以将应用程序称为“Office 2010”,将另一个称为“MS Office 10”或其他内容。
我查了Levenshtein算法,但这似乎只适用于单词或单词,其中单词顺序是常数,只有拼写不同。 (我不是计算机科学家;请随意纠正我。)
因此,我正在寻找一种算法,对于一张表中的每个名称,它可以遍历另一张表中的每个名称并找到最接近的匹配。没有必要完美,任何事情都会有所帮助。
有什么想法吗?感谢所有可以提供帮助的人。
答案 0 :(得分:2)
Levenshtein距离是编辑距离的一种通用形式,它计算编辑的数量 - 插入,删除和替换 - 将一个字符串转换为另一个字符串。你是对的,它不能很好地处理换位,但根据你的需要,它仍然可以完成这项工作。
模糊字符串匹配是一个启发式区域,因此最好的办法是四处游戏以尝试满足您的特定目标。例如,您可以尝试通过大小写折叠它来预处理文本,然后在采用编辑距离之前按字典顺序对标记进行排序,这在很多情况下有助于转置。你也可以减去两个字符串之间的绝对长度差异,这样如果一个字符串是另一个字符串的近似子字符串,你就得到一个低距离 - 但要小心,好像你这样做,空字符串将匹配所有字符串。
一般来说,你总会在特异性和灵敏度之间进行权衡,所以诀窍就是调整启发式,使其以你熟悉的方式运行。