如何在Ruby中进行模糊子串匹配?
|
我发现了许多有关模糊匹配的链接,将一个字符串与另一个字符串进行比较,看看哪个字符串获得最高的相似性得分。
我有一个很长的字符串,它是一个文档和一个子字符串。子字符串来自原始文档,但是已经转换了几次,因此可能会引入怪异的工件,例如此处的空格,此处的破折号。子字符串将匹配原始文档中文本的99%或更高的部分。我不匹配此字符串是从哪个文档开始的,我试图在文档中从该字符串开始的地方找到索引。
如果由于未引入随机错误而导致字符串相同,则我将使用
document.index(substring)
,但是即使有一个字符差异,此操作也会失败。
我认为,可以通过删除字符串和子字符串中除az以外的所有字符,进行比较,然后使用压缩字符串时生成的索引将压缩后的字符串中的索引转换为实际文档中的索引来解决差异。这在空白和标点符号之间的区别很不错,但是一旦一个字母不同,它就会失败。
该文档通常是几页到一百页,子字符串从几句话到几页。
没有找到相关结果
已邀请:
5 个回复
缮淳彼誊
显然,可能有很多改进,而且可能有必要!顶一下: 一次处理文档并存储 结果,可能在数据库中。 确定可用的字符串长度 进行初步检查 首先针对该初始子字符串 在尝试匹配整个之前 分段。 跟进前一个, 预先计算的起始片段 那个长度。
寿柬窟年
levenshein是一个更详尽的示例(尽管在本示例中您不会说),它计算差异的数量。
纤洞需匪
逝媳蘑贩茄
的一部分,那么在更简单的情况下,可以使用解析子字符串,然后在文档上使用
:
(这里,由于我们未在Regexp中设置任何括号,因此我们在
的第一个(完全匹配)元素
上使用
和
。 如果仅对开始位置感兴趣,可以使用
运算符:
茬贺努充尽
中搜索\'diff \'而发现了一些库。所有这些都可以通过gem安装。您可能想尝试一下。我本人对此很感兴趣,因此,如果您已经知道这些或尝试使用它们,则留下您的评论会有所帮助。 差异 差异 不同 衍射 pretty_diff 困难的 克朗 khtmldiff 格迪夫 ruby_diff 迪夫 扩散器 衍射 dbdiff diff_dirs rsyncdiff 威迪夫 diff4all davidtrogers-htmldiff edouard-htmldiff diff2xml 迪迪夫 罗迪夫 Nokogiri-diff 漂亮差异 easy_diff smartdiff