以下のような英文を Python で単語分割するとき、どのようにしますか?
You have eaten lunch, haven't you?
例えば以下のようなプログラムが考えられます。
>>> sentence = "You have eaten lunch, haven't you?"
>>> sentence.split()
['You', 'have', 'eaten', 'lunch,', "haven't", 'you?']
概ねうまくいっているように見えますが、'lunch,'
や'you?'
など記号類がその左側の単語にくっついて出力されています。
また"haven't"
も一語となっていますが、have + n't
と分割されて欲しい場合もあると思います。
他にも引用符など様々なことを考慮する必要があり、正直言って面倒です。
そこで NLTK を使います。 NLTK は Python の自然言語処理用ライブラリです。
NLTK の nltk.word_tokenize を使った英文の単語分割は以下のようになります。
>>> import nltk
>>> sentence = "You have eaten lunch, haven't you?"
>>> nltk.word_tokenize(sentence)
['You', 'have', 'eaten', 'lunch', ',', 'have', "n't", 'you', '?']
カンマや疑問符といった記号、アポストロフィによる短縮形にもうまく対応出来ている事が分かると思います。
NLTK は単語分割の他にも品詞タグ付けやテキスト分類など様々な機能が実装されています。
詳しくは公式ドキュメントや以下の書籍等が参考になると思います。