日本語のテキスト処理には形態素解析ツールが欠かせませんが、都度ツールのインストール方法を調べるのが面倒だったので、以下の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
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 などのインストールも試してみましたが、エラーで入れる事ができず。できれば追記していきます。