我的文字大约有300-500个字。我也有大约20万个关键字,我想知道每个关键字是否包含在文本中。字符串包含ist的速度很慢,是否有某种预处理字符串的方法?
我考虑过使用SuffixTree,但不确定是否是最佳选择。
另外,有没有很好的库可以完成此任务?例如,semanticdiscoverytoolkit具有后缀树实现,但是在添加字符串之后,我无法弄清楚如何查找树中是否包含字符串。
问候,
尼科
最佳答案
您可以尝试使用rabin-karp字符串搜索算法。由于您主要进行哈希(整数)比较,因此性能比字符串比较要好得多。
计算关键字的哈希
计算文本的滚动哈希
比较这两个哈希。如果它们匹配,则执行实际的字符串比较。
将位置提高1个字符,然后从步骤2开始重复,直到到达文本结尾。
打个比方,滚动哈希就像沿着文本滚动的“滑动窗口”。使用“滑动窗口”中子字符串的哈希值与关键字的哈希值进行哈希比较。