Symfoware

Symfowareについての考察blog

FreeBSD 10 に MeCab + Pythonバインディングをインストールする

FreeBSD 10にMeCabをインストールしてみます。


ports使用



/usr/ports/japanese/mecabに移動して、make & make install


# cd /usr/ports/japanese/mecab
# make
(途中、いくつか質問されますが全てデフォルトでインストール)




makeが終わったら、make installを実行。


# make install

(略)
====> Compressing man pages (compress-man)
===> Installing for ja-mecab-0.996
===> Checking if japanese/mecab already installed
===> Registering installation for ja-mecab-0.996

========================================================
                     **** NOTE ****
ipadic was splitted into japanese/mecab-ipadic port.
========================================================




辞書も入れてねとのとこなので。


# cd /usr/ports/japanese/mecab-ipadic
# make




辞書はUTF-8を選択。

497_01.png


# make install







pkg install使用



portsからのインストール後に気がついたのですが、pkg searchしてみると
ちゃんとmecabのパッケージが見つかりました。


# pkg search mecab
ja-mecab-0.996_2
ja-mecab-ipadic-2.7.0.20070801
ja-p5-MeCab-0.996
ja-p5-Text-MeCab-0.20009
ja-php5-mecab-0.5.0
ja-py27-mecab-0.996
ja-ruby20-mecab-0.996_1



本体と辞書は、以下のコマンドでインストール可能だと思います。


# pkg install ja-mecab
# pkg install ja-mecab-ipadic



pkg installした辞書はおそらくeuc-jpエンコードです。
utf-8エンコードが欲しい場合は、portsから入れたほうが楽だと思います。




Pythonバインディング



Pythonバインディングはpkg installでインストールしました。


# pkg install ja-py27-mecab







分かち書きのテスト



適当にPythonのサンプルを実行すると、このエラーで苦しみました。


Traceback (most recent call last):
File "sample.py", line 9, in <module>
    encoded_result = m.parse(u'すもも')
File "/usr/local/lib/python2.7/site-packages/MeCab.py", line 281, in parse
    def parse(self, *args): return _MeCab.Tagger_parse(self, *args)
NotImplementedError: Wrong number or type of arguments for overloaded function 'Tagger_parse'.
Possible C/C++ prototypes are:
    MeCab::Tagger::parse(MeCab::Model const &,MeCab::Lattice *)
    MeCab::Tagger::parse(MeCab::Lattice *) const
    MeCab::Tagger::parse(char const *)




MeCabをPythonから使う注意点とか
MeCabでパースするときにエラーが出たときの話

こちらに助けられました。
Mecabに渡す文字列はstr型にすれば良い模様。


この手のライブラリテストでおなじみの
「すもももももももものうち」を解析してみます。


  1. # -*- coding:utf-8 -*-
  2. import MeCab
  3. import sys, codecs
  4. sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
  5. m = MeCab.Tagger('-Owakati')
  6. text = u'すもももももももものうち'
  7. encoded_text = text.encode('utf-8') # encodeが必要
  8. node = m.parseToNode(encoded_text)
  9. while node:
  10.     surface = node.surface.decode('utf-8')
  11.     feature = node.feature.decode('utf-8')
  12.     print surface, u':', feature
  13.     node = node.next




狙い通りの動作です。


# python sample.py
: BOS/EOS,*,*,*,*,*,*,*,*
すもも : 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も : 助詞,係助詞,*,*,*,*,も,モ,モ
もも : 名詞,一般,*,*,*,*,もも,モモ,モモ
も : 助詞,係助詞,*,*,*,*,も,モ,モ
もも : 名詞,一般,*,*,*,*,もも,モモ,モモ
の : 助詞,連体化,*,*,*,*,の,ノ,ノ
うち : 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
: BOS/EOS,*,*,*,*,*,*,*,*



関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/11/03(月) 15:34:06|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Mecab PythonでTF・IDFによるBlogの重要単語抽出 | ホーム | FreeBSD 10 + Pythonで「UnicodeEncodeError: 'ascii' codec can't encode characters」>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1528-53fc9020
この記事にトラックバックする(FC2ブログユーザー)