pythonによる日本語自然言語処理 #pyconjp

37
Pythonによる 日本語自然言語処理 @nokuno #pyconjp

Upload: yoh-okuno

Post on 11-Jun-2015

8.855 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: Pythonによる日本語自然言語処理 #pyconjp

Pythonによる  日本語自然言語処理

@nokuno  

#pyconjp

Page 2: Pythonによる日本語自然言語処理 #pyconjp

発表の流れ

•  Python  2.Xにおける文字コード  

•  形態素解析してみよう!  

•  形態素解析を作ってみよう!  

•  テキストマイニングしてみよう!  

•  係り受け解析してみよう!  

Page 3: Pythonによる日本語自然言語処理 #pyconjp

自己紹介

•  @nokuno  /  id:nokuno  

•  #TokyoNLP主催  

•  Social  IME  /    StaKK開発者  

•  Web系ソフトウェアエンジニア  

•  「入門自然言語処理」  査読協力  

Page 4: Pythonによる日本語自然言語処理 #pyconjp

Python  2.X  における文字コード

Page 5: Pythonによる日本語自然言語処理 #pyconjp

Python  2.Xにおける文字コード

UTF-­‐8文字列  

Unicode文字列  

decode encode

ファイル  /  標準入出力

“こんにちは”

u”こんにちは”  

read   write  

Page 6: Pythonによる日本語自然言語処理 #pyconjp

鉄則1

ソースコードの頭には  

#  encoding:  utf-­‐8  を書く

Page 7: Pythonによる日本語自然言語処理 #pyconjp

鉄則2

文字列定数はu”  “でくくる  

Page 8: Pythonによる日本語自然言語処理 #pyconjp

鉄則3

入力はdecode,出力はencode

Page 9: Pythonによる日本語自然言語処理 #pyconjp

形態素解析してみよう!

Page 10: Pythonによる日本語自然言語処理 #pyconjp

自然言語処理とは?

10

基礎技術 意味解析

構文解析

形態素解析

応用技術 検索エンジン  

スペル訂正  

機械翻訳  

日本語入力  

人間が使う言語の処理を目的とする

Page 11: Pythonによる日本語自然言語処理 #pyconjp

MeCabによる形態素解析 •  形態素解析=分かち書き+品詞タグ付け

入力

出力

Page 12: Pythonによる日本語自然言語処理 #pyconjp

MeCabによる形態素解析

•  PythonからMeCabを扱うための準備  

– mecab,ipadic,  mecab-­‐pythonをインストール

Page 13: Pythonによる日本語自然言語処理 #pyconjp

MeCabによる形態素解析

•  単語ごとの情報を取り出す  

Page 14: Pythonによる日本語自然言語処理 #pyconjp

形態素解析を  作ってみよう!

Page 15: Pythonによる日本語自然言語処理 #pyconjp

形態素解析を作ってみよう!

•  目標:「くるまでまつ」を形態素解析  

– Analyzerクラスを実装

1.辞書を作成

2.単語を検索

3.解を探索

Page 16: Pythonによる日本語自然言語処理 #pyconjp

1.辞書を作成する

単語クラス

辞書

Page 17: Pythonによる日本語自然言語処理 #pyconjp

2.単語を検索する •  入力の全部分文字列を辞書引き  

– (トライというデータ構造で効率化可能)

Page 18: Pythonによる日本語自然言語処理 #pyconjp

3.解の探索(1)

•  グラフ上の探索問題に落としこむ

車  名詞

来る  動詞

で  助詞

間  名詞

待つ  動詞

文頭 文末

Page 19: Pythonによる日本語自然言語処理 #pyconjp

3.解の探索(2)

•  グラフ中で繋がる品詞ペアを限定する

Page 20: Pythonによる日本語自然言語処理 #pyconjp

3.解の探索(3)

•  辞書を検索してグラフを構築する

Page 21: Pythonによる日本語自然言語処理 #pyconjp

3.解の探索(4)

•  探索結果を列挙する(ここでは全探索)  

Page 22: Pythonによる日本語自然言語処理 #pyconjp

実行!

•  よくできました!

Page 23: Pythonによる日本語自然言語処理 #pyconjp

テキストマイニング  してみよう!

Page 24: Pythonによる日本語自然言語処理 #pyconjp

NLTKによる自然言語処理 •  NLTK(自然言語処理ツールキット)利用  

•  コーパスは青空文庫より「銀河鉄道の夜」

※一部の前処理を省略しています

Page 25: Pythonによる日本語自然言語処理 #pyconjp

NLTKによる自然言語処理

•  いろいろな機能を試してみる

Page 26: Pythonによる日本語自然言語処理 #pyconjp

回文マイニング •  読み情報を利用して回文かどうか判定

Page 27: Pythonによる日本語自然言語処理 #pyconjp

回文マイニング •  実行結果(コーパス:ベア速 凄い回文教えてくれ)

Page 28: Pythonによる日本語自然言語処理 #pyconjp

係り受け解析  してみよう!

Page 29: Pythonによる日本語自然言語処理 #pyconjp

CaboChaによる係り受け解析

Page 30: Pythonによる日本語自然言語処理 #pyconjp

おわりに

•  日本語処理はクセがあるけど,がんばりましょう

Page 31: Pythonによる日本語自然言語処理 #pyconjp

参考資料

•  「入門 自然言語処理」第12章  –  http://nltk.googlecode.com/svn/trunk/doc/book-­‐jp/ch12.html  

•  今日使用したソースコード  

–  https://github.com/nokuno/nokuno/tree/master/python/pyconjp  

Page 32: Pythonによる日本語自然言語処理 #pyconjp

Page 33: Pythonによる日本語自然言語処理 #pyconjp

自然言語処理とは?

意味解析

構文解析

形態素解析

33

今回扱う範囲

Page 34: Pythonによる日本語自然言語処理 #pyconjp

Python  2.Xにおける文字コード

•  内部:Unicode,外部:UTF-­‐8の場合

UTF-­‐8文字列  “こんにちは”

Unicode文字列  u”こんにちは”  

decode

encode

Page 35: Pythonによる日本語自然言語処理 #pyconjp

MeCabによる形態素解析 •  簡易的な解析  

Page 36: Pythonによる日本語自然言語処理 #pyconjp

NLTKによる自然言語処理

Page 37: Pythonによる日本語自然言語処理 #pyconjp

NLTKによる自然言語処理