開発
テキストマイニングの話
Takumi Yamashita
こんにちは、アルバイトスタッフの山下(琢)です。
今回は最近仕事でやっているテキストマイニングの話をしようと思います。
一口にテキストマイニングと言っても様々な用途があります。
twitterなどでよく見られる自分の普段の発言の出現度などを推し量るアプリなどもテキストマイニングの一種です。
http://textmining.userlocal.jp/
こちらのサイトでを使って自分twitterアカウントを解析するとこんな感じになります。
(ツッコミどころがないですね)
本題に入ります。
そもそもテキストマイニングとは何かと簡単に言いますと
『文字列の情報から、有用な情報を抜き出す』手法です。
一口に有用な情報を抜き出すと言いましても欲しい情報によってどんな手法を取るかは異なってきます。
しかし、文章を取り扱うという点において共通して必要する過程があります。
それが、構文解析です。
タイトルではテキストマイニングの話と書きましたが今回の本題は構文解析の話です。
構文解析には大きく分けて二種類あります。
- 数式やプログラミング言語のようなBNFで記述できるような言語の構文解析。
- 自然言語に対する構文解析。
テキストマイニングでは自然言語に対する処理を行うことが多いので後者の構文解析を行う事が多いでしょう。
しかし、自然言語の構文解析を自分で実装するとは果てしなく大変です。(前者でもプログラミング言語など大規模な言語の解析となるととてつもなく大変)
ところが世の中は便利なもので、自然言語に対する構文解析を行うツールやライブラリがいくつか存在しています。
※言語によって使うものが異なることに注意して下さい。
ということでそれらの紹介をいくつかしていきます。
- Python ( 参考:http://www.nltk.org/book-jp/ch12.html#id3 )
Pythonはデフォルトのライブラリで自然言語処理に強い - TreeTagger ( 参考:http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/ )
多言語に対応している品詞分解ソフト(これで品詞分解してから構文解析など使いみちがいくつか) - Enju ( 参考:http://kmcs.nii.ac.jp/enju/?lang=ja )
優秀な対英語構文解析ツール、述語―項グラフにする動作を高速で行ってくれる(公式には1文0.5秒程度と記載)
特にEnjuは入出力の形式をテキストやxmlで選べて、比較的使いやすす他言語と組み合わせがし易くオススメです。
(私はenjuに吐かせた構文解析の結果をc++で処理しています。)
実は単語だけ抜き出してなにかしら統計をとりたい…などの場合は、
英語の場合は空白区切りで単語と単語が分かれているので単語を分けて大文字小文字や記号を直すだけだったりします。
日本語の場合は接続詞の存在で単語を区切っているのでまた変わってきます。
ということで本格的なテキストマイニングをはじめたい方は、まずは構文解析から手を出してみてはいかがでしょうか。