java中的高效字符串匹配

时间:2012-09-22 16:19:11

标签: java regex string string-matching

我有一串句子(推文)和1000多万个名字。我想确定一个句子(推文)是否包含1000万个名字中的一个。我可以为所有可能的模式编译正则表达式,但我真的想知道是否有一个有效的算法来做到这一点。

谢谢,

4 个答案:

答案 0 :(得分:3)

您可以构建a trie (a prefix tree)

答案 1 :(得分:3)

您可以尝试使用Bloom filterDemo here

答案 2 :(得分:0)

如果您只是寻找简单字符串(名称)的出现,我认为您根本不需要模式匹配。如果你实际上是针对推特名称 - 在推文中提到它们时,它们是不是带有@符号的前缀?如果是这样,首先只是寻找@符号并从那里开始。

要检查@之后的字符串是否是您的1000万字符串之一,ruakh提出的前缀树绝对是个好主意

答案 3 :(得分:0)

你可以从另一个方向去做。当句子出现时,将其拆分为标记并为每个标记构建一个RegEx模式,例如^ token \ s *。假设各自在线,将每个名称与1000万个名称进行比较。