mecab ipadic-NEologd を Google Colaboratory で使う


これはなに?

形態素解析のデファクトスタンダードであるMeCabと、その追加辞書mecab-ipadic-NEologdをGoogle Colaboratoryで動かすためのコードです。
かつてはmecabとipadic-NEologdを直接インストールしていましたが、いまはGinza経由で呼び出すほうが便利です。

Ginzaのインストール

!pip install ginza==4.0.5 ja-ginza 
!pip install sortedcontainers~=2.1.0
import pkg_resources, imp
imp.reload(pkg_resources)

pipを使ってginzaをインストールします。
sortedcontainersというライブラリがColabのデフォルトとGinzaの要求バージョンが違うせいでエラーが発生するので、Ginzaの指定するバージョンをインストールし直します。
また、デフォルトでは日本語辞書にパスが通っていないようなので、pkg_resourcesを再度読み込ませます。これはColabの仕様(?)によるもののようで、ランタイムを再起動しても読み込むようなのですが、ランタイムの再起動をいちいちやるのも面倒なのでpythonの方で再読み込みをさせています。

形態素解析

ginza.py
import spacy
import ginza
nlp = spacy.load("ja_ginza")
ginza.set_split_mode(nlp, "C")
doc = nlp("彼女はペンパイナッポーアッポーペンと恋ダンスを踊った。")

for token in doc:
  print(str(token))

#>>
#彼女
#は
#ペンパイナッポーアッポーペン
#と
#恋
#ダンス
#を
#踊っ
#た
#。

nlp = spacy.load("ja_ginza")で形態素解析エンジンを呼び出し、ginza.set_split_mode(nlp, "C")で分割単位をCに設定します。分割単位は3種類あり、それぞれ以下の辞書を使用します。

分割単位 使用する辞書
A UniDic
B IPADIC
C NEologd

分割単位をCに設定することで、NEologdが使用できます。
お疲れさまでした。

MeCabとNEologdを直接インストールしたい方のために、かつてのやり方も記載しておきます。

かつてのやり方

MeCabのインストール

!apt install aptitude swig
!aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file -y
!pip install mecab-python3==0.996.3

mecab-ipadic-NEologdのインストール

!git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
!echo yes | mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n -a

2つ合わせて実行すれば、形態素解析の環境構築は終了です。インストール完了まで2~3分程度かかります。

pythonからの呼び出し

MeCab.Tagger() を呼び出す際に、引数にmecab-ipadic-NEologdのパスを指定する必要があります。辞書のパスはecho `mecab-config --dicdir`"/mecab-ipadic-neologd"で取得できます。

mecab.py
import MeCab
import subprocess

cmd = 'echo `mecab-config --dicdir`"/mecab-ipadic-neologd"'
path = (subprocess.Popen(cmd, stdout=subprocess.PIPE,
                           shell=True).communicate()[0]).decode('utf-8')
m = MeCab.Tagger("-d {0}".format(path))

これで呼び出し完了です。あとは使うだけ。

mecab.py
print(m.parse("彼女はペンパイナッポーアッポーペンと恋ダンスを踊った。"))
#>>
#彼女 名詞,代名詞,一般,*,*,*,彼女,カノジョ,カノジョ
#は    助詞,係助詞,*,*,*,*,は,ハ,ワ
#ペンパイナッポーアッポーペン 名詞,固有名詞,一般,*,*,*,Pen-Pineapple-Apple-Pen,ペンパイナッポーアッポーペン,ペンパイナッポーアッポーペン
#と    助詞,並立助詞,*,*,*,*,と,ト,ト
#恋ダンス   名詞,固有名詞,一般,*,*,*,恋ダンス,コイダンス,コイダンス
#を    助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
#踊っ 動詞,自立,*,*,五段・ラ行,連用タ接続,踊る,オドッ,オドッ
#た    助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
#。    記号,句点,*,*,*,*,。,。,。
#EOS

お疲れさまでした。

更新履歴

2021/10/29: Ginzaについて記載
2021/1/2: mecab-python3が1.xにアップデートしたことでコードが動かなくなったので、明示的に0.996.3をインストールするように暫定的に変更。

参考文献

https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md
https://qiita.com/inatatsu_csg/items/40b11701d256a84a0510
https://engineering.linecorp.com/ja/blog/mecab-ipadic-neologd-new-words-and-expressions/
布留川 英一『BERT/GPT-3/DALL-E 自然言語処理・画像処理・音声処理 人工知能プログラミング実践入門』