静かなる名辞

pythonとプログラミングのこと



【python】nltkで英語の形態素解析

 POS taggingというタスクです。日本語の解析ではmecabやjumanを使うと思いますが、英語だとnltkに入っているものが使えるので楽です。

使い方

 凝ったやり方は幾らでもある(と思う)のですが、簡単のために次の二つを使います。

  • nltk.word_tokenize
  • nltk.pos_tag

 word_tokenizeは文を入力に受け取り、単語のリストを作ります。pos_tagはその単語のリストを受け取って、POSタグを推測してくれるようです。

 では、実際に試してみます。なお、最初に使うときは「解析に必要なリソースがないよ」という感じのエラーが出ると思います。親切なことにリソースの入れ方がエラーメッセージで出るので(nltk内にインストーラーが実装されててメソッド呼ぶだけで入る)、その通り対処してください。ネットワーク接続だけは必要です。

>>> import nltk
>>> string = "I AM A CAT. As yet I have no name."
>>> words = nltk.word_tokenize(string)
>>> words
['I', 'AM', 'A', 'CAT', '.', 'As', 'yet', 'I', 'have', 'no', 'name', '.']
>>> nltk.pos_tag(words)
# 可読性のため改行しています
[('I', 'PRP'), ('AM', 'VBP'), ('A', 'DT'), ('CAT', 'NNP'), ('.', '.'), 
 ('As', 'IN'), ('yet', 'RB'), ('I', 'PRP'), ('have', 'VBP'),
 ('no', 'DT'), ('name', 'NN'), ('.', '.')]

 このように解析が行えました。

各タグの意味

 なお、各タグの意味は次のコマンド(というかメソッド呼び出し)で出ます。

>>> nltk.help.upenn_tagset()

 ものすごくたくさん出てくるし、英語なので、必要になったら皆さんで使ってください(NLPガチ勢の人的には「こんなの当たり前にわかるよ!」でそもそも必要ないのかもしれないが・・・研究分野にもよるか)。なお、上の例で出てきたタグの説明だけ抜粋すると、

  • PRP

 pronoun, personal

  • VBP

 verb, present tense, not 3rd person singular

  • DT

 determiner

  • NNP

 noun, proper, singular

  • .

 sentence terminator

  • IN

 preposition or conjunction, subordinating

  • RB

 adverb

  • NN

 noun, common, singular or mass

 抜粋したのは説明の表題だけで、実際は3行くらいの説明が一緒に付いてます。なのでちゃんと読めばどのタグが何を意図してるかわからなくて困ることは、ないはずです・・・。

まとめ

 nltkさえ入れれば解析できる英語って言語は良いな・・・と思いました。