2011-01-28 33 views
1

我開始一個網站,它將從Twitter API中獲取大量數據。然後,我想在API中獲得的推文中查找特定的短語。我想知道最好的語言是什麼。我的大部分知識都在PHP中,但從我過去閱讀的內容來看,我更傾向於使用Python。就像我之前說過的那樣,我會尋找特定的短語,所以我想使用類似PHP的strpos函數。我正在尋找一種處理速度最快的語言。我也會用這段代碼做很多INSERT,但我認爲字符串處理將會佔用大部分時間,所以我將重點放在這個上。預先感謝您的答案。大量字符串比較的最佳語言

+0

C++,C還是ASM? – 2011-01-28 13:48:55

回答

1

我的一個項目中收穫的鳴叫,然後將篩選語料庫下降到僅相關的技術和發展的鳴叫。從Twitter獲取這些推文的成本矮人搜索字符串所花費的時間。我說你應該選擇一種你喜歡的語言(我選擇的武器是C#),並確保你使用了一種高效和適當的算法來執行你的搜索 - SEK發佈了一個非常好的鏈接,讓你開始。

更重要的是有一個好的策略來處理推文,這是你可以通過Twitter的性能被殺死的地方。對我而言,最好的方法是在多臺機器上創建一個進程(或多個進程),它使用多線程異步客戶機來獲取推文並將其放入數據存儲中進行處理。這個過程完全是責任,儘快從Twitter獲取推文。另一個多線程服務進程負責檢查獲取的推文是否與我的目標短語匹配。

1

你認爲字符串比較會花費最多時間是正確的,但無論您選擇哪種語言,性能都可能相同。所以你最好的選擇是選擇你最喜歡的那個。另一方面,學習一門新語言只會增加你的知識,Python的語法會使你成爲一個更好的程序員。

在任何情況下,使用適當的算法進行字符串搜索和索引是非常重要的。 Wikipedia有一個體面的文章,應該給你一個各種算法的概述。從您的描述中,聽起來好像您最好使用有限模式集搜索,並且優先考慮對模式進行預處理的搜索,例如Aho-Corasick。

3

如果您的搜索字詞集是固定的,the esmre library for Python可能正是您所需要的。它使用Aho-Corasick對大型搜索項進行快速子字符串匹配。

下面是一個使用esmre找到一個例子提到了一些編程語言:從許多開發商

import esm 

tweets = """ 
I've always loved Python. 
C# is better than I thought. It's like Java done right. 
My tiny mind cannot grasp Haskell. 
Objective-C is like C and Smalltalk's illegitimate lovechild. 
""".strip().split('\n') 

search_terms = ["Python", "Ruby", "PHP", "Erlang", "Haskell", "OCaml", 
    "Objective-C", "C#", "C++", "Common Lisp", "Scheme", "Java", "Smalltalk", 
    " C " 
] 

# Build the index of search terms 
index = esm.Index() 

for term in search_terms: 
    index.enter("%s" % term.lower(), term) 

index.fix() 

# Find mentions of the search terms 
for tweet in tweets: 
    matches = index.query(tweet.lower()) 
    languages = [label for (position, label) in matches] 

    print "%r mentions %r" % (tweet, languages)