假设我有一个单词词典,{'cat','cot','catalyst'}和一个字符相似关系f(x,y)
f(x, y) = 1, if x and y are similar
= 0, otherwise
这些“相似之处”可以由程序员指定。 比如说,
f('t', 'l') = 1
f('a', 'o') = 1
f('f', 't') = 1
但是,
f('a', 'z') = 0
etc.
现在,如果我们有一个'cofatyst'查询,算法应报告以下匹配项:
('cot', 0)
('cat', 0)
('catalyst', 0)
其中数字是找到的匹配项的从0开始的索引。我尝试了Aho-Corasick algorithm,虽然它对于精确匹配非常有用,但是当一个字符的“相似”字符数量相对较少时,它的性能会随着我们增加一个字符的相似字符数而呈指数下降。有人能指出我这样做的更好方法吗?模糊性是绝对必要的,它必须考虑到字符的相似性(即,不要盲目地依赖于编辑距离)。
答案 0 :(得分:1)
levenshtein距离与您正在寻找的距离类似,但可能不是那么精细。您可以重新实现该算法的更受控制的版本,但我确定。