GAE/Javaで、形態素解析のオープンソースを触ってみた。

というわけで、本エントリーは、google app engine java形態素解析が出来るオープンソースを使ってみたという内容。

Igoとは

Javaで実装された形態素解析器。→ Common Lisp
辞書フォーマット及び解析結果は、ほぼMeCab互換。
単機能。
Java形態素解析器としては比較的高速。
スレッドセーフ。

Igo GAE は、GAE対応版。sileさんが対応させた様である。

感想

とても簡単に形態素解析が実現できた!便利だと思った!
導入も手順さえ分かっていれば、すぐに利用することも出来る!(あまり理解できておらず、つまづきました^^;)
yahooAPIで、形態素解析が提供されているが、制限がかかっているので、
Igoは気兼ねなく使える。
(yahooの制限⇒24時間以内で1つのアプリケーションIDにつき50000件のリクエスト,1リクエストの最大サイズを100KBに制限etc)

形態素解析とは

コンピュータ等の計算機を用いた自然言語処理の基礎技術のひとつ

対象言語の文法の知識(文法のルールの集まり)や辞書(品詞等の情報付きの単語リスト)を情報源として用い、
自然言語で書かれた文を形態素(Morpheme, おおまかにいえば、言語で意味を持つ最小単位)の列に分割し、
それぞれの品詞を判別する作業を指す。

・辞書を用いて、自然言語を品詞に分けてくれたりしてくれる。
・人口無能を作成するときに、利用したりする人が多い。・・・はず。

形態素解析を利用すれば、
はてなブログの「最近言及したキーワード」的なものが作れると思ってる。
(投稿したブログ内容を形態素解析して、名詞だけを抽出すれば作れると思っている)

ということで、あまり詳しいことはわかってないんだお( ^ω^)

わかち書き(わかちがき)とは、

文章において語の区切りに空白を挟んで記述することである。
分かち書き・分ち書き・別ち書きとも表記する。

公式のindexページ

https://github.com/sile/igo-gae

ダウンロード

1.サンプル&igoのgae版のjarをダウンのロード
https://github.com/sile/igo-gae
Downloadsをクリック

2.辞書のダウンロード
http://sourceforge.net/projects/mecab/files/mecab-ipadic/2.7.0-20070801/
mecab-ipadic-2.7.0-20070801.tar.gzをクリック

インストール

1.igo-0.4.2-gae.jarをクラスパスに通す。
ダウンロードしたファイルを解凍する。
war\WEB-INF\libにあるigo-0.4.2-gae.jarをクラスパスに通す。

2.warフォルダ直下にipadic(こいつが辞書や!)を配置する。
ipadicの作成方法は下記参照

ipadic(辞書)の作成方法

以下のコマンドを打ちます。

	java -cp igo-0.4.2-gae.jar net.reduls.igo.bin.BuildDic ipadic mecab-ipadic-2.7.0-20070801 EUC-JP

IPA辞書はEUC-JPでファイルを用意しているので、ここでの指定はEUC-JP一択です。
らしいです。はい。

javadoc

恐らく下記ページの箇所
http://igo.sourceforge.jp/#api

サンプル1

http://it-tech-dm.appspot.com/igo/igo1

surface形態素の表記を返します。
feature:形態素の全情報を文字列で返します。

	public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		res.setContentType("text/plain; charset=UTF-8");
		
		PrintWriter out = res.getWriter();
		out.println("★ハローワールドを形態素解析★");
		out.println();
		
		Tagger tagger = new Tagger("ipadic/");
		List<Morpheme> parse = tagger.parse("ハローワールド");
		for (Morpheme morpheme:parse) {
			out.println(morpheme.surface + "⇒" + morpheme.feature);
		}
	}

もういっちょサンプル。

http://it-tech-dm.appspot.com/igo/igo2

	public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		res.setContentType("text/plain; charset=UTF-8");
		String morphemeStr = "プロゴルファー石川遼選手も「聞き流すだけ」で英語が話せた!!";
		PrintWriter out = res.getWriter();
		out.println("★"+ morphemeStr + "を形態素解析★");
		out.println("文言URL:http://www.espritline.co.jp/ad_af_net205/sle42-2-h6/?PHPSESSID=4f59a3b2697dddf16d7faddc7906edad");
		out.println();
		
		Tagger tagger = new Tagger("ipadic/");
		List<Morpheme> parse = tagger.parse(morphemeStr);
		for (Morpheme morpheme:parse) {
			out.println(morpheme.surface + "\t" + morpheme.feature);
		}
	}
 
        //ダウンロードした中にもサンプルがあるので実行するべし。実行するべし。