您可以实现基于levenshtein distance的东西。
很显然,比伯离海狸还有很长的路要走,它们相距太远而无法
被认为是简单的拼写错误。 Damerau观察到80%的人类
拼写错误的编辑距离为1。换句话说,80%的
只需对原始内容进行一次修改,即可纠正拼写错误
字符串。
Elasticsearch支持最大编辑距离,该距离由
模糊参数,为2。
当然,一次编辑对字符串的影响取决于
字符串的长度。帽子一词的两次修改会产生疯狂的后果,
因此,允许对长度为3的字符串进行两次编辑是过分的。的
可以将模糊性参数设置为AUTO,这将导致
最大编辑距离:
0表示一个或两个字符的字符串
1,表示三个,四个或五个字符的字符串
2(表示五个以上字符的字符串)
我喜欢自己使用pyxDamerauLevenshtein。
pip install pyxDamerauLevenshtein
因此您可以执行一个简单的实现,例如:
keywords = ['tiger','lion','elephant','black cat','dog']
from pyxdameraulevenshtein import damerau_levenshtein_distance
def correct_sentence(sentence):
new_sentence = []
for word in sentence.split():
budget = 2
n = len(word)
if n < 3:
budget = 0
elif 3 <= n < 6:
budget = 1
if budget:
for keyword in keywords:
if damerau_levenshtein_distance(word, keyword) <= budget:
new_sentence.append(keyword)
break
else:
new_sentence.append(word)
else:
new_sentence.append(word)
return " ".join(new_sentence)
只需确保使用更好的令牌生成器,否则会很混乱,但是您明白了。另请注意,这是未优化的,并且在使用许多关键字的情况下会非常缓慢。您应该实现某种存储方式,以使所有单词与所有关键字都不匹配。