如何使用Aho-Corasick在给定的字符串集中查找一段文本?

时间:2012-07-18 12:36:09

标签: algorithm string-matching aho-corasick

我有Aho-Corasick算法的代码。但是在搜索给定字符串列表中的文本时,我仍然不明白如何在查找过程中使用状态信息。

例如,我有一个字符串列表[MOSCOW][COLA],现在我需要确定列表中是否有CA,如果是,它的位置是什么?

这是link to the code

1 个答案:

答案 0 :(得分:2)

您正在学习的算法完全相反。如果字典为[MOSCOW][COLA],输入字符串为CA,则算法会告诉您MOSCOWCA的所有位置,以及{{1}的所有位置在COLA

现在一个特定的状态(或CA,就像链接代码所称的那样),具有如下含义:“我们可能只是在{{1}中的唯一Node之后但是,我们肯定不在C 的中间位置。 (这可能是在COLA的第一个字符后访问的节点。)

在搜索不同的输入时,例如MOSCOW,更容易看到算法的强大功能。在看到CA之前,当前状态将意味着“我们可能将5个字符转换为潜在的MOSCOLONI,或将2个字符转换为潜在的L ”重要的是,国家立刻查看所有字典词;事实上,当你考虑重复字符时,甚至在所有单词中的所有位置。