テキストマイニングをやってみる1日目

はてなブログが使いづらいことがわかったのでダイアリーに移行します。
(旧記事:宅浪とフリーランスを無理矢理結んでみた。
ダイヤリーも使い慣れてないので記法等めちゃくちゃかも知れませんがご容赦ください。


テキストマイニングをやりますとは言ったものの、結局お前何やんの?と言われそうなので本から定義を引っ張ってきた。

テキストマイニングは、テキストデータを計算機で定量的に解析して有用な情報を抽出するためのさまざまな方法の総称であり、自然言語処理、統計解析、データマイニングなどの基盤技術の上に成り立っている。
人文・社会科学のためのテキストマイニングより

要するに、
テキスト(文章)をいろんな角度から見ることで新しい発見がないかどうかを探す技術
だと思う。

現状で自分が持っているスキル、学力のうちに「自然言語処理」「統計解析」「データマイニング」のいずれも含まれていないのでこれから少しずつ学んでいこうと思う。

とりあえずテキストマイニングに関してどんな方法を取ればいいのかについてテキストからの引用。

人文・社会科学のためのテキストマイニング P78

ステップ1.データの作成 データセット、属性を選択して、データを作成する。
ステップ2.データの前処理 データに含まれるノイズ、外れ値、欠損値の処理を行う。
ステップ3.データの変換 次元の縮約、属性の選択を行いデータを変換する。
ステップ4.データマイニング データマイニングアルゴリズムを適用して、データから統計的パターンを見つける。
ステップ5.検証と評価 得られた統計的パターンを検証して有用な知識を得る。必要に応じて上記1.〜4.のプロセスを繰り返す。

テキストデータの統計科学入門 P11

  1. テキストの電子化
  2. クリーニング
  3. テキストの加工(記号・文字単位、形態素解析構文解析
  4. データの抽出
  5. データの分析

昨日紹介した2冊に載っているものを引用してみたのだが、どちらも似たようなステップで行うように書かれている。データをパソコンで扱える形にして、扱いやすいように整えて、変換・加工をして、データマイニングをして、分析や検証をする。

今回対象としたデータは、卒論のテーマとしても扱った「授業実況」のツイートである。ハッシュタグをつけて授業内容について連続ツイートをしていった自分自身の授業実況ツイートをテキストマイニングの題材にしようと思う。現時点でTwilogにデータが揃っているので今回は第1ステップは無し。第2ステップのクリーニングから行いたいと思う。


さて。まずはデータの回収から。
http://twilog.org/sageszk/hashtags-led2011
本当はここのツイートを全部持ってきたい!のだがTwilogからダウンロード可能なのは保存されている全ログのみ。なのでTwilogに記録されている自分の過去ログ約65000件のツイートから#led2011のハッシュタグのついたツイートのみを抽出したい。テキストを扱うのにはPerlがいいよ、と前から教わっていたので「Perl 特定の文字列 抽出」と検索して出てきたものを適当に眺めるとこのようなものがあったのでやってみた。

Perlgrepする 指定した文字列を含む行を抽出
grepを実現するワンライナー(コマンドプロンプトから使う)
perl -ne "print if ( /search/ )" inputfile.txt > outputfile.txt

http://d.hatena.ne.jp/perlcodesample/20080204/1202136828

見た感じだとファイルは「〜.txt」のほうがよさそうなのでTwilogからダウンロードした.csvファイルをメモ帳に貼り付けてsageszkalltweet.txtとして保存。次にターミナルで以下のコマンドを入力。

$ perl -ne "print if(/#led2011/)"sageszkalltweet.txt > led2011.txt

元のファイルは.csvだが、今のMacExcelの環境だと何故か.csvのファイルをうまく扱えない。というわけでExcelでファイルを扱うためにカンマをTabに変換して.tsvのファイルとして保存したい。今度は「Perl 文字列 置換」などとググって出てきたものを利用。と思ったのだが、めんどくさそうな処理しかないので上のブログに書いてあった単語「ワンライナー」を加えてググると出てきたものがこれ。

Perl ワンライナー 勉強中。

文字列置換
foo.txtファイルの"foo"という文字列を全て"bar"に変更する。
$ perl -pi -e 's/foo/bar/g' foo.txt
バックアップ作成も同時に行いたい場合は以下のようにします。
$ perl -pi'*.back' -e 's/foo/bar/g' foo.txt
元ファイル名に.backが付いたファイルのバックアップが作成されます

http://www.webhtm.net/perl/oneliner/oneliner_useful.htm

一応バックアップあったほうがいいと思ってこれ。

$ perl -pi'*.back' -e 's/,/\t/g' led2011.txt

これでようやくExcelに#led2011を含むツイートのみが抽出できましたとさ。
結果的に718件のデータが抽出できたのだがtwilogには716件記録されているのでいくつかエラーデータがある様子。エラーのあったものは「-」記号を使ったもので3件検出できた(目測)。ただ、3/718だったので手直しでコピペを駆使してとりあえずデータ完成。
今回Twilogを使ってデータを収拾したので、日時とツイート内容のみのデータとなった。一応この段階でデータの前処理(クリーニング)まで終了しているのかな。


明日以降、本格的にツールを使ったり分析をしたりという感じになっていくと思うのだが、ぱっと思いつく限りでこんな感じのことをやっていきたいと思う。

  • 1ツイートあたりの文字数
  • 頻出語(特徴語)の抽出
  • 各回ごとのツイートの特徴と他の回との比較

思いついたら追加/削除していこう。


今日はとりあえずここまでにします。