読者です 読者をやめる 読者になる 読者になる

Gomoku: 辞書込みの形態素解析器

common lisp Java library

IgoをベースにしてJARファイルに辞書データを同梱した形態素解析器を作成した。
名前は同系統のGomoku(ver 0.0.1)

特徴

開発コンセプト(?)は「JARファイルのみで形態素解析」と「サイズを(比較的)小さく」の二点。
このJARファイル一つで形態素解析が行える(外部の辞書データ不要)、という点が最大の特徴。
ただし、その分辞書のカスタマイズ性には乏しい。
※ 辞書を変更する場合はjarファイルごと取り替える必要がある


その他の特徴を列挙:

  • 辞書データサイズがIgoより小さい
    • 辞書込みJARファイルのサイズは4MB程度。解凍時は10MB程度*1※ Igoは辞書サイズは40MB程度
    • 辞書のデータサイズを節約するために、形態素の素性から品詞以外の情報を除外
      • そのため原型や読み等の情報を解析結果から得ることは不可能
  • (デフォルトの)辞書にはIPADIC(mecab-ipadic-2.7.0-20070801)を使用
    • 現状IPADICに特化 ※ 他の辞書での動作は未確認。動かないということはないと思うけど・・・
  • テキスト辞書からバイナリ辞書を構築する処理はCommon Lispで記述
    • 辞書をカスタマイズする場合はSBCL(Common Lisp処理系)が必要
  • 形態素の辞書引き用のデータ構造にはDAWG(Double-Array)を使用
  • 解析結果はIgo互換 ※ 素性情報に品詞しか含まない点を除いて

試してはいないけどGoogle App Engine上でも問題なく動作するはず。

使用例

使用例:

# jarファイル取得
$ wget --no-check-certificate https://github.com/downloads/sile/gomoku/gomoku-0.0.1.jar
$ ls -lh gomoku-0.0.1.jar
-rw-r--r-- 1 user user 3.9M 2011-01-24 22:04 gomoku-0.0.1.jar

# 形態素解析
$ echo すもももももももものうち | java -cp gomoku-0.0.1.jar net.reduls.gomoku.bin.Gomoku
すもも	名詞,一般,*,*,*,*
も	助詞,係助詞,*,*,*,*
もも	名詞,一般,*,*,*,*
も	助詞,係助詞,*,*,*,*
もも	名詞,一般,*,*,*,*
の	助詞,連体化,*,*,*,*
うち	名詞,非自立,副詞可能,*,*,*
EOS

# 分かち書き
$ echo すもももももももものうち | java -cp gomoku-0.0.1.jar net.reduls.gomoku.bin.Gomoku -wakati
すもも も もも も もも の うち


Gomokuを使用したJavaプログラム例:

import java.util.List;
import net.reduls.gomoku.Tagger;
import net.reduls.gomoku.Morpheme;

public class GomokuSample {
  public static void main(String[] args) {
    final String text = args[0];
    
    List<Morpheme> result = Tagger.parse(text);
    for(Morpheme m : result)
      System.out.println(m.surface+"\t"+m.feature);
  }
}
# コンパイル
$ javac -cp gomoku-0.0.1.jar GomokuSample.java

# 実行: 第一引数で渡された文字列を形態素解析する
$ java -cp .:gomoku-0.0.1.jar GomokuSample すもももももももものうち
すもも	名詞,一般,*,*,*,*
も	助詞,係助詞,*,*,*,*
もも	名詞,一般,*,*,*,*
も	助詞,係助詞,*,*,*,*
もも	名詞,一般,*,*,*,*
の	助詞,連体化,*,*,*,*
うち	名詞,非自立,副詞可能,*,*,*

まだソースコードとかがいろいろ未整理だけど、一応問題なく動作はしている(ように見える)

*1:2011/01/25追記: version-0.0.1では、JARファイルサイズが3.3MBで、解凍時が8.3MB。