我有一串句子(推文)和1000多万个名字。我想确定一个句子(推文)是否包含1000万个名字中的一个。我可以为所有可能的模式编译正则表达式,但我真的想知道是否有一个有效的算法来做到这一点。
谢谢,
答案 0 :(得分:3)
您可以构建a trie (a prefix tree)。
答案 1 :(得分:3)
您可以尝试使用Bloom filter。 Demo here
答案 2 :(得分:0)
如果您只是寻找简单字符串(名称)的出现,我认为您根本不需要模式匹配。如果你实际上是针对推特名称 - 在推文中提到它们时,它们是不是带有@符号的前缀?如果是这样,首先只是寻找@符号并从那里开始。
要检查@之后的字符串是否是您的1000万字符串之一,ruakh提出的前缀树绝对是个好主意
答案 3 :(得分:0)
你可以从另一个方向去做。当句子出现时,将其拆分为标记并为每个标记构建一个RegEx模式,例如^ token \ s *。假设各自在线,将每个名称与1000万个名称进行比较。