2017-09-10 41 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

字典是無序的數據結構,他們不保存順序,請閱讀[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

得到周圍工作。希望這是最好的辦法OD做:

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)。 –