2017-12-02 12 views
2

プログラムは、最も一般的な10の単語をファイルに印刷しようとしています。私は今、それは私がそれは10個の最も一般的な単語を印刷する必要があり、完全なファイルに最も一般的な単語を印刷する

が何であるかを表示しますトラブル10個の最も一般的な単語

from string import * 
file = open('shakespeare.txt').read().lower().split() 

number_of_words = 0 

onlyOneWord = [] 

for i in file: 
    if i in onlyOneWord: continue 
    else: onlyOneWord.append(i) 
lot_of_words = {} 


for all_Words in onlyOneWord: 
    all_Words = all_Words.strip(punctuation) 
    number_of_words = 0 
    for orignal_file in file: 
     orignal_file = orignal_file.strip(punctuation) 
     if all_Words == orignal_file: 
      number_of_words += 1 
     lot_of_words[all_Words] = number_of_words 

for x,y in sorted(lot_of_words.items()): 
    print(max(y)) 

を印刷を抱えていますこのように、それは

速く多くのことを実行します:251 リンゴ:234 など

+0

コードをフォーマットしてください。 – enyard

+0

私はあなたの質問を理解している場合は、別の方法を使用して印刷する必要があります:https://stackoverflow.com/questions/7197315/5-maximum-values-in-a-python-dictionaryアルゴリズムを最適化する必要があります(つまり、ファイル全体のループ回数が減ります)。 – DoesData

答えて

4

これを簡単に行うにはcollections.Counter.most_commonを使用できます。また、句読点を削除するのにstr.translateを使用します。

from collections import Counter 
from string import punctuation 

strip_punc = str.maketrans('', '', punctuation) 

with open('shakespeare.txt') as f: 
    wordCount = Counter(f.read().lower().translate(strip_punc).split()) 

print(wordCount.most_common(10)) 

はタプル

のリストを出力します
[('the', 251), ('apple', 100), ...] 

EDIT: 私たちは、潜在的に、我々は句読点を削除するために使用するのと同じtranslateコールを使用して文字のケースを変更することで、これをスピードアップすることができ

from string import punctuation, ascii_uppercase, ascii_lowercase 

strip_punc = str.maketrans(ascii_lowercase, ascii_uppercase, punctuation) 
+1

これはまた、OPが望ましくないかもしれない単語の中のアポストロフィやハイフンを削除することに注意してください。 –

+1

それは本当です。その場合、OPでは 'map(lambda x:x.strip(punctuation)、f.read()。lower()。split())'を代わりに使うことができます –

関連する問題