pythonによる日本語自然言語処理 #pyconjp
TRANSCRIPT
Pythonによる 日本語自然言語処理
@nokuno
#pyconjp
発表の流れ
• Python 2.Xにおける文字コード
• 形態素解析してみよう!
• 形態素解析を作ってみよう!
• テキストマイニングしてみよう!
• 係り受け解析してみよう!
自己紹介
• @nokuno / id:nokuno
• #TokyoNLP主催
• Social IME / StaKK開発者
• Web系ソフトウェアエンジニア
• 「入門自然言語処理」 査読協力
Python 2.X における文字コード
Python 2.Xにおける文字コード
UTF-‐8文字列
Unicode文字列
decode encode
ファイル / 標準入出力
“こんにちは”
u”こんにちは”
read write
鉄則1
ソースコードの頭には
# encoding: utf-‐8 を書く
鉄則2
文字列定数はu” “でくくる
鉄則3
入力はdecode,出力はencode
形態素解析してみよう!
自然言語処理とは?
10
基礎技術 意味解析
構文解析
形態素解析
応用技術 検索エンジン
スペル訂正
機械翻訳
日本語入力
人間が使う言語の処理を目的とする
MeCabによる形態素解析 • 形態素解析=分かち書き+品詞タグ付け
入力
出力
MeCabによる形態素解析
• PythonからMeCabを扱うための準備
– mecab,ipadic, mecab-‐pythonをインストール
MeCabによる形態素解析
• 単語ごとの情報を取り出す
形態素解析を 作ってみよう!
形態素解析を作ってみよう!
• 目標:「くるまでまつ」を形態素解析
– Analyzerクラスを実装
1.辞書を作成
2.単語を検索
3.解を探索
1.辞書を作成する
単語クラス
辞書
2.単語を検索する • 入力の全部分文字列を辞書引き
– (トライというデータ構造で効率化可能)
3.解の探索(1)
• グラフ上の探索問題に落としこむ
車 名詞
来る 動詞
で 助詞
間 名詞
待つ 動詞
文頭 文末
3.解の探索(2)
• グラフ中で繋がる品詞ペアを限定する
3.解の探索(3)
• 辞書を検索してグラフを構築する
3.解の探索(4)
• 探索結果を列挙する(ここでは全探索)
実行!
• よくできました!
テキストマイニング してみよう!
NLTKによる自然言語処理 • NLTK(自然言語処理ツールキット)利用
• コーパスは青空文庫より「銀河鉄道の夜」
※一部の前処理を省略しています
NLTKによる自然言語処理
• いろいろな機能を試してみる
回文マイニング • 読み情報を利用して回文かどうか判定
回文マイニング • 実行結果(コーパス:ベア速 凄い回文教えてくれ)
係り受け解析 してみよう!
CaboChaによる係り受け解析
おわりに
• 日本語処理はクセがあるけど,がんばりましょう
参考資料
• 「入門 自然言語処理」第12章 – http://nltk.googlecode.com/svn/trunk/doc/book-‐jp/ch12.html
• 今日使用したソースコード
– https://github.com/nokuno/nokuno/tree/master/python/pyconjp
完
自然言語処理とは?
意味解析
構文解析
形態素解析
33
今回扱う範囲
Python 2.Xにおける文字コード
• 内部:Unicode,外部:UTF-‐8の場合
UTF-‐8文字列 “こんにちは”
Unicode文字列 u”こんにちは”
decode
encode
MeCabによる形態素解析 • 簡易的な解析
NLTKによる自然言語処理
NLTKによる自然言語処理