Top Banner
にこにこテキストマイニング勉強会 初めての NLTK ーツイートでの累積頻度ー 早川 敦士
43

Nltk for biginer

Jul 05, 2015

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Nltk for biginer

にこにこテキストマイニング勉強会

初めての NLTKーツイートでの累積頻度ー

早川 敦士

Page 2: Nltk for biginer

http://www.slideshare.net/gepuro/に資料が公開されています。

Page 3: Nltk for biginer

AGENDA

●自己紹介●NLTKについて●ツイートの取得●MeCabでツイートの分かち書き●NLTKを用いて累積頻度プロット●参考資料

Page 4: Nltk for biginer

AGENDA

●自己紹介●NLTKについて●ツイートの取得●MeCabでツイートの分かち書き●NLTKを用いて累積頻度プロット●参考資料

Page 5: Nltk for biginer

自己紹介

早川 敦士電気通信大学電気通信学部システム工学科 二年

TwitterID: @gepuro

テキストマイニング初心者プログラミング初心者

Page 6: Nltk for biginer

AGENDA

●自己紹介●NLTKについて●ツイートの取得●MeCabでツイートの分かち書き●NLTKを用いて累積頻度プロット●参考資料

Page 7: Nltk for biginer

NLTKについて

Natural Language Toolkitの略

ペンシルバニア大学で、コンピュータ言語学コーパスの一部として作成

●単純化●一貫性●拡張性

●モジュール性

を目標にデザインされた。

Page 8: Nltk for biginer

NLTKについて

単純化

退屈で面倒な作業を少なくするユーザーへ NLPの実用知識を与える

直感的なフレームワーク

Page 9: Nltk for biginer

NLTKについて

一貫性

一貫したインターフェイスとデータ構造推測しやすいメソッド名

Page 10: Nltk for biginer

NLTKについて

拡張性

新しいソフトウェアモジュールが容易に対応可能であるような構造

Page 11: Nltk for biginer

NLTKについて

モジュール性

ツールキットの他の部分の理解を必要なしで、独立して利用できるコンポーネント

Page 12: Nltk for biginer

NLTKについて

要は、使いやすいように

作った

Page 13: Nltk for biginer

AGENDA

●自己紹介●NLTKについて●ツイートの取得●MeCabでツイートの分かち書き●NLTKを用いて累積頻度プロット●参考資料

Page 14: Nltk for biginer

ツイートの取得

ぺちゃくちゃ Reader で取得Windowsで使用可能です。

python-twitterなるものがあるそうだけど、知識不足の為、断念。一度目の挫折 orz

Page 15: Nltk for biginer

ツイートの取得

まずは、ダウンロード。しみず工房 http://pcbase.web.infoseek.co.jp/

過去の投稿を取得後、csvファイルに出力

Page 16: Nltk for biginer

ツイートの取得

csvファイルには、

●何番目のツイートか●発言ユーザー●ツイート内容

●ツイートの投稿時間●謎の数字

Page 17: Nltk for biginer

ツイートの取得

今回、使用した情報は、

自分のツイート内容です。投稿時間等の他の情報は使用しませんでした。

Page 18: Nltk for biginer

ツイートの取得

Pythonで csvを使おうとしたら苦戦しました。↓

Google Documentを使用した。

二度目の挫折 orz

Page 19: Nltk for biginer

ツイートの取得

必要な無いツイート以外の内容を削除したのち、tcv形式で出力しました。

これで、とりあえず一段落。

Page 20: Nltk for biginer

AGENDA

●自己紹介●NLTKについて●ツイートの取得●MeCabでツイートの分かち書き●NLTKを用いて累積頻度プロット●参考資料

Page 21: Nltk for biginer

MeCabで分かち書き

分かち書きするなら、MeCabでしょ!

Page 22: Nltk for biginer

MeCabで分かち書き

という訳で、MeCabのインストール

$ sudo apt-get install mecab

Ubuntu10.10で動作確認

Page 23: Nltk for biginer

MeCabで分かち書き

$ mecab -Owakati input.tcv -o twitter.txt

これで分かち書きされる。

Page 24: Nltk for biginer

AGENDA

●自己紹介●NLTKについて●ツイートの取得●MeCabでツイートの分かち書き●NLTKを用いて累積頻度プロット●参考資料

Page 25: Nltk for biginer

NLTKを用いて累積頻度プロット

まずは、インストールを、

$ sudo apt-get install python-nltk

参考書を見ながら、プログラムを書いてみました。

Page 26: Nltk for biginer

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)

Page 27: Nltk for biginer

NLTKを用いて累積頻度プロット

Page 28: Nltk for biginer

NLTKを用いて累積頻度プロット

文字化け!!

Page 29: Nltk for biginer

NLTKを用いて累積頻度プロット

しかも、文字化けだけで無く、 y軸が割合では無く、

カウントで表示されている。

三度目の挫折 orz

Page 30: Nltk for biginer

NLTKを用いて累積頻度プロット

しかし、ここは譲ることができない。という訳で、

文字化けの修正と、 y軸を割合で表示できるようにしました。

Page 31: Nltk for biginer

NLTKを用いて累積頻度プロット

どうやら、NLTKツールキットの内部的な問題なので、ライブラリにパッチを当ててみました。

Page 32: Nltk for biginer

NLTKを用いて累積頻度プロット

グラフ出力のメソッドは、/usr/lib/pymodules/python2.6/nltk/probability.py

を参照してます。

Page 33: Nltk for biginer

NLTKを用いて累積頻度プロット

変更した内容は、asciiコードでの処理を utf-8に変更

累積の割合で表示できるように、引数を追加フォントの指定による文字化けの回避です。

http://www.mma.club.uec.ac.jp/~hayakawa/nltk_probability_plot.txt

に掲載しました。

Page 34: Nltk for biginer

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単語でプロット

を実行しました。

Page 35: Nltk for biginer

NLTKを用いて累積頻度プロット

Page 36: Nltk for biginer

NLTKを用いて累積頻度プロット

助詞や句読点で大半を占めていることが分かる。自分のツイートの特徴的なものが

出てこなかった。

Page 37: Nltk for biginer

NLTKを用いて累積頻度プロット

そこで、上位 100語を出力してみた。fdist.tabulate(100)で表示される。

Page 38: Nltk for biginer

NLTKを用いて累積頻度プロット

特徴的な語は、

Http,今日、何、時間、僕、勉強、 R、 fkhr、mlka、けど、良い、アニメ、明日

頻度順

Page 39: Nltk for biginer

NLTKを用いて累積頻度プロット

アニメ!

Page 40: Nltk for biginer

NLTKを用いて累積頻度プロット

しかし、アニメより、勉強という語の方が出現頻度が高くて、

安心しました。

Page 41: Nltk for biginer

AGENDA

●自己紹介●NLTKについて●ツイートの取得●MeCabでツイートの分かち書き●NLTKを用いて累積頻度プロット●参考資料

Page 42: Nltk for biginer

参考資料

出版  O'RELLY 入門 自然言語処理

Steven Bird, Ewan Klein, Edward Loper 著萩原 正人、中山 敬広、水野 貴明 訳

Page 43: Nltk for biginer

おわり

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