2017-02-25 6 views
-1

おはよう。必要なヘルプをお願いします。使用される言語はPythonです。以下のコードは、テキストファイルから読み込んだ後、改行ごとに各単語の頻度を返します。私は、以上のことから、このサイトからhttps://rmtheis.wordpress.com/2012/09/26/count-word-frequency-with-python/テキストファイルから読み込み、新しいテキストファイルに単語の頻度を保存します。

import re 
from collections import Counter 


def openfile(filename): 
    fh = open(filename, "r+") 
    str = fh.read() 
    fh.close() 
    return str 


def removegarbage(str): 
    # Replace one or more non-word (non-alphanumeric) chars with a space 
    str = re.sub(r'\W+', ' ', str) 
    str = str.lower() 
    return str 


def getwordbins(words): 
    cnt = Counter() 
    for word in words: 
     cnt[word] += 1 
    return cnt 


def main(filename, topwords): 
    txt = openfile(filename) 
    txt = removegarbage(txt) 
    words = txt.split(' ') 
    bins = getwordbins(words) 
    for key, value in bins.most_common(topwords): 

     print(key, value) 

main('hamlet.txt', 500) 

をそれを得た、それは私が使用しているIDE(pyCharm)に罰金印刷します。しかし、私は

#Write to file 
    with open("newFile.txt", "w") as f: 
     for word in main('hamlet.txt', 500): 
      f.write(word + os.linesep) 

、ちょうど上記のコードの下に次のコードを追加するときには、コンソール罰金に印刷んが、は多少の誤差を示し、または私が作成したテキストファイルに書き込めませんでしたまったく。 .Belowは、テキストファイルを読み込んだ後、コンソール上のサンプル出力を示すスニペットで、それは印刷します

the 16 
of 12 
to 9 
search 9 
which 6 

だから今、私はテキスタイルのテキストfile.Theコンテンツに、この上記の出力を書きたいはるかに長いですしかし、上記よりも。ありがとうございました。ちなみに、エラーがコンソールに乗っ

Traceback (most recent call last): 
    File "/Users/test/PycharmProjects/Trial/trial.py", line 52, in <module> 
    for word in main("hamlet.txt", 500): 
TypeError: 'NoneType' object is not iterable 

答えて

0

であるあなたが示すように機能mainを使用する場合、すなわち、

for word in main('hamlet.txt', 500): 

は、関数は、このために適合させるべきです。 一つは、例えば発電機を使用することができます。

return key, valueにあなたが必要
def main(filename, topwords): 
    txt = openfile(filename) 
    txt = removegarbage(txt) 
    words = txt.split(' ') 
    bins = getwordbins(words) 
    for key, value in bins.most_common(topwords): 
     # yield key #generate only the word, not it's frequency 
     yield key, value 

with open("newFile.txt", "w") as f: 
    for word, freq in main('hamlet.txt', 500): 
     f.write('%s\t%d\n' % (word, freq)) 
+0

、それを印刷するには、応答をありがとうございました。あなたがアドバイスしたように私は試みました。それは繊維に保存されたが、周波数を示さない。しかし、私が以前に述べたように、結果はテキストファイルに保存しなければならず、頻度も保存しなければなりません。上記のサンプル出力と同じです。だからどうすればここで私を助けることができますか?もう一度ありがとう... – user3761841

+0

@ user3761841この場合、ジェネレータは両方の値を生成できます。これらは出力ファイルに書き込まれます。私はそれに応じて答えを更新しました。 – ewcz

+0

'それはトリックでした....うわー、ありがとう。 Pythonはちょっと変わっているようですが、私はJavaのバックグラウンドを使っています... Thankssss a lot .. ' – user3761841

0

代わりの

+0

回答ありがとうございます。私が指示したとおり、 、値)を返す(キー、値を返す)が、私はこの時点でも実行されていないようだ。エラーが表示されます。 – user3761841

+0

何かについてTypeError:+: 'int'と 'str'のサポートされていないオペランドタイプ – user3761841

+0

指示通りに試しました。それは繊維に保存されましたが、1つの単語だけが保存され、同様に頻度は示されませんでした。私は今何ができますか?ありがとうございました。 – user3761841

関連する問題