2

我正在使用Aho-Corasick文本匹配,并想知道它是否可以更改为匹配条款而不是字符。换句话说,我希望条款成为匹配的基础而不是角色。举个例子:Aho-Corasick在整个单词上的文字匹配?

搜索查询: “他”,

一句话: “世界,你好”,

阿霍Corasick将匹配 “他” 来了一句 “Hello World” 的索引2结束,但我宁愿没有匹配。所以,我的意思是用“术语”而不是字符。

+0

你是什么意思的“条款?”你能给个例子吗? – templatetypedef

回答

4

这样做的一种方法是像往常一样使用Aho-Corasick,然后做一个过滤步骤,消除所有误报。例如,每次找到匹配项时,都可以确认输入中的下一个和上一个字符是非字母字符,如空格或标点符号。这样,您就可以获得Aho-Corasick查询的速度,但只会考虑文本中显示为整个单词的匹配。

希望这会有所帮助!

+0

谢谢。我用这个,它似乎工作正常。 – DotNet

5

一种可能性是在搜索项中包含空格字符,可能在预处理输入后将各种空格(空格,换行,回车,制表符)转换为相同的空格字符。

就Aho-Corasick而言,另一种可能性是将字母表中的字符视为字词。 Aho-Corasick的工作速度(如果不是更快)的字母大小为2^32,其中在输入文本中看到的每个单词都被编码为单个字符,因为它将使用字母大小为2^8的字母,其中a像往常一样,字符只是一个字节。

无论哪种情况,您都必须对您的预处理与标点符号做什么做出决定。