2011-09-22 30 views
1

我将运行实时twitter数据并尝试提取提及电子名称的推文。假设我有一份约7000张硬编码电影标题的列表,我想看看,选择相关推文的最佳方式是什么?这个项目还处于初级阶段,所以我愿意接受任何解决方案(即语言不可知论者)。任何帮助都将不胜感激。测试一个字符串是否包含数千个子字符串中的一个

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

+0

您是否拥有可以使用的数据,或者您将使用Twitter Search API?据我所知,Search API只允许你运行简单和短的查询,如“Movie1 OR Movie2” –

+0

@MichaelM。我使用的是搜索API,因为除了包含标题之外,推文需要采用给定的格式(例如“[string1]比[string2]好”)。我会搜索“比“但如果string1包含我所关心的事情之一,必须找到一种方法。 – Chris

+1

Argh,我最初阅读了核心电影^^ –

回答

3

你可以试试吴和曼伯的A Fast Algorithm For Multi-Pattern Searching

多模式匹配问题存在于病毒扫描的核心,因此您可能需要使用扫描仪来获取灵感。 ClamAV,例如,是开源的,一些论文已发表描述它的算法:

林,林荔:A Hybrid Algorithm of Backward Hashing and Automaton Tracking for Virus Scanning(吴曼伯的变体;纸张是IEEE付费墙)。

茶,Moraru,等:SplitScreen: Enabling Efficient, Distributed Malware Detection

2

如果使用编译的正则表达式,它应该是相当快的。也许特别是如果你在一个表达式中放置很多标题。

+0

取决于正则表达式库 - 您将需要基于DFA的一个,而不是回溯。 re2c或谷歌的re2应该运作良好。但是WReach建议的算法可能会更快(尽管如果匹配的字符串很短,我认为它不会有太大的区别) – bdonlan

2

有效地搜索在很长的字符序列许多方面需要专门的算法,以避免测试在每个位置上每学期。

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

+0

这可能会稍微复杂一些,使用前面的例子,string1前面有一个例子一些像“我认为......”这样的pablum,当推特被闯入其组件时,它将包括在内。在“比...更好”之前尝试仅仅是最后一个词,也会打破多词的标题 – Chris

0

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

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

相关问题