2

特定のタグのコーパスから上位の値を返そうとしています。タグと単語自体を正常に返すことはできますが、出力内でカウントを返すことはできません。

import itertools
import collections
import nltk 
from nltk.corpus import brown

words = brown.words()

def findtags(tag_prefix, tagged_text):
cfd = nltk.ConditionalFreqDist((tag, word) for (word, tag) in tagged_text
                              if tag.startswith(tag_prefix))
return dict((tag, cfd[tag].keys()[:5]) for tag in cfd.conditions())

tagdictNNS = findtags('NNS', nltk.corpus.brown.tagged_words())

これにより、次の罰金が返されます

for tag in sorted(tagdictNNS):
    print tag, tagdictNNS[tag]

私はこれを使用してすべてのNNベースの単語のカウントを返すことができました:

pluralLists = tagdictNNS.values()
pluralList = list(itertools.chain(*pluralLists)) 
for s in pluralList:
    sincident = words.count(s)
    print s
    print sincident

それはすべてを返します。

オカレンスをdictに挿入するより良い方法はありtagdictNN[tag]ますか?

編集1:

pluralLists = tagdictNNS.values()[:5]
pluralList = list(itertools.chain(*pluralLists))

forsループからサイズ順にそれらを返します。それでもそれを行う正しい方法ではありません。

編集2:実際にNNSの複数形を検索するように辞書を更新しました。

4

1 に答える 1

0

私は理解できないかもしれませんが、あなたのtagdictNNSを考えると:

>>> new = {}
>>> for k,v in tagdictNNS.items():
        new[k] = len(tagdictNNS[k])
>>> new
{'NNS$-TL-HL': 1, 'NNS-HL': 5, 'NNS$-HL': 4, 'NNS-TL': 5, 'NNS-TL-HL': 5, 'NNS+MD': 2,      'NNS$-NC': 1, 'NNS-TL-NC': 1, 'NNS$-TL': 5, 'NNS': 5, 'NNS$': 5, 'NNS-NC': 5}

次に、次のようなことを行うことができます。

>>> sorted(new.items(), key=itemgetter(1), reverse=True)[:2]
[('NNS-HL', 5), ('NNS-TL', 5)]
于 2012-11-15T05:09:25.837 に答える