13
11

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.

自然言語処理Advent Calendar 2019

Day 9

形態素解析ツールインストール(MeCab,Juman++,Janome,GiNZA)

Last updated at Posted at 2019-12-08

日本語のテキスト処理には形態素解析ツールが欠かせませんが、都度ツールのインストール方法を調べるのが面倒だったので、以下の4つについてインストールをまとめました

  • MeCab
  • Juman++
  • Janome
  • GiNZA

インストール環境:Ubuntu 18.04

MeCab

公式サイトより引用

MeCabは 京都大学情報学研究科−日本電信電話株式会社コミュニケーション科学基礎研究所 共同研究ユニットプロジェクトを通じて開発されたオープンソース 形態素解析エンジンです。 言語, 辞書,コーパスに依存しない汎用的な設計を 基本方針としています。 パラメータの推定に Conditional Random Fields (CRF) を用 いており, ChaSenが採用している 隠れマルコフモデルに比べ性能が向上しています。また、平均的に ChaSen, Juman, KAKASIより高速に動作します。

apt-get install -y mecab libmecab-dev mecab-ipadic-utf8

デフォルトの辞書では新語などの固有名詞が形態素に分解されてしまうためmecab-ipadic-NEologdを使用する事が多い。
この辞書を使って分割した際の単語の粒度が形態素になるか分からないので、形態素辞書ではなく「単語分かち書き」用の辞書という扱いになる1

cd /usr/local/src
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd
./bin/install-mecab-ipadic-neologd -n

#すべての辞書をインストールする場合
# ./bin/install-mecab-ipadic-neologd -n -a
#デフォルトのインストール先の確認する場合
# echo `mecab-config --dicdir`"/mecab-ipadic-neologd"

#デフォルトの辞書をmecab-ipadic-neologdにする
sed -i 's/dicdir.*/dicdir = \/usr\/lib\/x86_64-linux-gnu\/mecab\/dic\/mecab-ipadic-neologd/' /etc/mecabrc

上がMeCabデフォルト、下がmecab-ipadic-NEologdを使用した場合の形態素解析結果
東京スカイツリーを固有名詞として扱い、分解していないことが分かる

東京	名詞,固有名詞,地域,一般,*,*,東京,トウキョウ,トーキョー
スカイ	名詞,一般,*,*,*,*,スカイ,スカイ,スカイ
ツリー	名詞,一般,*,*,*,*,ツリー,ツリー,ツリー
EOS

東京スカイツリー	名詞,固有名詞,一般,*,*,*,東京スカイツリー,トウキョウスカイツリー,トーキョースカイツリー
EOS

pythonから使用するためには、pythonバインディングのライブラリをインストールする

pip install mecab-python3

pythonでの使用例

import MeCab
#辞書を指定
mecab = MeCab.Tagger("-Owakati -d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd")
mecab.parse("東京スカイツリ-")

#'東京スカイツリー \n'

なぜかmecabrcでMeCabが参照する辞書パスを変えても、python-mecabのデフォルト辞書が変わらず...直接指定しています

Juman++

黒橋・河原研究室より引用

JUMAN++は言語モデルを利用した高性能な形態素解析システムです.言語モデルとして Recurrent Neural Network Language Model(RNNLM) を用いることにより,単語の並びの意味的な自然さを考慮した解析を行います.それにより JUMAN,MeCab に比べ大きく性能が向上しています.

#パッケージのダウンロード
wget https://github.com/ku-nlp/jumanpp/releases/download/v2.0.0-rc3/jumanpp-2.0.0-rc3.tar.xz

#解凍、インストール
tar xf jumanpp-2.0.0-rc3.tar.xz
cd jumanpp-2.0.0-rc3
mkdir bld
cd bld
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
make
sudo make install

pythonから使用するにはPyKNPを通して使用する
PyKNPは形態素解析器JUMAN++(JUMAN)と構文解析器KNPのpythonバインディング

pip install pyknp
from pyknp import Juman
jumanpp = Juman()
result = jumanpp.analysis("東京スカイツリー")
for mrph in result.mrph_list():
   print(mrph.midashi)

#東京
#スカイツリー

Janome

Janome v0.3 documentationから引用

Pure Python で書かれた,辞書内包の形態素解析器です。
依存ライブラリなしで簡単にインストールでき,アプリケーションに組み込みやすいシンプルな API を備える形態素解析ライブラリを目指しています。

別途外部エンジン、辞書などを使用しないのでpipのみでインストール可能
パッと形態素解析を試すのには丁度いい

pip install janome

GiNZA

GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜から引用

GiNZA - 特長 •MITライセンスでモデルを含めて商用利用可能 • BCCWJ由来の依存構造解析モデルをフリーで利用可能 • 他の日本語UD解析系が使用するGSDコーパスの5倍以上の規模で学習 •pip一行ですべて導入完了 • SudachiPyおよび150万語彙を備えるSudachi辞書も一括インストール • MeCab・CaboCha等と比較してDocker等での環境構築が圧倒的に楽 •spaCyの豊富な機能セットを利用できる • 日本語以外の言語モデルへの切り替えが容易 (spaCy公式サポートは8言語) • 依存構造解析結果の視覚化 → displaCy • アノテーションツール → Prodigy 21

英語圏で有名な自然言語処理ライブラリであるspaCyのフレームワークに乗っかっており、形態素解析器にSudachiPyが使用されている
形態素解析用の辞書なども同時にインストールされる

 pip install "https://github.com/megagonlabs/ginza/releases/download/latest/ginza-latest.tar.gz"
import spacy
nlp = spacy.load('ja_ginza')

doc = nlp("東京スカイツリー")
for token in doc:
   print(token)

#東京
#スカイツリー

個人的にはpip一発で入るGiNZAが楽だなーと思ったのですが、解析器にはそれぞれ特徴があるので、どうしても適用先に応じたものをインストールする必要がありそうです

他にも形態素解析器 Kytea2、係り受け解析器 CaboCha3 などのインストールも試してみましたが、エラーで入れる事ができず。できれば追記していきます。

  1. 新語・固有表現に強い「mecab-ipadic-NEologd」の効果を調べてみた

  2. Kytea

  3. CaboCha

13
11
1

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
13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?