>トップ
JTokenizer
形態素解析らしきようなことは一切してません。パターンマッチだけ
あらかじめ trie をデータベース化しているので起動時のオーバヘッドがありません
ダウンロード
つかいかた
- ruby 1.9 に依存してます。たぶん
- sqlite3-ruby に依存してるので、gem なりなんなりでインストール
- アーカイブを展開
- NAIST-jdic から mecab-naist-jdic(特に理由がなければ最新版でいいでしょう)をダウンロード、展開
- mktbl.rb と同じディレクトリに、mecab-naist-jdic から naist-jdic.csv をコピーする(シンボリックリンクでもよい)
- mktbl.rb を実行する。かなり時間がかかります。jtokenizer というディレクトリに trie.db という SQLite のデータベースファイルが作られます
- そのまま require_relative で require しても使えますが、インストールするなら jtokenizer.rb とディレクトリ jtokenizer を RbConfig::CONFIG["sitelibdir"]( /usr/local/lib/ruby/site_ruby/1.9.1 とか)にコピーする
その他注意事項
- いわゆる全角英数字などは、全部いわゆる半角にしてから食わせてください。データベース構築時に内部で使用している JTokenizer.zenkaku2hankaku を利用すると良いでしょう
サンプルプログラムと実行例
# coding: utf-8
require "jtokenizer"
tokenizer = JTokenizer::JTokenizer.new
begin
p tokenizer.prefixes "はじめまして山田太郎です"
p tokenizer.prefixes "ぁゃιぃ"
ensure
tokenizer.close
end
$ ruby19 hoge.rb
["は", "はじ", "はじめ", "はじめまして"]
[]
予想される Q&A
- Q. 文字コードは UTF-8 だけ? A. 今のところそういうふうに決め打ちしちゃってます
- Q. 他の辞書は使えないの? A. mktbl.rb を改造すればできます。というかリファクタリングして辞書エントリの読み込みと trie の構築をもっとすっきり分ければいいんですがまだやってません
- Q. JTokenizer::JTokenizer#prefixes 以外のメソッドとかは? 非公認扱いということにしておいてください。中身見て勝手に使ってくれてかまいませんが、後のバージョンで変更がある可能性は十分にあるということで
- Q. 文全体を解析して配列に入れて返してくれるとか、そういうメソッドはないの? A. 考えてはいるのですが、単純なパターンマッチのため最長一致法ではかなり悲惨な結果になります。分割数最小法を使うとそこそこ見られる結果になりますが、候補が唯一になりません(辞書に接続コストのデータがあるのでそれ使えばいいんですが、使ってないので)。複数の候補がある場所が複数あると組み合わせが爆発しますので、単純に配列の配列で全候補を返すわけにもいかなくなります。そんなわけで、検討中のためリリースしません