Aho-Corasick文本是否与整个单词匹配?

问题描述 投票:2回答:3

我正在使用Aho-Corasick文本匹配,想知道是否可以更改它以匹配terms而不是字符。换句话说,我希望这些术语成为匹配的基础,而不是字符。例如:

搜索查询:“ He”,

句子:“ Hello world”,

Aho-Corasick将“ he”与以索引2结尾的句子“ hello world”匹配,但我希望没有匹配项。因此,我指的是“术语”一词,而不是字符。

java algorithm full-text-search string-matching aho-corasick
3个回答
7
投票

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

希望这会有所帮助!


6
投票

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

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

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


0
投票

聚会晚了,但是另一种选择是在树突中插入一些代表单词开头和结尾的符号。然后,在匹配阶段,它们必须进行相应的匹配。我要亲自尝试这种方法。

© www.soinside.com 2019 - 2024. All rights reserved.