60
49

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

mecab ipadic-NEologd を Google Colaboratory で使う

Last updated at Posted at 2019-07-29

#これはなに?
形態素解析のデファクトスタンダードである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 自然言語処理・画像処理・音声処理 人工知能プログラミング実践入門』

60
49
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
60
49

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?