2012-02-09 17 views
2

Pythonを使い始める。ネストされた辞書を使って位置インデックスを実装しようとしています。しかし、私はそれが行く方法があるかどうかは分かりません。インデックスには用語/用語の頻度/ドキュメントID /用語の位置が含まれている必要があります。位置インデックス(Pythonを使用)

例:

dict = {term: {termfreq: {docid: {[pos1,pos2,...]}}}}

私の質問は:私はここで正しい軌道に乗っていますか私の問題へのよりよい解決策があります。入れ子にされた辞書が行く方法である場合私はもう一つ質問があります:どのように辞書から単一の項目を得るか:用語の頻度(例えば、その用語についての追加の情報なし)。 これについてのご協力をよろしくお願い申し上げます。

答えて

5

termには、用語頻度、ドキュメントID、および位置のリストがあるようです。そうですか?あなたがあるとして辞書の

dct['wassup']['termfreq'] 
# 'daily' 

考えると用語頻度を調べることができ、「wassup」のようその後

dct = { 'wassup' : { 
      'termfreq' : 'daily', 
      'docid' : 1, 
      'pos' : [3,4] }} 

、用語与えられ、:もしそうなら、あなたはdictsの辞書を使用することができます電話帳のように。キー(名前)を与えられた値(電話番号)を調べることは素晴らしいことです。値を与えられたキーを調べるのはあまり熱くない。一方的な方向に物事を見る必要があることを知っているときは、dictを使います。ルックアップパターンがより複雑な場合は、他のデータ構造(おそらくデータベース?)が必要な場合があります。


また、Natural Language Toolkit (nltk)をチェックアウトすることもできます。これは、内蔵のmethod for calculating tf_idfがあります

import nltk 

# Given a corpus of texts 
text1 = 'Lorem ipsum FOO dolor BAR sit amet' 
text2 = 'Ut enim ad FOO minim veniam, ' 
text3 = 'Duis aute irure dolor BAR in reprehenderit ' 
text4 = 'Excepteur sint occaecat BAR cupidatat non proident' 

# We split the texts into tokens, and form a TextCollection 
mytexts = (
    [nltk.word_tokenize(text) for text in [text1, text2, text3, text4]]) 
mycollection = nltk.TextCollection(mytexts) 

# Given a new text 
text = 'et FOO tu BAR Brute' 
tokens = nltk.word_tokenize(text) 

# for each token (roughly, word) in the new text, we compute the tf_idf 
for word in tokens: 
    print('{w}: {s}'.format(w = word, 
          s = mycollection.tf_idf(word,tokens))) 

利回り

et: 0.0 
FOO: 0.138629436112 
tu: 0.0 
BAR: 0.0575364144904 
Brute: 0.0 
+0

私は、私がtextrankを実装できるようになるピクルスファイルを構築し、TF-IDFおよび法的文書のコーパスを検索しようとしています - ので、私はそれが鍵から価値へ - ある方向に進むと考えています。あなたのソリューションはそのトリックを行うようです。どうもありがとう。 (これは私の最初の週のpython(実際には任意の言語でプログラミング)を使用しているので、私はおそらく近い将来ここに戻ってくるだろう:)) – root

+0

ありがとう。あなたのコードにバイグラムとトリグラムを追加しました。トピックを少し離れているので、投稿する場所は不明です。 – root

+0

新しい質問であれば、新しい質問を投稿してください。そうでない場合は、https://gist.github.com/に投稿し、ここにリンクを追加することができます。 – unutbu

関連する問題