编辑距离算法给出了两个字符串之间距离的度量。
问题:这些措施中的哪一个与检测两个实际上相同的不同人名最相关?(由于拼写错误而不同)。诀窍是它应该尽量减少误报。例子:
奥巴马奥巴马 => 可能应该被合并
Obama Ibama => 不应合并。
这只是一个过于简单的例子。他们的计算机科学家是否更详细地解决了这个问题?
编辑距离算法给出了两个字符串之间距离的度量。
问题:这些措施中的哪一个与检测两个实际上相同的不同人名最相关?(由于拼写错误而不同)。诀窍是它应该尽量减少误报。例子:
奥巴马奥巴马 => 可能应该被合并
Obama Ibama => 不应合并。
这只是一个过于简单的例子。他们的计算机科学家是否更详细地解决了这个问题?
Aron 在他的评论中是对的,语料库很重要,而不仅仅是一对字符串之间的距离度量。
我认为 Carleton 提到的链接是正确的,就定义允许的拼写错误的规则集而言。我有点不清楚概率测量如何帮助。
几十年前,我写了一个规则驱动的拼写校正器(如果你相信的话,用 Pascal 和 Fortran)。
语料库是一个包含所有单词的基于字符的 trie。除了易于搜索之外,只需将 trie 的各个部分连接到 FSM 中,就可以轻松内置任意前缀和后缀。因此,例如,它可以识别“国有化”,或其他不会真正出现在任何字典中但仍然是单词的单词 - 有点。这样做的好处是可以显着减小语料库的大小。
该算法类似于分支定界算法,但它由具有错误预算的递归树遍历组成。当以 0 的错误预算调用时,它只会“打印”完全匹配。
当使用错误预算 1 调用时,它将打印 trie 中的所有条目,这些条目可以通过应用 1 个拼写错误规则从输入键中获取,例如插入、删除、转置或将一组字符中的一个字符简单替换为另一个可能“听起来很像”。您可以针对适合特定主题的拼写错误类型调整规则集。
如果没有找到预算为 0 或 1 的匹配项,则将预算增加到 2,以此类推。
对于小预算,性能当然是错误预算的指数级。这意味着在预算水平 N 上花费的努力与在较低预算水平上花费的努力总和仅相差一个常数因子。因此,只需不断增加预算就可以反复调用。
对于大预算,性能与语料库大小呈线性关系。
我发现将基于规则的搜索编写为递归树遍历比编写为一种广度优先或分支定界算法要容易得多,因为在任何时候它只需要管理一个假设的拼写错误。
我没有做但我应该做的一件事是将语料库和规则集预编译成编译语言(如 C),因为语料库和规则集很少更改。这将提供更高的速度,提高几个数量级。