2017-02-18 10 views
0

テキストファイルにストーリーに関するテキストが含まれています。「好き」という単語を見つけてその次の単語を取得し、その単語の同義語を検索する関数を呼び出したいとします。ここに私のコードは次のとおりです。ファイルを正しく保存できません

file = 'File1.txt' 
with open(file, 'r') as open_file: 
    read_file = open_file.readlines() 
    output_lines = []   

for line in read_file: 
    words = line.split() 
    for u, word in enumerate(words): 
     if 'like' == word: 
      next_word = words[u + 1] 
      find_synonymous(next_word) 

    output_lines.append(' '.join(words)) 
    with open(file, 'w') as open_file: 
     open_file.write(' '.join(words)) 

私は言葉(のような)を含む1文を書くとき、それは動作しますので、私は、テキスト自体に考える私の唯一の問題(for example 'I like movies')。しかし、ファイルがたくさんの文章を含んでいて、コードを実行すると、すべてのテキストが削除されます。誰にも問題がどこにあるか知ることができます

答えて

0

あなたはいくつかの問題があります。 find_synonymous(next_word)はリストの単語を置き換えないので、元のテキストを元に戻すことができます。 forループ内でopen(file, 'w')を実行すると、ファイルは各行で上書きされます。 next_word = words[u + 1]は、likeが行の最後の単語である場合にインデックスエラーを発生させ、好きなものが次の行に続くケースを処理しません。

この例では、「is_liked」状態を追跡します。単語が類似の状態にある場合、それは変換されます。そうすれば、行間で分割された文章を扱うことができ、索引エラーを心配する必要もありません。リストはループ外のファイルに書き込まれます。

file = 'File1.txt' 
with open(file, 'r') as open_file: 
    read_file = open_file.readlines() 

output_lines = []   
is_liked = False 

for line in read_file: 
    words = line.split() 
    for u, word in enumerate(words): 
     if is_liked: 
      words[u] = find_synonymous(word) 
      is_liked = False 
     else: 
      is_liked = 'like' == word 
    output_lines.append(' '.join(words) + '\n') 

with open(file, 'w') as open_file: 
    open_file.writelines(output_lines) 
関連する問題