2017-12-23 2 views
-2

私はこのテキストファイルですべてのトライグラムを検索しようとしていますが、このコードを使用するとエラーメッセージは表示されませんが、希望のトリグラムも表示されません。それはただ何も返しません。ここでテキストファイル内でトリグラムを見つける

はコードです:Pythonで

import sys 

def arg2(pair): 
return pair[1] 

def getTrigrams(wordList): 
trigrams = [] 
for i in range(len(wordList) - 2): 
    trigram = (wordList[i], wordList[i + 1], wordList[i + 2]) 
    trigrams.append(trigram) 
    return trigrams 

def main(argv): 
if len(argv) > 1: 
    for arg in argv[1: ]: 
     text = open(arg, "r") 
     trigram_dictionary = {} 
     content = text.read() 
     lines = content.split("\n") 
     for line in lines: 
       words = [word for word in line.split(" ") if word.isalpha()] 
       trigram_list = getTrigrams(words) 
       for trigram in trigram_list: 
        if trigram not in trigram_dictionary: 
        trigram_dictionary[trigram] = 1 
        else : 
        trigram_dictionary[trigram] += 1 
        sorted_trigram_frequencies = sorted(trigram_dictionary.items(), 
        key = arg2, reverse = True) 
        for trigram in sorted_trigram_frequencies: 
         print("{0:20}\t{1:5}".format("\t".join(trigram[0]), trigram[1])) 

if __name__ == '__main__': 
    main(sys.argv) 
+1

あなたが直面している問題の__ *非常に* __簡単な説明でコードを投稿するだけで、有効な質問はここにありません。 –

+0

Pythonで 'ngrams'を正しく実行する方法については、無数の**投稿があります。 –

+0

いくつかの基本的なデバッグから始めましょう。いくつかのprintステートメントをさまざまな場所に挿入して、プログラムの状態がその時点になることが予想される場所であることを確認します。何かが予期しない結果をもたらす場所を見つけたら、どこで問題を探すのが良いかわかります。 (また、ここに貼り付けると、あなたのコードの書式をチェックしてください:あなたの関数のすべてが間違ってインデントされています。これはPythonでは非常に重要です。) – glibdud

答えて

0

インデントの非常に注意する必要があります。

コードの最後にあるif ... else ...ブロックのコードをもう一度見てみると、2番目の同じものが見つかった場合は、トリグラムだけをソートして印刷していることがわかります1。これは、複数の複製がある場合は、現在見つかったすべてのトライグラムを複数回印刷することを意味します。

ソートと印刷コードを2〜3字分のインデントレベルに戻す必要があります。

関連する問題