2011-01-29 14 views
6

私はWikipediaのすべてのWikipedia記事タイトルを含むWikipedia記事タイトルファイルをダウンロードしました。可能性のある記事のタイトルをすべて検索する必要があります。たとえば、私は "ホッケー"という言葉を持っているかもしれませんが、私が欲しいホッケーに関するWikipediaの記事は "Ice_hockey"です。大文字と小文字を区別しない検索にする必要があります。大きな文字列ファイル(Python)で部分文字列一致を見つける最も効率的な方法

私はPythonを使用していますが、行単位で検索するよりも効率的な方法がありますか?理想的には、毎分500回または1000回のような検索を実行します。行ごとに私の唯一のオプションがある場合、私はこれでできるいくつかの最適化はありますか?

私はファイルに数百万行があると思います。

アイデア?

ありがとうございました。

+1

予想される入力を示してください。ファイルはどの形式ですか?自分でファイルをダウンロードするのを手伝ってくれる人を作ってはいけません。 – aaronasterling

+0

それは、各タイトルがそれ自身の行にある単純なテキストファイルです – apexdodge

答えて

3

個々の単語に一致させたい場合は、グレッグの答えが良いです。部分文字列に一致させたい場合は、サフィックスツリー(http://en.wikipedia.org/wiki/Suffix_tree)のように少し複雑なものが必要です。構築されたサフィックスツリーは、任意の部分文字列に対するクエリに効率的に応答することができるので、あなたの例では、誰かが "ホック"を検索したときに "Ice_Hockey"と一致する可能性があります。

3

固定データセットと可変クエリがある場合、通常は、データセットをより簡単に検索できるものに再編成することです。抽象的なレベルでは、各記事のタイトルを個々の小文字の単語に分割し、それらをそれぞれPython辞書データ構造に追加することができます。次に、クエリを取得するたびに、クエリ単語を小文字に変換し、辞書で検索します。各辞書エントリ値がタイトルのリストである場合、特定のクエリワードに一致するすべてのタイトルを簡単に見つけることができます。

これは簡単な言葉では機能しますが、クエリが「煙」のときに「喫煙」を見つけるなど、類似した単語に対してマッチングを行うかどうかを検討する必要があります。

1

私はあなたのデータをsqliteデータベースに入れて、SQLの 'like'演算子を使って検索することをお勧めします。

関連する問題