【问题标题】:Fuzzy Matching Numbers模糊匹配数
【发布时间】:2011-12-28 15:31:45
【问题描述】:

我一直在使用 Double Metaphone 和 Caverphone2 进行字符串比较,它们在姓名、地址等方面效果很好(Caverphone2 最适合我)。但是,当您获取数字值(例如电话号码、IP 地址、信用卡号码等)时,它们会产生太多误报。

所以我查看了LuhnVerhoeff 算法,它们基本上描述了我想要的,但并不完全。它们似乎擅长验证,但似乎不是为模糊匹配而构建的。有没有像 Luhn 和 Verhoeff 那样的行为,可以检测到涉及两个相邻数字的个位错误和换位错误,用于类似于模糊字符串算法的编码和比较目的?

我想对一个数字进行编码,然后将其与 100,000 个其他数字进行比较,以找到非常相似的匹配项。因此,类似 7041234 的内容会与 7041324 匹配,因为可能存在转录错误,但类似 ​​4213704 的内容不会。

【问题讨论】:

  • 天真的问题:Levenshtein distance 不会这样做吗?
  • 是的,这可能效果很好。特别是 Damerau-Levenshtein 距离可能正是我正在寻找的!

标签: algorithm fuzzy-comparison


【解决方案1】:

Levenshtein and friends 可能有助于查找特定字符串或数字之间的距离。但是,如果您想构建一个拼写校正器,您不希望在每次查询时都遍历整个单词数据库。

Peter Norvig 在基于 google 拼写建议背后的一些技术的简单“模糊匹配”拼写纠正器上写了 a very nice article

如果您的字典有 N 条目,并且平均单词的长度为 L,则“蛮力 Levenshtein”方法将花费时间 O(N*L^3)。 Peter Norvig 的方法改为生成距输入一定编辑距离内的所有单词,并在字典中查找它们。因此它达到了O(L^k),其中k是考虑的最远编辑距离。

【讨论】:

  • 只是想说谢谢你的回答。我打算复习这篇文章,但目前,丹尼尔在上面的回答让我得到了我需要的东西。
猜你喜欢
  • 2016-02-11
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多