如何在有拼写错误的文本中查找列表的字符串

How to find strings of a list in a text with typo's

我正在尝试检查列表中的某些字符串是否在给定文本中。但是给定的文本可能会有一些拼写错误。举个例子吧。

text: brownw focx 和猫在森林里。 我的列表是:[brown fox, forest, cat]

我实际上做的是将我的文本分成多个组,一个词组和两个词组,如下所示: [The, brownw, focx, and, the, cat, are in, th, eforest, The brownw, brownw focx, focx and, and the cat, cat are in, in, th, eforest]

然后我遍历每组单词并使用 Levensthein 算法检查两个字符串相互匹配的程度。如果超过 90% 我认为它们是相同的。

但是这种方法非常耗时,我想知道我是否可以找到替代方法。

而不是使用完整的 Levenshtein 距离(计算速度很慢),您可以事先进行几次健全性检查,以尝试排除明显错误的候选人:

  1. 字长:the 永远不会匹配 brown fox,因为它太短了。统计字长,排除所有短或长几个字母以上的候选项。
  2. 字母:只检查单词中的字母。例如,the 不包含来自 fox 的单个字母,因此您可以直接排除它。对于简短的词,它可能不会对性能产生很大的影响,但对于较长的词,它会产生很大的影响。额外的优化:首先寻找稀有字符 (x,q,w),或者干脆忽略更可能出现的常见字符 (e,t,s)。

诸如此类的启发式方法当然不会为您提供正确答案,但它们可以帮助过滤掉那些肯定不会匹配的答案。然后你只需要对更少的候选词进行更昂贵的全面检查。