私はこれをコメントとして投稿しましたが、いくつかの説明を付けて完全な答えに具体化したほうがよいと思いました。
を使用str.split()
して文字列を単語に分割し、各単語を語幹にします。
for word in text.split(" "):
PorterStemmer().stem_word(word)
語幹のあるすべての単語の文字列をまとめたいので、これらの語幹を結合して戻すのは簡単です。これを簡単かつ効率的に行うためstr.join()
に、ジェネレータ式を使用します。
" ".join(PorterStemmer().stem_word(word) for word in text.split(" "))
編集:
あなたの他の問題のために:
with open("/path/to/file.txt") as f:
words = set(f)
ここでは、with
ステートメントを使用してファイルを開き(例外が発生した場合でもファイルを正しく閉じることができ、読みやすくなるため、ファイルを開くのに最適な方法です)、内容をセットに読み込みます。単語の順序や重複を気にしないのでセットを使用しますが、後で効率的になります。1行に1語と推測しています。そうでない場合は、コンマで区切るか、空白で区切ってから、str.split()
以前と同じように(適切な引数を使用して)使用することをお勧めします。
stems = (PorterStemmer().stem_word(word) for word in text.split(" "))
" ".join(stem for stem in stems if stem not in words)
ここでは、ジェネレータ式のif句を使用して、ファイルからロードした単語のセットに含まれる単語を無視します。セットのメンバーシップチェックはO(1)であるため、これは比較的効率的です。
編集2:
語幹に入る前に単語を削除するには、さらに簡単です。
" ".join(PorterStemmer().stem_word(word) for word in text.split(" ") if word not in words)
与えられた単語の削除は単純です:
filtered_words = [word for word in unfiltered_words if not in set_of_words_to_filter]