nltk for biginer

Post on 05-Jul-2015

11.895 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

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 著萩原 正人、中山 敬広、水野 貴明 訳

おわり

ご清聴ありがとうございました。

top related