【发布时间】:2011-08-30 21:52:00
【问题描述】:
我发现了很多关于模糊匹配的链接,将一个字符串与另一个字符串进行比较,看看哪个获得了最高的相似度分数。
我有一个很长的字符串,它是一个文档和一个子字符串。子字符串来自原始文档,但经过多次转换,因此可能引入了奇怪的伪影,例如这里的空格,那里的破折号。子字符串将匹配原始文档中的一段文本 99% 或更多。我不匹配以查看此字符串来自哪个文档,我正在尝试在文档中查找该字符串开始的索引。
如果字符串是相同的,因为没有引入随机错误,我会使用document.index(substring),但是如果有一个字符差异,这将失败。
我认为差异可以通过删除字符串和子字符串中除 az 之外的所有字符,比较,然后使用我在压缩字符串时生成的索引将压缩字符串中的索引转换为索引真实的文件。这在空格和标点符号不同的地方效果很好,但只要一个字母不同,它就会失败。
文档一般是几页到上百页,子串从几句到几页。
【问题讨论】:
-
在我看来,来自 Google 的Diff Match Patch 可以胜任这项工作(Match 部分),但是没有适用于 Ruby 的 API。最终可能会通过 Python 使用它,但仍然很想在 Ruby 中找到一个原生解决方案(获得上述的 Ruby 绑定也很棒)。
-
@sawa 感谢您为包含所有这些所做的工作。
标签: ruby string fuzzy-search