2016-11-08 12 views
0

PythonでN-gramのリストを書くには以下のコードがあります。輸入ngramsファイルへの出力の書き込みはPythonでは機能しません

def word_grams(words, min=1, max=6): 
    s = [] 
    for n in range(min, max): 
     for ngram in ngrams(words, n): 
      s.append(' '.join(str(i) for i in ngram)) 
    return s 
email = open("output.txt", "r") 
for line in email.readlines(): 
    with open('file.txt', 'w') as f: 
      for line in email: 
       prnt = word_grams(email.split(' ')) 
       f.write("prnt") 
email.close() 
f.close() 

私はword_gramsをプリントアウトするとき、それは正しくファイルを出力けど、それはfiles.txtに出力を書くことに来るとき、それは動作しませんnltk.utilから

。 「file.txt」は空です。

だから私は問題はコードのこれらの行以内でなければならないと思います。

for line in email.readlines(): 
    with open('file.txt', 'w') as f: 
      for line in email: 
       prnt = word_grams(email.split(' ')) 
       f.write("prnt") 
email.close() 
f.close() 
+0

どのように「機能しないのですか? –

+0

@ juanpa.arrivillagaコードは正しく実行され、エラーは発生せず、file.txtは空です。 –

+1

"prnt"という文字列をファイルに書き込みます。あなたが本当に望むのは、変数 'prnt'を書くことです。引用符を削除するだけです。 –

答えて

1

1)最終f.close()はあなたが望むものよりも何かを行い(ループ内fは他の目的である)

2 )ファイル名は "file.txt"ですが、出力は "files.txt"にします。あなたは正しいファイルを探していますか?

3)電子メールの各行のファイルを上書きしています。おそらく、 "file.txt"のwithステートメントはループ外にあるはずです。

4)あなたは、代わりにこのようなprnt

何かの"prnt"を書いていますか?

def word_grams(words, min=1, max=6): 
    s = [] 
    for n in range(min, max): 
     for ngram in ngrams(words, n): 
      s.append(' '.join(str(i) for i in ngram)) 
    return s 

with open("output.txt", "r") as email: 
    with open('file.txt', 'w') as f: 
     for line in email.readlines(): 
      prnt = word_grams(line.split(' ')) 
      for ngram in prnt: 
       f.write(ngram) 
1

私はあなたが正確に達成しようとしているのかわからないが、あなたがファイル「のoutput.txt」内のすべての単語に機能word_gramsを適用し、出力をファイルに保存したいようです「file.txt」と呼ばれ、たぶん1行に1つの項目です。これらの仮定で

、私はこの方法であなたの反復を書き直すことをお勧めします:

words = [] 
# load words from input 
with open("output.txt") as f: 
    for line in f: 
     words += line.strip().split(" ") 
# generate and save output 
grams = apply(word_grams, words) 
with open("file.txt", "w") as f: 
    f.write("\n".join(grams)) 

しかし、このコードは機能word_gramsが正常に動作していることを前提としています。

0

ループであなたのコード:

for line in email: 

は実行されませんでした!

email.readlines()の実行後に、変数emailが空です。 あなたは休閑地のようないくつかのテストを行うことができます。

email = open("output.txt", "r") 
for line in email.readlines(): 
    print '1' 
    for line in email: 
     print '2' 

あなたのoutput.txtとで3つのラインを持っている場合は、このテストを実行した後、あなたが得る:

1 
1 
1 

出力に。

そして、あなたはこのようなテストを行うことができます。

email = open("output.txt", "r") 
email.readlines() 

あなたのoutput.txtで行をリストに表示されます。

しかし、email.readlines()を再度実行すると、空のリストが表示されます。

したがって、問題があります。変数emailは、2番目のループで空です。

関連する問題