我正在寻找有关一种有效算法的建议,该算法可用于查找大量文本中的所有匹配项。要搜索的字词将包含在列表中,并且可能有1000多种可能性。搜索词可以是1个或多个单词。
显然,我可以将文本与每个搜索词进行多次比较。不太有效。
我已经考虑过要对搜索词进行排序并合并常见的子段。这样,我可以快速消除大量术语。语言是C ++,我可以使用boost。
搜索字词的示例可以是《财富》 500强公司名称列表。
有想法吗?
已经对该问题进行了深入研究。奇怪的是,搜索一个模式/字符串的最佳算法并不容易推断到多字符串匹配。
该 “grep的” 家庭实现了非常高效的方式多字符串搜索。如果您可以将它们用作外部程序,请执行此操作。
如果您确实需要实现该算法,我认为最快的方法是重现agrep的功能(agrep在多字符串匹配方面表现出色!)。 这是源文件和可执行文件。
而在这里,你会发现描述关于字符串匹配使用的算法,理论背景,以及大量的信息和指针的论文。
注意:多字符串匹配已由Knuth,Boyer,Moore,Baeza- Yates等人进行了大量研究。如果您需要一种非常快速的算法,请不要犹豫,站在那里。不要重新发明轮子。