2011-01-28 11 views
1

Twitter APIから多くのデータを取得するウェブサイトを開始しています。私は、APIから得たつぶやきの特定のフレーズを探したいと思っています。私はこのために最高の言語が何かを考えています。私の知識の大部分はPHPにありますが、私が過去に読んだことから、私はPythonにもっと傾いています。私が前に言ったように、特定のフレーズを探しているので、PHPのstrpos関数に似たものを使いたいと思っています。私は最速の処理時間を持つ言語を探しています。私もこのコードで多くのINSERTをやっていますが、文字列の処理が大部分を占めることになるので、私はそれに焦点を当てています。あなたの答えに事前に感謝します。多数の文字列比較に最適な言語

+0

C++、C、またはASM? –

答えて

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)