MeCabで形態素解析

/




MacにMeCabをセットアップ


形態素解析のMeCabを使ってみることにしました。
http://taku910.github.io/mecab/

自分の環境がMacですので、MeCab本体をbrewからインストールしてみます。
brew install mecab

このままではparam.cpp(69) [ifs] no such file or directory: /usr/local/lib/mecab/dic/ipadic/dicrcとエラーが出てしまいました。辞書が無いと使えないようです。下記のコマンドで辞書をインストールしてみます。
brew install mecab-ipadic


使い方


セットアップが完了したところで、Macのターミナル上でmecabと入力してreturnを押します。
そして解析したい文章を入力します。例えば「下記のコマンドで辞書をインストールしてみます。」と入力してみました。
すると、このような形で文章が品詞分けされました。

テキスト 品詞
下記 名詞,一般,*,*,*,*,下記,カキ,カキ
助詞,連体化,*,*,*,*,の,ノ,ノ
コマンド 名詞,一般,*,*,*,*,コマンド,コマンド,コマンド
助詞,格助詞,一般,*,*,*,で,デ,デ
辞書 名詞,一般,*,*,*,*,辞書,ジショ,ジショ
助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
インストール 名詞,一般,*,*,*,*,インストール,インストール,インストール
動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
助詞,接続助詞,*,*,*,*,て,テ,テ
動詞,非自立,*,*,一段,連用形,みる,ミ,ミ
ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
記号,句点,*,*,*,*,。,。,。



シェルスクリプトで使いやすくしてみる


mecabを実用的に使えるようにするにはシェルスクリプトを組む必要があります。
まずは単純にファイルを解析して、行ごとに処理できるようにしてみます。


つぎに、上記の$line変数をタグ区切りで分けてみます。
awkコマンドは-Fオプションで区切り文字を指定しない限り、タブまたは半角スペースで区切ってくれます。そしてMeCabの出力はタグ区切りとなっています。ですから、次のように書くことができます。

これでテキスト部分と品詞に別れました。

それでは品詞の中から「名詞,一般」という文字が含まれている行だけを抽出してみましょう。


プログラミング中に [: =: unary operator expectedこのようなエラーが吐き出されてしまいました。
if [ "$meishi" = "" ]; thenのように変数をダブルクオーテーションで囲ってあげることで回避できました。


さて、これで無事「名詞,一般」のみの行をフィルタリングすることができました。
サイト
about
サイト
アプリ
ヘルプ
ページ
モチベーション
忘備
ブログ
有料
Pages
無料
github
io
カッコ
サイト
書き出し
自前
サイトジェネレーター
シェル
スクリプト
PHP
HTML
リダイレクト
ファイル


PHPのexecから使えるように、もう少し改良したのがこちらです。
mecabDeKaiseki.sh


ターミナルで使う場合は第一引数にファイルパスを、第二引数にフィルタリングしたい品詞の文字列を渡してあげます。
./mecabDeKaiseki.sh post/about-introduce.md "名詞,一般"

簡易的な実装ではありますが、これでMeCabを気軽に利用できるようになりました。