St_Hakky’s blog

Data Science / Human Resources / Web Applicationについて書きます

Windowsで形態素解析ツールMecab入れるのが面倒だったので、Janome使ってみた

こんにちは。

私の愛するMacがぶち壊れて、ここ最近Windowsで開発をしているのですが、MeCab入れるときの手順がもうクソめんどくさくて、「あぁ、、、またやるのかこれ、、、」ってなってたところに、Janomeと出会いました。笑

調べている過程で知ったんですが、結構いろんな形態素解析のソフトがあるもんなんだなぁと。機会があれば色々使ってみたいなと思います。

bita.jp

さて、今回はJanomeを使ってみたので、そのことについて記事を書こうかと思います。

環境

環境は以下の通り。

  • Windows 64bit
  • Python 3.6.0
  • Anaconda 4.3.22
  • Janome 0.3.1

まずはインストール

ドキュメントには、pipで入ると書いてありました。MeCabだと辞書を入れないといけませんが、Janomeはpip一発で全部入るようです。素晴らしい。

pip install janome

通常はこれでうまくいくっぽいんですが、なんかうまく行かなかった笑。出てきたエラーが以下。

> pip install janome
Collecting janome
  Using cached Janome-0.3.1.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\<user_name>\AppData\Local\Temp\pip-build-16igu6zz\janome\setup.py", line 22, in <module>
        long_description = f.read()
    UnicodeDecodeError: 'cp932' codec can't decode byte 0x81 in position 853: illegal multibyte sequence

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\<user_name>\AppData\Local\Temp\pip-build-16igu6zz\janome\

たぶんファイルを読み込むときのエンコーディング指定をしていないからかしらと思って、ソースコードからインストールしてみました。

こちらから、Janome-0.3.1.tar.gzをダウンロードして、解凍します。そんで、setup.pyのファイルの、21行目にある、

with open(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'README.rst')) as f:

の部分を以下のような感じで変更。

with open(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'README.rst'), encoding="utf-8") as f:

そんでもって、コマンドで

python setup.py install 

としてインストールをするとできました。

とりま使ってみる

from janome.tokenizer import Tokenizer
tokenizer = Tokenizer()
tokens = tokenizer.tokenize("私はサッカーが好きです。")
for token in tokens:
   print(token)

↑を実行すると、

私      名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
サッカー        名詞,一般,*,*,*,*,サッカー,サッカー,サッカー
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
好き    名詞,形容動詞語幹,*,*,*,*,好き,スキ,スキ
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。      記号,句点,*,*,*,*,。,。,。

と返ってきます。Coolだ。。。

分かち書きがしたい

引数を変えるだけでできます。

from janome.tokenizer import Tokenizer
tokenizer = Tokenizer()
tokens = tokenizer.tokenize("私はサッカーが好きです。", wakati=True)
for token in tokens:
   print(token)


上を実行すると以下のようになります。

私    
は    
サッカー 
が    
好き   
です   
。    

形態素に分解した時に取れる情報

まぁ、私は自然言語処理の専門家でもなんでもなく、ちょっとした処理をしたいなーっていうくらいで使うレベル感なので、大したことはしません笑。

形態素に分解したときのアウトプットがどの順番で並んでいるかということはやりたい処理に必要だったので、調べてみました。

上で出した出力結果をパースすれば、原型をある程度取得できたりするので笑(各方面から怒られそう笑)。以下が順番です。

表層形
品詞
品詞細分類1
品詞細分類2
品詞細分類3
活用型
活用形
原形
読み
発音

と思ってたんですけど、Tokenのドキュメントを読んでいると、あぁそんなことしなくていいんだなぁと笑。

base_formとかそんな感じでデータを取得できるようです。これは便利。

その他+感想

辞書も指定できるみたいです。めちゃめちゃインストールも簡単ですし、何かぱっとやりたいときには便利かもと思いました。

しばらくはこれを使っていこうかと思います。また何かあれば追記しまする。