Collecting corpus

34
3 回さくさくテキストマイニング勉強会 テキストマイニングの前の コーパス収集 早川 敦士

description

 

Transcript of Collecting corpus

Page 1: Collecting corpus

第 3 回さくさくテキストマイニング勉強会

テキストマイニングの前のコーパス収集

早川 敦士

Page 2: Collecting corpus

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

Page 3: Collecting corpus

AGENDA

●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料

Page 4: Collecting corpus

AGENDA

●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料

Page 5: Collecting corpus

自己紹介

早川 敦士電気通信大学電気通信学部

システム工学科 三年TwitterID: @gepuro

統計に興味津々なお年頃コンピュータサークルに所属今年から英語サークルにも

テキストマイニング初心者

Page 6: Collecting corpus

自己紹介

はてなダイアリーhttp://d.hatena.ne.jp/gepuro/

サークルMicrocomputer Making Association

http://wiki.mma.club.uec.ac.jp/http://wiki.mma.club.uec.ac.jp/hayakawa

Page 7: Collecting corpus

AGENDA

●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料

Page 8: Collecting corpus

前回の振り返り

●第二回さくさくテキストマイニング勉強会では、 NLTKを使用して条件付き頻度分布を作成した。

●条件付きとは、異なる条件ごとに計算されていることを意味する。

●Twitter のパブリックタイムラインと自分の TL の比較を行った。

Page 9: Collecting corpus

条件付き頻度分布のプロット

Page 10: Collecting corpus

前回の振り返り

●苦労した事

●Twitterからデータを取得するのに、予想以上の時間がかかったこと。

●分析対象としていないデータを取り除くこと(日本語の抽出、ノイズの除去)

そこで、今回はコーパス収集を目的に発表させて頂きます。

Page 11: Collecting corpus

AGENDA

●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料

Page 12: Collecting corpus

テキストマイニングに必要なもの

●テキストマイニングを行う前には、大量のテキストデータを必要とする。

●しかしながら、これらを取得するには手間がかかる。

●身近なテキストデータを手軽に取得したい!

Page 13: Collecting corpus

テキストマイニングに必要なもの

身近なテキストデータの例

Twitterブログ

wikipediaニュースサイト

2ch 等の掲示板などなど・・・

今回は、ブログ、ニュース、 2ch 、 pdf からコーパスを集めてみました。

Page 14: Collecting corpus

AGENDA

●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料

Page 15: Collecting corpus

はてなダイアリーから

はてなダイアリーでは、最近更新のあったブログをxml形式で公開しています。

http://d.hatena.ne.jp/changes.xml

他には、はてなキーワードAPIやキーワード連想語APIなどを公開しています。

このxmlファイルからはてなダイアリーのURLを取得して、巡回します。

xmlは EXtensible Markup Language の略

Page 16: Collecting corpus

はてなダイアリーから

作成したプログラムは、

http://d.hatena.ne.jp/gepuro/20110604

に公開しています。

システムコールを使用したので、linuxからでないと使えないです。windowsから使用する場合は、xml取得の箇所を変更してください。

Page 17: Collecting corpus

はてなダイアリーから

取得の流れ

1.はてなダイアリーの更新順一覧をダウンロード

2.リンク部分を解析

3.リンク先のブログへアクセス

4.ブログ内のリンクを解析し、各記事をダウンロードする。

Page 18: Collecting corpus

AGENDA

●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料

Page 19: Collecting corpus

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/

でニュースを取得することができる。

Page 20: Collecting corpus

googlenews から

作成したプログラムは、

http://d.hatena.ne.jp/gepuro/20110604/1307146937

に公開しました。

プログラムの流れ

googlenews の RSSを取得したのち、そこに示されるページにアクセスする。

Pythonで、 feedparser というライブラリを使用する事によって、RSSを取得した。

Page 21: Collecting corpus

AGENDA

●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料

Page 22: Collecting corpus

2ch から

カテゴリ毎にスレッド一覧を得る事ができる。 例: http://kamome.2ch.net/anime/subback.html

ここに示されるスレッドを巡回して、コーパスを収集した

作成したプログラムは、

http://d.hatena.ne.jp/gepuro/20110604/1307146938

に公開しました。

Page 23: Collecting corpus

2ch から

2ch等の掲示板では、投稿者名(例:名無し)や投稿日時などが大量に含まれているので、解析する前にこれらの情報を取り除いた方が良いケースがあるので、注意するべき。

AA(アスキーアート)を正確に解析できるようになれたら良いですね。良い方法がありましたら、ご教授願います。

何もしない状態では、記号ばかりが混入してしまいます。

Page 24: Collecting corpus

AGENDA

●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料

Page 25: Collecting corpus

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形式に出力することもできる。

Page 26: Collecting corpus

pdf から

PDFMinerのインストール方法

# easy_install pdfminer

または、

公式サイトよりソフトウェアをダウンロードして、インストールする。

Page 27: Collecting corpus

AGENDA

●自己紹介●前回の振り返り●テキストマイニングに必要なもの●はてなダイアリーから●google news から●2ch から●pdf から●ゴミ取りの例●参考資料

Page 28: Collecting corpus

ゴミ取りの例

今回書いたスクリプトによって、収集したhtmlファイルを解析できる状態にする

htmlファイルより正規表現を使って

のようにしてタグの削除すと、 <script>...</script>の...部分が残ってしまった。

p = re.compile(r'<.*?>')text = p.sub('',html)

Page 29: Collecting corpus

ゴミ取りの例

htmlファイルに対して、直接 MeCabにかけて、タグ等をバラバラにする。

その後、各行ごとに対して、日本語かどうかを判別して、タグ等の情報を取り除いた。

作成したプログラムは

http://d.hatena.ne.jp/gepuro/20110604/1307151973

に公開しました。

Page 30: Collecting corpus

ゴミ取りの例

とても高い精度で、htmlに含まれる必要の無い情報を削除することができた。

デメリット:削除するべきで無い英語が削除される。

日本語だけを残すには、文字コードを使用した判別した。

「 ISO 8859」という文字コードに変更できない、かつ、shift-jisに変更できる。

この状態では、「」や。のような句読点が含まれたままなので、解析にかける前にさらにゴミ取りをする必要がある。

Page 31: Collecting corpus

ゴミ取りの例

とても高い精度で、htmlに含まれる必要の無い情報を削除することができた。

デメリット:削除するべきで無い英語が削除される。

日本語だけを残すには、文字コードを使用した判別した。

「 ISO 8859」という文字コードに変更できない、かつ、shift-jisに変更できる。

この状態では、「」や。のような句読点が含まれたままなので、解析にかける前にさらにゴミ取りをする必要がある。

Page 32: Collecting corpus

ゴミ取りの例

Pythonでは、 Beatutiful Soupや lxmlのように、htmlファイルを扱う為のライブラリがあります。

lxmlで、 htmlタグの削除を行いましたが、 <script>の部分が残ってしまいました。

Beatutiful Soupでは試していません。

Page 33: Collecting corpus

参考資料

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

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

Page 34: Collecting corpus

おわり

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