nltk for biginer
TRANSCRIPT
にこにこテキストマイニング勉強会
初めての NLTKーツイートでの累積頻度ー
早川 敦士
http://www.slideshare.net/gepuro/に資料が公開されています。
AGENDA
●自己紹介●NLTKについて●ツイートの取得●MeCabでツイートの分かち書き●NLTKを用いて累積頻度プロット●参考資料
AGENDA
●自己紹介●NLTKについて●ツイートの取得●MeCabでツイートの分かち書き●NLTKを用いて累積頻度プロット●参考資料
自己紹介
早川 敦士電気通信大学電気通信学部システム工学科 二年
TwitterID: @gepuro
テキストマイニング初心者プログラミング初心者
AGENDA
●自己紹介●NLTKについて●ツイートの取得●MeCabでツイートの分かち書き●NLTKを用いて累積頻度プロット●参考資料
NLTKについて
Natural Language Toolkitの略
ペンシルバニア大学で、コンピュータ言語学コーパスの一部として作成
●単純化●一貫性●拡張性
●モジュール性
を目標にデザインされた。
NLTKについて
単純化
退屈で面倒な作業を少なくするユーザーへ NLPの実用知識を与える
直感的なフレームワーク
NLTKについて
一貫性
一貫したインターフェイスとデータ構造推測しやすいメソッド名
NLTKについて
拡張性
新しいソフトウェアモジュールが容易に対応可能であるような構造
NLTKについて
モジュール性
ツールキットの他の部分の理解を必要なしで、独立して利用できるコンポーネント
NLTKについて
要は、使いやすいように
作った
AGENDA
●自己紹介●NLTKについて●ツイートの取得●MeCabでツイートの分かち書き●NLTKを用いて累積頻度プロット●参考資料
ツイートの取得
ぺちゃくちゃ Reader で取得Windowsで使用可能です。
python-twitterなるものがあるそうだけど、知識不足の為、断念。一度目の挫折 orz
ツイートの取得
まずは、ダウンロード。しみず工房 http://pcbase.web.infoseek.co.jp/
過去の投稿を取得後、csvファイルに出力
ツイートの取得
csvファイルには、
●何番目のツイートか●発言ユーザー●ツイート内容
●ツイートの投稿時間●謎の数字
ツイートの取得
今回、使用した情報は、
自分のツイート内容です。投稿時間等の他の情報は使用しませんでした。
ツイートの取得
Pythonで csvを使おうとしたら苦戦しました。↓
Google Documentを使用した。
二度目の挫折 orz
ツイートの取得
必要な無いツイート以外の内容を削除したのち、tcv形式で出力しました。
これで、とりあえず一段落。
AGENDA
●自己紹介●NLTKについて●ツイートの取得●MeCabでツイートの分かち書き●NLTKを用いて累積頻度プロット●参考資料
MeCabで分かち書き
分かち書きするなら、MeCabでしょ!
MeCabで分かち書き
という訳で、MeCabのインストール
$ sudo apt-get install mecab
Ubuntu10.10で動作確認
MeCabで分かち書き
$ mecab -Owakati input.tcv -o twitter.txt
これで分かち書きされる。
AGENDA
●自己紹介●NLTKについて●ツイートの取得●MeCabでツイートの分かち書き●NLTKを用いて累積頻度プロット●参考資料
NLTKを用いて累積頻度プロット
まずは、インストールを、
$ sudo apt-get install python-nltk
参考書を見ながら、プログラムを書いてみました。
NLTKを用いて累積頻度プロット
#!/usr/bin/pythonimport sysimport nltkfrom nltk.book import *from nltk.corpus import PlaintextCorpusReaderreload(sys)sys.setdefaultencoding('utf-8')
corpus_root = '/home/dedicatus545/Dropbox/Documents/nlp/'wordlist = PlaintextCorpusReader(corpus_root,'twitter.txt',encoding='utf-8')
fdist = FreqDist(wordlist.words('twitter.txt'))fdist.plot(40,cumulative=True)
NLTKを用いて累積頻度プロット
NLTKを用いて累積頻度プロット
文字化け!!
NLTKを用いて累積頻度プロット
しかも、文字化けだけで無く、 y軸が割合では無く、
カウントで表示されている。
三度目の挫折 orz
NLTKを用いて累積頻度プロット
しかし、ここは譲ることができない。という訳で、
文字化けの修正と、 y軸を割合で表示できるようにしました。
NLTKを用いて累積頻度プロット
どうやら、NLTKツールキットの内部的な問題なので、ライブラリにパッチを当ててみました。
NLTKを用いて累積頻度プロット
グラフ出力のメソッドは、/usr/lib/pymodules/python2.6/nltk/probability.py
を参照してます。
NLTKを用いて累積頻度プロット
変更した内容は、asciiコードでの処理を utf-8に変更
累積の割合で表示できるように、引数を追加フォントの指定による文字化けの回避です。
http://www.mma.club.uec.ac.jp/~hayakawa/nltk_probability_plot.txt
に掲載しました。
NLTKを用いて累積頻度プロット
#!/usr/bin/pythonimport nltkfrom nltk.book import *from nltk.corpus import PlaintextCorpusReader
corpus_root = '/home/dedicatus545/Dropbox/Documents/nlp/'wordlist = PlaintextCorpusReader(corpus_root,'twitter.txt',encoding='utf-8')
fdist = FreqDist(wordlist.words('twitter.txt'))fdist.plot(40,cumulative=True,percent=True) #上位 40単語でプロット
を実行しました。
NLTKを用いて累積頻度プロット
NLTKを用いて累積頻度プロット
助詞や句読点で大半を占めていることが分かる。自分のツイートの特徴的なものが
出てこなかった。
NLTKを用いて累積頻度プロット
そこで、上位 100語を出力してみた。fdist.tabulate(100)で表示される。
NLTKを用いて累積頻度プロット
特徴的な語は、
Http,今日、何、時間、僕、勉強、 R、 fkhr、mlka、けど、良い、アニメ、明日
頻度順
NLTKを用いて累積頻度プロット
アニメ!
NLTKを用いて累積頻度プロット
しかし、アニメより、勉強という語の方が出現頻度が高くて、
安心しました。
AGENDA
●自己紹介●NLTKについて●ツイートの取得●MeCabでツイートの分かち書き●NLTKを用いて累積頻度プロット●参考資料
参考資料
出版 O'RELLY 入門 自然言語処理
Steven Bird, Ewan Klein, Edward Loper 著萩原 正人、中山 敬広、水野 貴明 訳
おわり
ご清聴ありがとうございました。