Transcript
第 3 回さくさくテキストマイニング勉強会
テキストマイニングの前のコーパス収集
早川 敦士
AGENDA
●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料
AGENDA
●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料
自己紹介
早川 敦士電気通信大学電気通信学部
システム工学科 三年TwitterID: @gepuro
統計に興味津々なお年頃コンピュータサークルに所属今年から英語サークルにも
テキストマイニング初心者
自己紹介
はてなダイアリーhttp://d.hatena.ne.jp/gepuro/
サークルMicrocomputer Making Association
http://wiki.mma.club.uec.ac.jp/http://wiki.mma.club.uec.ac.jp/hayakawa
AGENDA
●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料
前回の振り返り
●第二回さくさくテキストマイニング勉強会では、 NLTKを使用して条件付き頻度分布を作成した。
●条件付きとは、異なる条件ごとに計算されていることを意味する。
●Twitter のパブリックタイムラインと自分の TL の比較を行った。
条件付き頻度分布のプロット
前回の振り返り
●苦労した事
●Twitterからデータを取得するのに、予想以上の時間がかかったこと。
●分析対象としていないデータを取り除くこと(日本語の抽出、ノイズの除去)
そこで、今回はコーパス収集を目的に発表させて頂きます。
AGENDA
●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料
テキストマイニングに必要なもの
●テキストマイニングを行う前には、大量のテキストデータを必要とする。
●しかしながら、これらを取得するには手間がかかる。
●身近なテキストデータを手軽に取得したい!
テキストマイニングに必要なもの
身近なテキストデータの例
Twitterブログ
wikipediaニュースサイト
2ch 等の掲示板などなど・・・
今回は、ブログ、ニュース、 2ch 、 pdf からコーパスを集めてみました。
AGENDA
●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料
はてなダイアリーから
はてなダイアリーでは、最近更新のあったブログをxml形式で公開しています。
http://d.hatena.ne.jp/changes.xml
他には、はてなキーワードAPIやキーワード連想語APIなどを公開しています。
このxmlファイルからはてなダイアリーのURLを取得して、巡回します。
xmlは EXtensible Markup Language の略
はてなダイアリーから
作成したプログラムは、
http://d.hatena.ne.jp/gepuro/20110604
に公開しています。
システムコールを使用したので、linuxからでないと使えないです。windowsから使用する場合は、xml取得の箇所を変更してください。
はてなダイアリーから
取得の流れ
1.はてなダイアリーの更新順一覧をダウンロード
2.リンク部分を解析
3.リンク先のブログへアクセス
4.ブログ内のリンクを解析し、各記事をダウンロードする。
AGENDA
●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料
googlenews から
googleニュースでは、最新トピック等をRSSで取得することができる。
http://news.google.com/news?ned=us&ie=UTF-8&oe=UTF-8&q=&output=atom&num=30&hl=ja
また、Yahoo!JAPAN では、 http://public.news.yahoo.co.jp/rss/
でニュースを取得することができる。
googlenews から
作成したプログラムは、
http://d.hatena.ne.jp/gepuro/20110604/1307146937
に公開しました。
プログラムの流れ
googlenews の RSSを取得したのち、そこに示されるページにアクセスする。
Pythonで、 feedparser というライブラリを使用する事によって、RSSを取得した。
AGENDA
●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料
2ch から
カテゴリ毎にスレッド一覧を得る事ができる。 例: http://kamome.2ch.net/anime/subback.html
ここに示されるスレッドを巡回して、コーパスを収集した
作成したプログラムは、
http://d.hatena.ne.jp/gepuro/20110604/1307146938
に公開しました。
2ch から
2ch等の掲示板では、投稿者名(例:名無し)や投稿日時などが大量に含まれているので、解析する前にこれらの情報を取り除いた方が良いケースがあるので、注意するべき。
AA(アスキーアート)を正確に解析できるようになれたら良いですね。良い方法がありましたら、ご教授願います。
何もしない状態では、記号ばかりが混入してしまいます。
AGENDA
●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料
pdf から
Pdfからテキストデータを抽出する。 PDFMinerを使用しました。 http://www.unixuser.org/~euske/python/pdfminer/index.html
使い方
$ pdf2txt -o output.txt input.pdf
また、
$pdf2txt -o output.html input.pdf
とすることで、html形式に出力することもできる。
pdf から
PDFMinerのインストール方法
# easy_install pdfminer
または、
公式サイトよりソフトウェアをダウンロードして、インストールする。
AGENDA
●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料
ゴミ取りの例
今回書いたスクリプトによって、収集したhtmlファイルを解析できる状態にする
htmlファイルより正規表現を使って
のようにしてタグの削除すと、 <script>...</script>の...部分が残ってしまった。
p = re.compile(r'<.*?>')text = p.sub('',html)
ゴミ取りの例
htmlファイルに対して、直接 MeCabにかけて、タグ等をバラバラにする。
その後、各行ごとに対して、日本語かどうかを判別して、タグ等の情報を取り除いた。
作成したプログラムは
http://d.hatena.ne.jp/gepuro/20110604/1307151973
に公開しました。
ゴミ取りの例
とても高い精度で、htmlに含まれる必要の無い情報を削除することができた。
デメリット:削除するべきで無い英語が削除される。
日本語だけを残すには、文字コードを使用した判別した。
「 ISO 8859」という文字コードに変更できない、かつ、shift-jisに変更できる。
この状態では、「」や。のような句読点が含まれたままなので、解析にかける前にさらにゴミ取りをする必要がある。
ゴミ取りの例
とても高い精度で、htmlに含まれる必要の無い情報を削除することができた。
デメリット:削除するべきで無い英語が削除される。
日本語だけを残すには、文字コードを使用した判別した。
「 ISO 8859」という文字コードに変更できない、かつ、shift-jisに変更できる。
この状態では、「」や。のような句読点が含まれたままなので、解析にかける前にさらにゴミ取りをする必要がある。
ゴミ取りの例
Pythonでは、 Beatutiful Soupや lxmlのように、htmlファイルを扱う為のライブラリがあります。
lxmlで、 htmlタグの削除を行いましたが、 <script>の部分が残ってしまいました。
Beatutiful Soupでは試していません。
参考資料
出版 O'RELLY 入門 自然言語処理
Steven Bird, Ewan Klein, Edward Loper 著萩原 正人、中山 敬広、水野 貴明 訳
おわり
ご清聴ありがとうございました。
top related