测试一个字符串是否包含几千个子串中的一个

时间:2011-09-22 01:37:14

标签: regex string language-agnostic substring

我将通过实时Twitter数据运行,并尝试提取提及电影片名的推文。假设我有一个大约7000个硬编码电影的列表,我想反对,选择相关推文的最佳方式是什么?这个项目处于初期阶段,所以我对任何解决方案(即语言不可知)持开放态度。任何帮助都将不胜感激。

更新:如果有人对雅虎的方式有任何了解,我会很好奇! Placemaker API,解决了这个问题。它可以采用文本字符串并返回其中提到的所有位置的地理编码JSON结果。

5 个答案:

答案 0 :(得分:3)

你可以试试Wu和Manber的A Fast Algorithm For Multi-Pattern Searching

多模式匹配问题是病毒扫描的核心,因此您可能希望通过扫描程序实现获取灵感。例如,ClamAV是开源的,已经发表了一些描述其算法的论文:

Lin,Lin和Lai:A Hybrid Algorithm of Backward Hashing and Automaton Tracking for Virus Scanning(Wu-Manber的一个变种;论文是IEEE付费专栏的背后)。

Cha,Moraru,et al:SplitScreen: Enabling Efficient, Distributed Malware Detection

答案 1 :(得分:2)

如果您使用已编译的正则表达式,它应该非常快。特别是如果你在一个表达式中放置了很多标题。

答案 2 :(得分:2)

在长字符序列中有效地搜索许多项将需要专门的算法来避免在每个位置测试每个项。

但是因为听起来你有一个已知模式的短字符串,你应该可以使用相当简单的东西。将您关注的标题集存储在哈希表或树中。使用正则表达式从每条推文中解析出“string1”和“string2”,并测试它们是否包含在集合中。

答案 3 :(得分:0)

根据埃里克森的建议,最可行的搜索是(在你的例子中“胜过”),然后检查7,000个术语中的一个。您可以通过创建7,000次搜索“[电影]优于”来缩小设置,然后在第二部电影上手动过滤,但您可能很快就会点击search rate limit

您可以使用像Solr这样的专用搜索服务来加速搜索,而不是使用文本解析。您可以使用某种自然语言处理服务(OpenCalais?)快速提取标题,但这更适合批量处理。

答案 4 :(得分:0)

为了同时搜索大量可能的目标,Rabin-Karp algorithm通常很有用。