2

これは単純な問題ですが、頭を包むことができません。私はという辞書を持っていTDます。の{key1{key2:values}}TDは、ドキュメントであり、ドキュメント{1:{u'word':3, u'next':2, u'the':2},2:{...}...}内の単語であり、メソッドを使用して取得された、ドキュメント内でその単語が出現する回数です。key1key2valueCounter

私は多数のドキュメントを持っているので、各ドキュメントにはTDのエントリがあります。

TD = {1:{u'word':2, u'next':1, u'the':5,...},
      2:{u'my':4, u'you':1, u'other':2,...},
      ...
      168:{u'word':1, u'person':1, u'and':8,...}}

私が今やりたいのは、各単語をチェックイン{1{...}}して、他のドキュメントに表示されているかどうかを確認し、ドキュメントごとにこのプロセスを繰り返すことです。単語が表示されるドキュメントごとに、1ずつfreq増加します。次のような新しい辞書Scoreがあります。

{1:{u'word':score, u'next':score,...}, 2:{u'my':score, u'you':score,...}...}

この辞書を入手するには:

Score={}
count = 0
for x,i in TD[count].iteritems():
    freq=1
    num=1
    for y in TD[num].keys():
        if word in TF[num].keys():
            freq+=1
        num+=1
    Score[num]={x:(i*freq)}
    num+=1

これにより、次の出力が得られます。

{1:{u'word':score}, 2:{u'next':score}, 3:{u'the':score}...}

する必要があります:

{1:{u'word':score, u'next':score, u'the':score,...}...}

問題はラインにあると思いますScore[num]={x:(i*freq)}

4

1 に答える 1

3

dictビューを使用してドキュメント間の共通部分を見つけ、次にCounterを使用してそれらの頻度をカウントします。

Score = {}
for id, document in TD.iteritems():
    counts = Score[id] = Counter()
    for otherid, otherdocument in TD.iteritems():
        if otherid == id:
            continue  # Skip current document
        counts.update(document.viewkeys() & otherdocument.viewkeys())

スコアの各エントリは、ドキュメント内の各単語が他のドキュメントに表示される頻度のカウントになります。

現在のドキュメントにも単語数(count + 1)を含める必要がある場合は、if otherid == idテストを削除するだけです。

独自のコードでは混乱numcountましたが、Pythonでは通常、ループカウンターを手動でインクリメントする必要はありません。

于 2012-08-02T17:57:04.880 に答える