一尘不染

查找多个字符串匹配项的算法

algorithm

我正在寻找有关一种有效算法的建议,该算法可用于查找大量文本中的所有匹配项。要搜索的字词将包含在列表中,并且可能有1000多种可能性。搜索词可以是1个或多个单词。

显然,我可以将文本与每个搜索词进行多次比较。不太有效。

我已经考虑过要对搜索词进行排序并合并常见的子段。这样,我可以快速消除大量术语。语言是C ++,我可以使用boost。

搜索字词的示例可以是《财富》 500强公司名称列表。

有想法吗?


阅读 307

收藏
2020-07-28

共1个答案

一尘不染

不要重新发明轮子

已经对该问题进行了深入研究。奇怪的是,搜索一个模式/字符串的最佳算法并不容易推断到多字符串匹配。

“grep的” 家庭实现了非常高效的方式多字符串搜索。如果您可以将它们用作外部程序,请执行此操作。

如果您确实需要实现该算法,我认为最快的方法是重现agrep的功能(agrep在多字符串匹配方面表现出色!)。
是源文件和可执行文件。

在这里,你会发现描述关于字符串匹配使用的算法,理论背景,以及大量的信息和指针的论文。

注意:多字符串匹配已由Knuth,Boyer,Moore,Baeza-
Yates等人进行了大量研究。如果您需要一种非常快速的算法,请不要犹豫,站在那里。不要重新发明轮子。

2020-07-28