用于在短文本中查找一组匹配的高效算法

时间:2010-12-03 12:36:23

标签: algorithm text

输入:

  1. 相对较短(通常为100-1000个字符)的文字。
  2. 预先提供约5000个表达式的固定列表,其中大多数长达10-20个字符,其中一些包含其他表达式(例如“尝试”和“再试一次”)。
  3. 注意 - 只有第一个输入发生变化,第二个输入被视为常量,可用于预处理。

    期望输出:

    识别文本中第2项表达式的所有匹配项。如果存在匹配歧义,请尽可能采用贪婪匹配。

    运行时应该相对较快,但没有严格的性能要求。蛮力企图可能就足够了。

    对此有什么好的算法?后缀树在这里有用吗?如何查看所有表达式并将它们放在哈希表中?另请注意,我对实用解决方案感兴趣,因此易于实施比超高效算法更有用...

2 个答案:

答案 0 :(得分:2)

查看Aho–Corasick算法。

答案 1 :(得分:1)

假设无限存储的一般“算法”,为了优化这一点,可以根据字符在数据上建立一个树,允许您递归地搜索模式。在您构建的树索引中,您将向下遍历,直到达到“唯一”点,“leaf”将给出该唯一出现位置的位置。

在上面的段落中,例如“index”一词出现一次。如果树一次构建一个字符,那么我们遵循的树路径将以“i”字符开头,然后是“in”。如果它区分大小写,则只有3次出现(假设,优化和索引)。当我们下次搜索'd'时,我们会得到我们独特的结果。当然,我们可以首先用空格开始搜索,然后是i,然后是n,我们将遵循不同的路径。

您还可以使树不区分大小写,并且可以在每个分支点使用“nybble”而不是字节。