2017-09-10 17 views
0

私のコードは、コーパス内で最も頻度の高い上位10語を出力します。しかし、それは10のランダムな単語の出力を与えています。辞書はPythonで正しくソートされていません

from nltk.corpus import brown 
import operator 

brown_tagged_sentences = brown.tagged_sents(categories='news') 
fd=nltk.FreqDist(brown.words(categories='news')) 
sorted_fd = dict(sorted(fd.items(), key=operator.itemgetter(1), reverse=True)) 
print(sorted_fd) 
most_freq_words=list(sorted_fd)[:10] 
for word in most_freq_words: 
    print(word,':',sorted_fd[word]) 

現在来て出力が間違っている、それ以下である:

Rae : 1 
discharge : 1 
ignition : 1 
contendere : 1 
done : 24 
meaning : 4 
ashore : 1 
Francesca : 1 
Vietnamese : 1 
data : 4 

は親切

+1

辞書は、ソートされていないデータ構造であり、これが最良の方法はそれをやってODであるホープ注文は保存されません。詳細については、[Documentation](https://docs.python.org/3/tutorial/datastructures.html)を参照してください。 –

+0

私はこれを見て、これを実装しようとしていました。しかし、それは働いていません。私はそれが正しいかどうかわからない。 https://stackoverflow.com/a/613218/1181744 – Bonson

答えて

2

をNLTKのFreqDist()クラスが直接メソッドmost_common()を使用して、周波数の高い順に、あなたにその内容を与えることができます:

fd=nltk.FreqDist(brown.words(categories='news')) 
for w, f in fd.most_common(10): 
    print(w+":", f) 
0

が作業を周りに手に入れたのに役立ちます。

fd=nltk.FreqDist(brown.words(categories='news')) 
sorted_fd = sorted(fd.items(), key=operator.itemgetter(1), reverse=True) 
most_freq_words = [w for w,c in sorted_fd] 
most_freq_words = most_freq_words[:10] 
for word in most_freq_words: 
    print(word,':',fd[word]) 
+1

ベストの「回避策」は['OrderedDict'](https://docs.python.org/3/library/collections.html#collections.OrderedDict)です。 –

関連する問題