静かなる名辞

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

2019/03/22:TechAcademyがteratailの質問・回答を盗用していた件
2019/03/26:TechAcademy盗用事件 公式発表と深まる疑念


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

概要

 形態素解析、いわゆるPOS taggingと呼ばれるようなタスクをnltkを使うと簡単に行なえます。日本語の解析では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さえ入れれば解析できる英語って言語は良いな・・・と思いました。

関連記事

www.haya-programming.com
 単語に分割する前にまず文に区切りたい、という場合はこちらを使います。

www.haya-programming.com
 ステミングとかです。