Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
43
Help us understand the problem. What are the problem?

posted at

updated at

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 自然言語処理・画像処理・音声処理 人工知能プログラミング実践入門』

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
43
Help us understand the problem. What are the problem?