Rubyでのmecabの使い方を徹底解説します
19/01/20 15:34:26 19/05/05 17:11:32
Rubyのmecabは形態素解析のためのツールです。プログラミングの世界はわかりにくい横文字ばかりで混乱しがちなのに日本語の用語もわかりにくいのか、と思われたかもしれません。
そこでこのページでは、形態素解析の説明やmecabの使い方の紹介をしていきます。プログラミングの専門用語は一見するとわかりにくく、文章中に専門用語が続くともはやその文章は意味不明ということになります。
しかし一つ一つの用語を見ていけばそれほど難しいものではなく、なおかつ用語があることでプログラマー同士の会話や文章が簡潔になります。逆に言えば、用語がないと会話や文章のたびに毎回概念やロジックの説明をしなければならなくなります。
それだと会話も文章も冗長すぎて情報伝達が困難になるので、そのために専門用語が存在します。直感的に意味がわかりにくい用語が多いのは事実なのですが、一つ一つ把握していけば、プログラミングに関する情報収集が速くなるので上達も速くなります。
プログラミングのスキルアップのためには情報収集能力が最重要と言われたりもしますが、専門用語を把握しておかないと情報収集できないので、専門用語は重要ということです。
形態素解析とは
形態素解析とは、「文法的な情報の注記のない自然言語のテキストデータから、対象言語の文法や、辞書と呼ばれる単語の品詞等の情報にもとづき、形態素(Morpheme, おおまかにいえば、言語で意味を持つ最小単位)の列に分割し、それぞれの形態素の品詞等を判別する作業」です。
要するに、文章を単語や数値で分解するということです。正式な情報を見ると用語もその説明も非常にわかりにくいので、自分の頭のなかではたとえば「文章分解」「文章を単語など細かい単位にわけること」といった形で置き換えて理解しておくと良いかもしれません。
自分なりに要約して解釈することや、誰かがわかりやすく要約しているものを見て用語やその意味を理解すると良いでしょう。
mecabの例
mecabの使い方を紹介する前に、使用するとどのように解析されるのかを紹介しておきます。以下が一例になります。
【 元の文 】
最近「私たちが作っているWebサービスでも何か応用できないか」と気になっているものがあります。
【 解析結果 】
最近 / 「 / 私 / たち / が / 作っ / て / いる / Web / サービス / で / も / 何 / か/ 応用 / でき / ない / か / 」 / と / 気 / に / なっ / て / いる / もの / が / あり / ます / 。
国語の文法の授業でこんな感じのことやったな、と思われた方多いのではないでしょうか。私も初めて見たときはそう思いました。このように文章を分解するというシンプルな機能なのですが、たとえば人が作る文章をデータベースに蓄積し、そのなかから頻出の用語をピックアップしてカウントするようなことも可能です。
Googleのアルゴリズムは内部の人しかわからないのですが、おそらくこれと似たようなロジックを用いて文章解析しているのではないかと思われます。もちろんこれだけではありませんが、検索エンジンに人が入力した文章から単語をピックアップしてカウントするようなロジックは当然含まれているかと思います。
また、文章を区切るだけではなく、以下のように「○○詞」という形で分析することもできます。
【 明日は明日の風が吹く 】
明日 名詞,副詞可能,*,*,*,*,明日,アシタ,アシタ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
明日 名詞,副詞可能,*,*,*,*,明日,アシタ,アシタ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
風 名詞,一般,*,*,*,*,風,カゼ,カゼ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
吹く 動詞,自立,*,*,五段・カ行イ音便,基本形,吹く,フク,フク
ますます国語の文法の授業のようです。
mecabの使い方
次にmecabの使い方ですが、ここでも把握しておくべき専門用語が出てきます。なぜなら、「mecabはnattoというGem」をインストールすることで使用するからです。コマンドとしては非常にシンプルで、以下のように書けばmecabを使えます。
gem install natto
このコードでnattoのインストールが完了しました。次に、たとえば上の文章解析例を用いると以下のコードのようになります。
# -*- coding: utf-8 -*-
require 'natto'
txt = '明日は明日の風が吹く'
natto = Natto::MeCab.new
natto.parse(txt) do |n|
puts "#{n.surface}: #{n.feature}"
end
nattoのメソッドの引数に文章の入った変数を設定し、出力するコードです。これを実行すると、上で紹介した文章解析の出力結果が得られます。また、辞書機能を使って固有名詞を分解しない設定をすることも可能です。以下が例です。
【 普通にmecabを使った場合 】
$ mecab
ドラゴンボールとアラレちゃん
ドラゴン 名詞,一般,*,*,*,*,ドラゴン,ドラゴン,ドラゴン
ボール 名詞,一般,*,*,*,*,ボール,ボール,ボール
と 助詞,並立助詞,*,*,*,*,と,ト,ト
アラレ 名詞,固有名詞,一般,*,*,*,*
ちゃん 名詞,接尾,人名,*,*,*,ちゃん,チャン,チャン
EOS
【 NEologd辞書を使った場合 】
$mecab-u/usr/local/lib/mecab/dic/mecab-ipadic-neologd/seed/mecab-user-dict-seed.20170216.dic
ドラゴンボールとアラレちゃん
ドラゴンボール 名詞,固有名詞,一般,*,*,*,DRAGON BALL,ドラゴンボール,ドラゴンボール
と 助詞,並立助詞,*,*,*,*,と,ト,ト
アラレちゃん 名詞,固有名詞,一般,*,*,*,アラレちゃん,アラレチャン,アラレチャン
EOS
デフォルトだと固有名詞まで分解されてしまいましたが、辞書に有名な固有名詞は登録されているため、固有名詞が分解されなくなった、ということです。mecabの使い方は以上の通りなのですが、nattoとGemについて疑問が残り、多少の気持ち悪さがあるかもしれません。
また知っておいた方が今後の情報収集でも役立つので、nattoとGemについて解説しておきます。
mecabと関係するnattoとGemとは
Gemとは
Gemとは、RubyのGemsが公開しているライブラリです。ライブラリの機能としてはパッケージ管理ツールになります。ライブラリの一種ということを把握しておけば良いでしょう。ライブラリが何かという解説はここでは割愛します。ライブラリが何かよくわからないという場合、ぜひ調べてみてください。
nattoとは
nattoはGemライブラリの機能の一つです。mecabはさらにそのnattoのなかの一機能のイメージです。
以上、Rubyでのmecabの使い方や、そもそもmecabとは何かを解説してきました。基本的にはmecabの使いかを知るのが優先ですが、mecabが何か、他の概念との関係性はどうなっているのか、といったことを把握していた方が応用しやすく、なおかつ安心して機能を使えます。
こういった機能の使い方が解説されていることは多いものの、そもそもそれが何かを解説されていることは少ないです。知らずに使うとバグにつながることもあるので、実装に使う際はぜひそれが何のかといったことや、周辺知識も合わせて情報収集するようにしてください。
Rubyのフリーランス案件をチェック
Ruby関連記事
1, Rubyフリーランスの仕事や単価、ruby on railsの在宅案件まで
2, Rubyとは?学習方法や将来性、perlやphp、Pythonの比較はどう?
3, Ruby on RailsでMySQLを使用する際の接続手順
4, あるiOSアプリのエンジニアがRuby on Railsのプロジェクトに加わった話
5, 小学生でも数時間でアプリを作れたRuby on railsの入門書3選
6, 【決定版!】Rubyでできることとは?
7, Ruby開発の新卒採用している会社まとめ
8, Rubyで文字列から数値へ変換する方法まとめ
9, RubyのWebサーバ「puma」を使ってみた感想
10, (この記事)Rubyでのmecabの使い方を徹底解説します
11, Rubyでハッシュに対する繰り返し処理を行うeachの3つのメソッドの使い方
12, Rubyのyardを使ってソースからドキュメントを生成する方法
人気記事