質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Q&A

解決済

2回答

4196閲覧

mecabをnattoで使う方法

hfhff

総合スコア8

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

0グッド

0クリップ

投稿2015/05/08 18:00

文章から名詞だけを抜き出すためにnattoを使って以下のプログラムを書きました

lang

1require 'natto' 2 3def parse_noun(word) 4 # print "version: ", MeCab::VERSION, "\n" # debug 5 6 mecab = Natto::MeCab::Tagger.new("-Ochasen") 7 node = mecab.parseToNode(word) 8 9 nouns = [] 10 while node 11 # print node.surface, "\t", node.feature, "\t", node.cost, "\n" # debug 12 13 # 名詞を抽出する 14 if /^名詞/ =~ node.feature.split(/,/)[0] then 15 nouns.push(node.surface) 16 end 17 18 node = node.next 19 end 20 21 return nouns 22end 23 24puts parse_noun("今日は雪が降っていますが、わたしは変態です。")

しかしこれを実行しても```
untitled.rb:6:in parse_noun': uninitialized constant Natto::MeCab::Tagger (NameError) from untitled.rb:24:in <main>'

といったエラーが出てしまいます なぜでしょうか? コードは[こちらのブログ](http://hisasann.com/housetect/2010/10/rubymecab.html)をほぼコピペしています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

再び、こんにちは。
検証してみました。

[ykt68@sakura-vps] date

2015年 5月 9日 土曜日 11:04:09 JST
[ykt68@sakura-vps] cat teratail-9585.rb

lang

1require 'mecab' 2#require 'natto' 3 4def parse_noun(word) 5 # print "version: ", MeCab::VERSION, "\n" # debug 6 7 #mecab = Natto::MeCab::Tagger.new("-Ochasen") 8 mecab = MeCab::Tagger.new("-Ochasen") 9 10 node = mecab.parseToNode(word) 11 12 nouns = [] 13 while node 14 # print node.surface, "\t", node.feature, "\t", node.cost, "\n" # debug 15 16 # 名詞を抽出する 17 if /^名詞/ =~ node.feature.split(/,/)[0] then 18 nouns.push(node.surface) 19 end 20 21 node = node.next 22 end 23 24 return nouns 25end 26 27puts parse_noun("今日は雪が降っていますが、わたしは変態です。")

[ykt68@sakura-vps] ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
[ykt68@sakura-vps] ruby teratail-9585.rb
今日

わたし
変態
[ykt68@sakura-vps]

上記のように、ちゃんと意図通りに名詞が取れました。

投稿2015/05/09 02:09

編集2015/05/09 02:12
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hfhff

2015/05/09 02:32

2件も回答をくださりありがとうございます 言葉足らずで申し訳なかったのですがコピペ元の require 'mecab'ではなく require 'natto'で同じことをしてみたかったのですが思うようにいかず悩んでいました 僕の書いたNatto::MeCab::TaggerというのはMeCab::TaggerクラスのparseToNode メソッドを呼び出すためだったのですが上記のエラーが出てしまいました nattoでparseToNodeメソッドを使う方法はないのでしょうか? 追加の質問になってしまい申し訳ないのですがもしご存知なら教えていただきたいです
jun68ykt

2015/05/09 02:52

なるほど。 そのような意図のご質問だったのですね。 早合点をしてしまいまして、申し訳ありません。 それで、ちょっとirbから以下のように打ってみました。 [ykt68@sakura-vps] irb irb(main):001:0> require 'natto' => true irb(main):002:0> p Natto Natto => Natto irb(main):003:0> p Natto::MeCab Natto::MeCab => Natto::MeCab irb(main):004:0> p Natto::MeCab::Tagger NameError: uninitialized constant Natto::MeCab::Tagger from (irb):4 from /opt/rbenv/versions/2.1.2/bin/irb:11:in `<main>' irb(main):005:0> 上記のようになっているので、少なくとも私の今手元にある環境だと Natto::MeCab::Tagger という参照の仕方ができないようですので、申し訳ないのですが、 すぐに解決できるような回答は難しそうです。
hfhff

2015/05/09 03:20

すみません、こちらの回答を見落としてました 1行目でrequire 'mecab'することでひとまず解決しました ありがとうございました
jun68ykt

2015/05/09 03:28

解決されたとのことで、良かったです!
guest

0

こんにちは。

ご参考にされている、ブログ記事のほうでは、変数mecabの初期化を

lang

1mecab = MeCab::Tagger.new("-Ochasen")

とされていますが、貴殿のご質問にあるコードでは

lang

1mecab = Natto::MeCab::Tagger.new("-Ochasen")

となっています。
これを、前者のブログ記事の書き方に合わせてみてもダメでしょうか?

それと、自分もサンプル動かした程度で恐縮ですが、以下

http://www.a-programmer.jp/?p=111

ご参考になれば幸いです。

【追記】
もし、上記でもダメであれば、上記の修正をした状態でソース1行目、
require 'natto'
の前に1行追加して、require を以下の2行にしてみたらいかがでしょうか?

lang

1require 'mecab' 2require 'natto'

【さらに追記】
よく見ると、Nattoを使っていないので、変数mecabの初期化を参考にされている
ブログに合わせた上で、 require 'natto' は不要で、

lang

1require 'mecab'

だけでOKかと思います。

色々、散発的な回答ですみません。
ご参考になれば幸いです。

投稿2015/05/09 01:31

編集2015/05/09 02:01
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hfhff

2015/05/09 03:09

すべての回答が大変参考になり、おかげさまで解決しました ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問