2011-09-22 85 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?)快速提取標題,但這樣更適合批量處理。

相關問題