« Natto で MeCab を試す | トップページ | 「コラテラル・ダメージ」 »

Natto と Ruby バインディングの使用感

 コードを比べると Natto のほうが楽に書けるのかもしれない。

 Natto を使うと、

require 'natto'

sentence = "太郎はこの本を二郎を見た女性に渡した。"

nm = Natto::MeCab.new
nm.parse(sentence) do |n|
print n.surface, "\t", n.feature, "\t", n.cost, "\n"
end

nm = Natto::MeCab.new('-F%m\t%f[0]\t%f[7]')
enum = nm.enum_parse(sentence)
enum.each {|n| puts n.feature if !n.is_eos? }

 とすると、

太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー 8614

は 助詞,係助詞,*,*,*,*,は,ハ,ワ 9699
この 連体詞,*,*,*,*,*,この,コノ,コノ 9755
本 名詞,一般,*,*,*,*,本,ホン,ホン 14548
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 13738
二 名詞,数,*,*,*,*,二,ニ,ニ 16665
郎 名詞,一般,*,*,*,*,郎,ロウ,ロー 21808
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 20998
見 動詞,自立,*,*,一段,連用形,見る,ミ,ミ 25194
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 22795
女性 名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ 25091
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 24938
渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ 28035
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 27158
。 記号,句点,*,*,*,*,。,。,。 23724
BOS/EOS,*,*,*,*,*,*,*,* 22188

太郎 名詞 タロウ
は 助詞 ハ
この 連体詞 コノ
本 名詞 ホン
を 助詞 ヲ
二 名詞 ニ
郎 名詞 ロウ
を 助詞 ヲ
見 動詞 ミ
た 助動詞 タ
女性 名詞 ジョセイ
に 助詞 ニ
渡し 動詞 ワタシ
た 助動詞 タ
。 記号 。

 といった結果が。

 一方で MeCab の Ruby バインディングを使うと、

require 'MeCab'

m = MeCab::Model.new().createTagger()
puts m.parse(sentence)

n = m.parseToNode(sentence)
while n do
print n.surface, "\t", n.feature, "\t", n.cost, "\n"
n = n.next
end

太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー

は 助詞,係助詞,*,*,*,*,は,ハ,ワ
この 連体詞,*,*,*,*,*,この,コノ,コノ
本 名詞,一般,*,*,*,*,本,ホン,ホン
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
二 名詞,数,*,*,*,*,二,ニ,ニ
郎 名詞,一般,*,*,*,*,郎,ロウ,ロー
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
見 動詞,自立,*,*,一段,連用形,見る,ミ,ミ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
女性 名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 記号,句点,*,*,*,*,。,。,。
EOS

BOS/EOS,*,*,*,*,*,*,*,* 0
太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー 8614
は 助詞,係助詞,*,*,*,*,は,ハ,ワ 9699
この 連体詞,*,*,*,*,*,この,コノ,コノ 9755
本 名詞,一般,*,*,*,*,本,ホン,ホン 14548
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 13738
二 名詞,数,*,*,*,*,二,ニ,ニ 16665
郎 名詞,一般,*,*,*,*,郎,ロウ,ロー 21808
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 20998
見 動詞,自立,*,*,一段,連用形,見る,ミ,ミ 25194
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 22795
女性 名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ 25091
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 24938
渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ 28035
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 27158
。 記号,句点,*,*,*,*,。,。,。 23724
BOS/EOS,*,*,*,*,*,*,*,* 22188

 という感じに。

 Natto を使うと基本的に Natto::MeCab.new だけすれば、あとは Node ごとに処理するにしても、enum_parse() ですむ。バインディングのほうだと Model を生成して tagger を生成して、Node でパースしてみたいな繰り返しでいろいろ長くなってしまう。

 用途にもよるのかもしれないけれど、あまりこだわったことをしないのならば、Natto を使うほうがシンプルで楽かもしれない。

 用例がまったく同じとはいえないので微妙なところはあるけれど。なんとなく。

Natto で MeCab を試す: つらつらぐさ
久々に MeCab.so を作ろうとしたらいろいろ大変だった(at Windows): つらつらぐさ

|

« Natto で MeCab を試す | トップページ | 「コラテラル・ダメージ」 »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: Natto と Ruby バインディングの使用感:

« Natto で MeCab を試す | トップページ | 「コラテラル・ダメージ」 »