2010-01-03 [長年日記]

[Ruby] chawan

chasen (形態素解析システム)を Ruby から使うには、yu-yan 作の gyokuro ライブラリが便利でずっと愛用していたのだが、最近の UTF-8 な chasen だと相性が悪いみたい。困ってても仕方ないので、とりあえず自作。chasen の受け皿として chawan と命名。

http://github.com/maiha/chawan

インストール

% gem install chawan

使い方

parse で Chawan::Node (形態素解析の1要素) の配列が返る。

require 'chawan'

nodes = Chawan.parse('本日は晴天なり')
# => [<名詞: '本日'>, <助詞: 'は'>, <名詞: '晴天'>, <助動詞: 'なり'>]

nodes.first.attributes
# => {"原形"=>"本日", "発音"=>"ホンジツ", "品詞細分類1"=>"副詞可能",...

Chawan::Node

インスタンスメソッド内容
category品詞"名詞"
word文字列"本日"
attributes解析情報のハッシュ{"原形"=>"本日", "発音"=>"ホンジツ",...
keys解析結果のキー情報["表層形", "品詞",...
vals解析結果の値情報["本日", "名詞",...
[]数値かキー名によるアクセサ

キー情報は直接文字列を利用しているので、値を直接比較して利用する。

Chawan.parse('本日は晴天なり').select{|node| node.category == '名詞'}.join
# => "本日晴天"

Analyzer

Chawan では利用する形態素解析エンジンを Analyzer として定義している。これは、chasen だけでなく mecab を同じように利用するためである。このエンジン切り替え時に Analyzer を意識しないで済むように、Chawa::Node では利用するキー情報を定数化せずに直接文字列を利用している。

Analyzerの切り替え

Chawan の "analyzer" メソッドで現在のデフォルトの Analyzer が返る。また、引数に名前を与えることで利用する Analyzer を明示できる。ちなみに、Chawan.parse は "analyzer.parse" への delegate である。

Chawan.analyzer(:mecab).parse('test')
=> [<名詞: 'test'>]

Chawan.analyzer(:chasen).parse('test')
=> [nil, nil, nil, nil]

Chawan と言いつつも、現在実装されてるのは MecabAnalyzer のみで、chasen はまだ利用できない。

TODO

  • ChasenAnalyzer
  • parse 結果への gateway interface
  • 外部コマンド実行処理を真面目に管理する

参考


サイト内検索 (by Google)

| JRuby | Rails | Berryz | ℃-ute | エッグ | jQuery |

過去

2010年
1月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

未来

コンタクト