🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
rbenv

rbenvは、Rubyバージョン管理ツール。プロジェクトごとでRubyバージョンを切り替えることが可能です。RVMよりもシンプルで、少ない機能で動作します。本体にはRubyのビルド機能は備わっておらず、ruby-buildというツールを用いる必要があります。

Ruby

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

Mecab

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

Fluentd

Fluentdは、オープンソースのログ収集ツールです。ログの収集方法、ログの記録先などのログデータ処理を柔軟にカスタマイズでき、インプットおよびアウトプットが全てプラグインとして実装されています。

Q&A

解決済

1回答

2076閲覧

FluentdでMeCabプラグインを作成して実行すると"Unknown filter plugin 'mecab'が出て実行エラーになる

MeguroHarumi

総合スコア14

rbenv

rbenvは、Rubyバージョン管理ツール。プロジェクトごとでRubyバージョンを切り替えることが可能です。RVMよりもシンプルで、少ない機能で動作します。本体にはRubyのビルド機能は備わっておらず、ruby-buildというツールを用いる必要があります。

Ruby

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

Mecab

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

Fluentd

Fluentdは、オープンソースのログ収集ツールです。ログの収集方法、ログの記録先などのログデータ処理を柔軟にカスタマイズでき、インプットおよびアウトプットが全てプラグインとして実装されています。

0グッド

1クリップ

投稿2019/09/09 07:53

編集2019/09/10 04:51

前提・実現したいこと

Fluetdを用いてTwitterのStreaming APIからツイートの情報を取得し、それを形態解析するプログラムを作成しようとしています。

①rbenvをインストール
②Rubyをインストール
③Fluentdのインストール
④MeCabのインストール

発生している問題・エラーメッセージ

下記のコマンドでFluentdの起動を行うとエラーメッセージが出力されます。

fluentd -c ./fluent.twitter.mecab.conf

<エラーメッセージ>

2019-09-09 16:26:26 +0900 [error]: config error file="./fluent.twitter.mecab.conf" error_class=Fluent::ConfigError error="Unknown filter plugin 'mecab'. Run 'gem search -rd fluent-plugin' to find plugins"

該当のソースコード

以下はconfファイル(fluent.twitter.mecab.conf)の設定内容です。

<source> type twitter consumer_key [MY_KEY] consumer_secret [MY_KEY_SECRET] access_token [MY_TOKEN] access_token_secret [MY_TOKEN_SECRET] tag twitter timeline sampling lang ja output_format nest </source> <filter twitter> @type mecab key text </filter> <match twitter> @type stdout </match> <match twitter.mecab> type stdout </match>

以下は./fluentd/fluent/plugin/内に作成したrbファイルの記述内容です。

module Fluent class MeCabFileter < Filter Plugin.register_filter('mecab',self) config_param : key, : string config_param : tag, : string, default: "mecab" def initialize super require 'natto' end def configure(config) super @mecab = Natto::MeCab.new end def start super end def shutdown super end def filter(tag, time, record) end def filter_stream(tag, es) result_es = MultiEventStream.new es.each do |time, record| begin position = 0 @mecab.parse(pre_process(record[@key])) do |mecab| length = mecab.surface.length next if length == 0 new_record = record.clone new_record["mecab"] = { "word" => mecab.surface, "length" => length, "pos" => mecab.feature.split(/\,/), "position" => position} result_es.add(time, new_record) position += length end rescue => e router.emit_error_event(tag, time, record, e) enend return result_es end def pre_process(text) # delete URL return text.gsub(/https?\://([\w\-]+.)+[\w-]+(/[\w-]+)*/?/,'').gsub(/RT\s*:*/,'').gsub(/@[\w]+\s*/,'') end end end

試したこと

エラーメッセージに記載された「gem search -rd fluent-plugin」のコマンドをトライしました。mecabに関連するプラグインを探した所、以下のプラグインが見つかったので試しにそれをインストールしましたが、状況は変わりませんでした。

gem search -rld fluent-plugin sudo gem install fluent-plugin-mecab

補足情報(FW/ツールのバージョンなど)

OS : CentOS Linux release
rbenv 1.1.2-2-g4e92322
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
fluentd 1.7.0
mecab of 0.996

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

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

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

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

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

guest

回答1

0

ベストアンサー

プラグインの書き方が間違っています。

ruby

1module Fluent 2class MeCabFileter < Filter 3 Plugin.register_filter('mecab',self)

ではなく、以下のように書きます。

ruby

1require "natto" 2 3module Fluent 4 module Plugin 5 class MeCabFilter < Filter 6 Fluent::Plugin.register("mecab", self) 7 8 def filter(tag, time, record) 9 # natto でレコードを加工し、new_record を返す 10 end 11 end 12 end 13end

あと、Fluentd によって filter は最適化されるため、どうしても必要でなければ filter_stream ではなく filter を実装した方がよいです。

https://github.com/katsyoshi/fluent-plugin-mecab を参考に実装されたようですが、参考にしたプラグインの実装が古いバージョンのプラグインAPIを使用しているので、最新版のドキュメントを参照するとよいと思います。

投稿2019/09/10 21:54

okkez

総合スコア87

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問