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"
endnm = 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
太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タローは 助詞,係助詞,*,*,*,*,は,ハ,ワ
この 連体詞,*,*,*,*,*,この,コノ,コノ
本 名詞,一般,*,*,*,*,本,ホン,ホン
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
二 名詞,数,*,*,*,*,二,ニ,ニ
郎 名詞,一般,*,*,*,*,郎,ロウ,ロー
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
見 動詞,自立,*,*,一段,連用形,見る,ミ,ミ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
女性 名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 記号,句点,*,*,*,*,。,。,。
EOSBOS/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): つらつらぐさ
| 固定リンク
コメント