2017-10-01 2 views
0

コーパスにタグを付けるので、すべてのストップワードにNOTRELATEDというラベルを付ける必要があります。私はそれをPythonでやろうとしましたが、Pythonで新しく動作しませんでした。ファイル内の特定の文字列セットに文字列を追加する方法

stop_words = set(stopwords.words('english')) 
    for line in word_tokenize(input_file): 
     if stop_words in line: 
     line = line + " NOTRELATED\n" 
output_file.write(line) 

サンプル入力(テキストファイル):

コスト

ダメージ
農業
から

インフラ

で エリア
荒廃
台風
ランドー
によって は
より
より
にP6.3


が急増しています。

出力(ファイル):

コストNOTRELATED
損傷の

NOTRELATED
農業へ
とNOTRELATED
インフラNOTRELATED
分野


。 。

+0

あなたがファイルに取得する出力は何ですか? – MaNKuR

+0

'stop_words in line:'これは、stop_wordsの単語が並んでいるかどうかをチェックしません。あなたの 'stop_words'セットを反復処理し、その中のすべての単語をチェックする必要があります。 – Vinny

+0

@MaNKuRの空白。 –

答えて

1

いくつか問題があります。最初は、入力ファイルの単語がストップワードセットに含まれているかどうかをチェックする必要があります。だから、

if stop_words in line: 

は次のようになります。

if line in stop_words: 

残りは主にインデントの問題のように見えます。 forループの完了後にlineをファイルに書き込む代わりに、ループ中にファイルに書き込みます。そしてwordlineより良い選択のようになります。

stop_words = set(stopwords.words('english')) 
for word in word_tokenize(input_file): 
    print(word, 'NOTRELATED' if word in stop_words else '', file=output_file) 
+0

うわー、その作業!ありがとう。 –

1

問題は、ループが開始するたびにオーバーライドされているlineです。以下のコードを試してみてください。

stop_words = set(stopwords.words('english')) 
file_content = set() 
for line in word_tokenize(input_file): 
    if line in stop_words: 
     line += " NOTRELATED" 
    line += '\n' 
    file_content.add(line) 

output_file.write(''.join(file_content)) 
0

出力行は、実際に行を読み取っているループ内にある必要があります。試してみてください...

stop_words = set(stopwords.words('english')) 
for line in word_tokenize(input_file): 
    if stop_words in line: 
     line = line + " NOTRELATED\n" 
    output_file.write(line) 
関連する問題