如何有效地计算大词典的levenshtein距离?

时间:2017-02-27 09:46:07

标签: php algorithm levenshtein-distance

我有相当大的字典(200K字,2-16个字符长度)和各种输入字符串(5-20​​0个字用空格分隔,2-20个字符长度)。 在cli模式下使用PHP我需要将每个输入单词与字典中的单词进行比较,并以几乎最高的效率计算最小的levenshtein距离 - 我该怎么做?

我已经尝试过:

  1. 实施了我自己的基本比较算法(具有指数复杂性) - 非常慢。
  2. 实施了我自己的高级比较算法(基于单词长度) - 更快,但仍然很慢。
  3. 将字典转换为Trie数据结构并在Trie中实现搜索 - 比p.2快,但仍然不够。
  4. 为输入字匹配字词(零距离)时的情况添加了额外的哈希表。此外,将具有计算距离的输入单词放入哈希表中,以便在输入字符串中重复时不会对它们进行两次计算。仍然不够快。
  5. 我在想什么:

    1. 预制字典的Trie节点,因为后者永远不会改变。
    2. 为Trie节点使用数组而不是对象。
    3. 实施其他算法?像n-gram或levenshtein自动机?不确定是否值得。

0 个答案:

没有答案