概要
Windows10にWSL版Ubuntuをインストールし、Linux環境を構築したことを前提にしている。
その環境に Mecab + neologd をインストールする手順をまとめる。
Anacondaで開発環境を構築
公式サイトの個人向け製品から、Linux
> Python3.8
> 64-bit(x86) installer
のリンクを選ぶ。
こちらが最新版(2021-10-17時点)
インストーラーをWSL版Ubuntu のユーザーディレクトリにダウンロードする。
$ wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh
--2021-10-17 00:56:27-- https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh
Resolving repo.anaconda.com (repo.anaconda.com)... 104.16.130.3, 104.16.131.3, 173.245.59.111, ...
Connecting to repo.anaconda.com (repo.anaconda.com)|104.16.130.3|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 570853747 (544M) [application/x-sh]
Saving to: ‘Anaconda3-2021.05-Linux-x86_64.sh’
Anaconda3-2021.05-Linux-x86_6 100%[=================================================>] 544.41M 42.2MB/s in 13s
2021-10-17 00:56:40 (43.5 MB/s) - ‘Anaconda3-2021.05-Linux-x86_64.sh’ saved [570853747/570853747]
インストーラーを起動し、Anacondaのインストールを始める。
$ /bin/bash ./Anaconda3-2021.05-Linux-x86_64.sh
Welcome to Anaconda3 2021.05
In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>>
===================================
End User License Agreement - Anaconda Individual Edition
===================================
Copyright 2015-2021, Anaconda, Inc.
(・・・中略・・・)
Do you accept the license terms? [yes|no]
>>> yes # yes と入力
Anaconda3 will now be installed into this location:
/home/yukou/anaconda3
- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify a different location below
# 今回はユーザーディレクトリにインストールするので ENTER
[/home/yukou/anaconda3] >>>
PREFIX=/home/yukou/anaconda3
Unpacking payload ...
Collecting package metadata (current_repodata.json): done
Solving environment: done
## Package Plan ##
environment location: /home/yukou/anaconda3
added / updated specs:
- _ipyw_jlab_nb_ext_conf==0.1.0=py38_0
- _libgcc_mutex==0.1=main
- alabaster==0.7.12=pyhd3eb1b0_0
- anaconda-client==1.7.2=py38_0
- anaconda-navigator==2.0.3=py38_0
- anaconda-project==0.9.1=pyhd3eb1b0_1
- anaconda==2021.05=py38_0
(・・・中略・・・)
- zope.event==4.5.0=py38_0
- zope.interface==5.3.0=py38h27cfd23_0
- zope==1.0=py38_1
- zstd==1.4.5=h9ceee32_0
The following NEW packages will be INSTALLED:
_ipyw_jlab_nb_ext~ pkgs/main/linux-64::_ipyw_jlab_nb_ext_conf-0.1.0-py38_0
_libgcc_mutex pkgs/main/linux-64::_libgcc_mutex-0.1-main
alabaster pkgs/main/noarch::alabaster-0.7.12-pyhd3eb1b0_0
anaconda pkgs/main/linux-64::anaconda-2021.05-py38_0
anaconda-client pkgs/main/linux-64::anaconda-client-1.7.2-py38_0
(・・・中略・・・)
Preparing transaction: done
Executing transaction: done
installation finished.
インストールが終わると、 conda init
を実行するかと尋ねられる。
ここで conda init (シェル名)
を実行すると、指定したシェル(bash
など)が立ち上がる際、Anacondaの設定が適用されるようになる。
Do you wish the installer to initialize Anaconda3
by running conda init? [yes|no]
[no] >>> yes
no change /home/yukou/anaconda3/condabin/conda
no change /home/yukou/anaconda3/bin/conda
no change /home/yukou/anaconda3/bin/conda-env
no change /home/yukou/anaconda3/bin/activate
no change /home/yukou/anaconda3/bin/deactivate
no change /home/yukou/anaconda3/etc/profile.d/conda.sh
no change /home/yukou/anaconda3/etc/fish/conf.d/conda.fish
no change /home/yukou/anaconda3/shell/condabin/Conda.psm1
no change /home/yukou/anaconda3/shell/condabin/conda-hook.ps1
no change /home/yukou/anaconda3/lib/python3.8/site-packages/xontrib/conda.xsh
no change /home/yukou/anaconda3/etc/profile.d/conda.csh
modified /home/yukou/.bashrc
==> For changes to take effect, close and re-open your current shell.
実行した結果、 .bashrc
が変更された。
.bashrc
には以下の部分が追加されていた。
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/yukou/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/home/yukou/anaconda3/etc/profile.d/conda.sh" ]; then
. "/home/yukou/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/home/yukou/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
自然言語処理用の開発環境を conda で構築
自然言語処理用の開発環境を構築する。
環境識別名は nlp_research
としておく。
$ conda create -n nlp_research python=3.8
Collecting package metadata (current_repodata.json): done
Solving environment: done
==> WARNING: A newer version of conda exists. <==
current version: 4.10.1
latest version: 4.10.3
Please update conda by running
$ conda update -n base -c defaults conda
## Package Plan ##
environment location: /home/yukou/anaconda3/envs/nlp_research
added / updated specs:
- python=3.8
The following packages will be downloaded:
package | build
---------------------------|-----------------
_openmp_mutex-4.5 | 1_gnu 22 KB
ca-certificates-2021.9.30 | h06a4308_1 116 KB
certifi-2021.10.8 | py38h06a4308_0 151 KB
(・・・中略・・・)
wheel-0.37.0 | pyhd3eb1b0_1 33 KB
------------------------------------------------------------
Total: 36.4 MB
The following NEW packages will be INSTALLED:
_libgcc_mutex pkgs/main/linux-64::_libgcc_mutex-0.1-main
_openmp_mutex pkgs/main/linux-64::_openmp_mutex-4.5-1_gnu
(・・・中略・・・)
zlib pkgs/main/linux-64::zlib-1.2.11-h7b6447c_3
Proceed ([y]/n)? y
Downloading and Extracting Packages
ld_impl_linux-64-2.3 | 586 KB | ############################################################################# | 100%
(・・・中略・・・)
python-3.8.12 | 18.3 MB | ############################################################################# | 100%
certifi-2021.10.8 | 151 KB | ############################################################################# | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
# $ conda activate nlp_research
#
# To deactivate an active environment, use
#
# $ conda deactivate
mecab 本体のインストール
いつののように apt install
を試したところ、パッケージが見つからないとお叱りを受ける。
パッケージ情報の更新が必要なようだ。
$ sudo apt install mecab libmecab-dev mecab-ipadic-utf8
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package mecab
apt update
を実行し、状況が改善するか試みる。
$ sudo apt update
Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]
Get:2 http://archive.ubuntu.com/ubuntu focal InRelease [265 kB]
Get:3 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages [911 kB]
(・・・中略・・・)
Get:44 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 c-n-f Metadata [276 B]
Get:45 http://archive.ubuntu.com/ubuntu focal-backports/multiverse amd64 c-n-f Metadata [116 B]
Fetched 22.0 MB in 6s (3716 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
255 packages can be upgraded. Run 'apt list --upgradable' to see them.
apt update
を実行することによって mecab
を認識できるようになった。
apt search mecab
の結果から、認識できるようになったことが分かる。
$ apt search mecab
Sorting... Done
Full Text Search... Done
darts/focal 0.32-20 amd64
C++ Template Library for implementation of Double-Array
(・・・中略・・・)
mecab/focal 0.996-10build1 amd64
Japanese morphological analysis system
mecab-ipadic/focal 2.7.0-20070801+main-2.1 all
IPA dictionary compiled for Mecab
mecab-ipadic-utf8/focal 2.7.0-20070801+main-2.1 all
IPA dictionary encoded in UTF-8 compiled for Mecab
mecab-jumandic/focal 7.0-20130310-7 all
Juman dictionary compiled for Mecab (deprecated)
mecab-jumandic-utf8/focal 7.0-20130310-7 all
Juman dictionary encoded in UTF-8 compiled for Mecab
mecab-naist-jdic/focal 0.6.3.b-20111013-11 all
free Japanese Dictionaries for mecab (replacement of mecab-ipadic)
mecab-naist-jdic-eucjp/focal 0.6.3.b-20111013-11 all
free Japanese Dictionaries for mecab (replacement of mecab-ipadic) in EUC-JP
mecab-utils/focal 0.996-10build1 amd64
Support programs of Mecab
(・・・中略・・・)
unidic-mecab/focal 2.3.0+dfsg-6 all
Dictionary for Mecab (Corpus of Contemporary Written Japanese)
無事にmecabをインストールすることができた。
$ sudo apt install mecab libmecab-dev mecab-ipadic-utf8
(・・・中略・・・)
done!
update-alternatives: using /var/lib/mecab/dic/ipadic-utf8 to provide /var/lib/mecab/dic/debian (mecab-dictionary) in auto mode
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for libc-bin (2.31-0ubuntu9) ...
neologd のインストール&設定
ビルド環境の整備
ビルド作業が発生するので、以下を実行しておく。
make をはじめ、コンパイル・ビルドに必要なパッケージ一式をまとめてインストールしてくれる(便利)
$ sudo apt install build-essential
neologd のインストール
neologd の辞書を git clone でコピーすると、mecab-ipadic-neologd
というディレクトリが作成される。
$ git clone https://github.com/neologd/mecab-ipadic-neologd.git
Cloning into 'mecab-ipadic-neologd'...
remote: Enumerating objects: 9210, done.
remote: Total 9210 (delta 0), reused 0 (delta 0), pack-reused 9210
Receiving objects: 100% (9210/9210), 452.82 MiB | 17.77 MiB/s, done.
Resolving deltas: 100% (5319/5319), done.
$ ll
total 12
drwxrwxr-x 3 yukou yukou 4096 Oct 17 11:10 ./
drwxr-xr-x 3 yukou yukou 4096 Oct 17 11:10 ../
drwxrwxr-x 9 yukou yukou 4096 Oct 17 11:10 mecab-ipadic-neologd/
mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd
がインストールスクリプトである。
これを実行する。
$ cd mecab-ipadic-neologd
$ sudo bin/install-mecab-ipadic-neologd
(・・・中略・・・)
[install-mecab-ipadic-NEologd] : Do you want to install mecab-ipadic-NEologd? Type yes or no.
yes # yes と入力
[install-mecab-ipadic-NEologd] : OK. Let's install mecab-ipadic-NEologd.
[install-mecab-ipadic-NEologd] : Start..
[install-mecab-ipadic-NEologd] : /usr/lib/x86_64-linux-gnu/mecab/dic isn't current user's directory
[install-mecab-ipadic-NEologd] : Sudo make install to /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd
make[1]: Entering directory '/home/yukou/src/nlp/mecab-ipadic-neologd/build/mecab-ipadic-2.7.0-20070801-neologd-20200910'
make[1]: Nothing to be done for 'install-exec-am'.
/bin/bash ./mkinstalldirs /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd
mkdir /usr/lib/x86_64-linux-gnu/mecab
mkdir /usr/lib/x86_64-linux-gnu/mecab/dic
mkdir /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd
/usr/bin/install -c -m 644 ./matrix.bin /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/matrix.bin
/usr/bin/install -c -m 644 ./char.bin /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/char.bin
/usr/bin/install -c -m 644 ./sys.dic /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/sys.dic
/usr/bin/install -c -m 644 ./unk.dic /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/unk.dic
/usr/bin/install -c -m 644 ./left-id.def /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/left-id.def
/usr/bin/install -c -m 644 ./right-id.def /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/right-id.def
/usr/bin/install -c -m 644 ./rewrite.def /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/rewrite.def
/usr/bin/install -c -m 644 ./pos-id.def /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/pos-id.def
/usr/bin/install -c -m 644 ./dicrc /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/dicrc
make[1]: Leaving directory '/home/yukou/src/nlp/mecab-ipadic-neologd/build/mecab-ipadic-2.7.0-20070801-neologd-20200910'
[install-mecab-ipadic-NEologd] : Install completed.
[install-mecab-ipadic-NEologd] : When you use MeCab, you can set '/usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd' as a value of '-d' option of MeCab.
[install-mecab-ipadic-NEologd] : Usage of mecab-ipadic-NEologd is here.
Usage:
$ mecab -d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd ...
ビルドされた neologd のファイル群は、 /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/
以下の場所にある。
$ ll /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/
total 889680
drwxr-xr-x 2 root root 4096 Oct 17 11:20 ./
drwxr-xr-x 3 root root 4096 Oct 17 11:20 ../
-rw-r--r-- 1 root root 262496 Oct 17 11:20 char.bin
-rw-r--r-- 1 root root 693 Oct 17 11:20 dicrc
-rw-r--r-- 1 root root 74686 Oct 17 11:20 left-id.def
-rw-r--r-- 1 root root 3463716 Oct 17 11:20 matrix.bin
-rw-r--r-- 1 root root 1923 Oct 17 11:20 pos-id.def
-rw-r--r-- 1 root root 7457 Oct 17 11:20 rewrite.def
-rw-r--r-- 1 root root 74686 Oct 17 11:20 right-id.def
-rw-r--r-- 1 root root 907105162 Oct 17 11:20 sys.dic
-rw-r--r-- 1 root root 5684 Oct 17 11:20 unk.dic
mecab の辞書を neologd に変更する
mecab の動作設定ファイル /etc/mecabrc
を見ると、現在の辞書は以下の場所になっていた。
dicdir = /var/lib/mecab/dic/debian
/var/lib/mecab/dic/
のディレクトリ構造は以下の通りになっていた。
辞書ごとにディレクトリが割り当てられている。
$ ll /var/lib/mecab/dic/
total 16
drwxr-xr-x 4 root root 4096 Oct 17 11:03 ./
drwxr-xr-x 3 root root 4096 Oct 17 11:03 ../
lrwxrwxrwx 1 root root 34 Oct 17 11:03 debian -> /etc/alternatives/mecab-dictionary/
drwxr-xr-x 2 root root 4096 Oct 17 11:03 ipadic/
drwxr-xr-x 2 root root 4096 Oct 17 11:03 ipadic-utf8/
先ほどビルドした neologd の辞書ディレクトリを /var/lib/mecab/dic
に移動する方法、またはシンボリックリンクを張る方法がある。
今回は、(物理的変更を最小に抑えたいので)シンボリックリンクで行ってみる。
$ sudo ln -s /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd
$ ll
total 16
drwxr-xr-x 4 root root 4096 Oct 17 12:10 ./
drwxr-xr-x 3 root root 4096 Oct 17 11:03 ../
lrwxrwxrwx 1 root root 34 Oct 17 11:03 debian -> /etc/alternatives/mecab-dictionary/
drwxr-xr-x 2 root root 4096 Oct 17 11:03 ipadic/
drwxr-xr-x 2 root root 4096 Oct 17 11:03 ipadic-utf8/
lrwxrwxrwx 1 root root 56 Oct 17 12:10 mecab-ipadic-neologd -> /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/
現在のデフォルト辞書は mecab -D
で確認できる。
/etc/mecabrc
に記述されていた辞書が採用されていることが分かる。
$ mecab -D
filename: /var/lib/mecab/dic/debian/sys.dic
version: 102
charset: UTF-8
type: 0
size: 392127
left size: 1316
right size: 1316
/etc/mecabrc
を編集し、neologd をデフォルト辞書にする。
以下の設定を記述する。
dicdir = /var/lib/mecab/dic/mecab-ipadic-neologd
動作確認
デフォルト辞書が neologd に変更されていることを確認。
$ mecab -D
filename: /var/lib/mecab/dic/mecab-ipadic-neologd/sys.dic
version: 102
charset: UTF8
type: 0
size: 4668394
left size: 1316
right size: 1316
最近のトレンドワードから選んだ「鬼滅の刃」が認識されるか実験してみる。
$ mecab
これを使えば「鬼滅の刃」もうまく単語として認識されるかもしれません。
これ 名詞,代名詞,一般,*,*,*,これ,コレ,コレ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
使え 動詞,自立,*,*,五段・ワ行促音便,仮定形,使う,ツカエ,ツカエ
ば 助詞,接続助詞,*,*,*,*,ば,バ,バ
「 記号,括弧開,*,*,*,*,「,「,「
鬼滅の刃 名詞,固有名詞,一般,*,*,*,鬼滅の刃,キメツノヤイバ,キメツノヤイバ
」 記号,括弧閉,*,*,*,*,」,」,」
もうまく 名詞,一般,*,*,*,*,網膜,モウマク,モウマク
単語 名詞,一般,*,*,*,*,単語,タンゴ,タンゴ
として 助詞,格助詞,連語,*,*,*,として,トシテ,トシテ
認識 名詞,サ変接続,*,*,*,*,認識,ニンシキ,ニンシキ
さ 動詞,自立,*,*,サ変・スル,未然レル接続,する,サ,サ
れる 動詞,接尾,*,*,一段,基本形,れる,レル,レル
かも 助詞,副助詞,*,*,*,*,かも,カモ,カモ
しれ 動詞,自立,*,*,一段,連用形,しれる,シレ,シレ
ませ 助動詞,*,*,*,特殊・マス,未然形,ます,マセ,マセ
ん 助動詞,*,*,*,不変化型,基本形,ん,ン,ン
。 記号,句点,*,*,*,*,。,。,。
EOS
もうまく
がおかしなことになっていたが、「鬼滅の刃」が固有名詞として識別できていることが確認できた。
Python バインディングのインストール
mecab, neologd のインストールが済んだので、開発環境 nlp_research
の構築を進める。
$ conda activate nlp_research
$ pip3 search mecab
ERROR: XMLRPC request failed [code: -32500]
RuntimeError: PyPI's XMLRPC API is currently disabled due to unmanageable load and will be deprecated in the near future. See https://status.python.org/ for more information.
この RuntimeError とは一体・・・思い出した。
PyPI のサーバーの負荷が高すぎるため、 pip search が廃止される模様。
Sadly pip search is now permanently banned by python.org.
They said that they are experiencing "hundreds of thousands of search calls per hour" for 100 days(since Nov 14, 2020), and the XMLRPC API, via which the search calls are taking, had already been determined to be deprecated before this happened.
So maybe we need to search for packages directly on pypi.org, or turn to packages like pypi-simple-search or pipsearch.
https://stackoverflow.com/questions/66375972/getting-error-with-pip-search-and-pip-install
パッケージを検索したいときは、pypi.org に直接アクセスして検索する必要がありそうだ。
見つけたパッケージ情報から、以下の mecab-python バインディングモジュールをインストールすることにした。(昔から使いなじんでいるモジュールなので)
https://pypi.org/project/mecab-python3/
$ pip3 install mecab-python3
Collecting mecab-python3
Downloading mecab_python3-1.0.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (490 kB)
|████████████████████████████████| 490 kB 8.8 MB/s
Installing collected packages: mecab-python3
Successfully installed mecab-python3-1.0.4
テストプログラムを実行したところ、Runtime Errorが発生。
Traceback (most recent call last):
File "/home/yukou/anaconda3/envs/nlp_research/lib/python3.8/site-packages/MeCab/__init__.py", line 133, in __init__
super(Tagger, self).__init__(args)
RuntimeError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "./mecab_test.py", line 2, in <module>
tokenizer = MeCab.Tagger()
File "/home/yukou/anaconda3/envs/nlp_research/lib/python3.8/site-packages/MeCab/__init__.py", line 135, in __init__
raise RuntimeError(error_info(rawargs)) from ee
RuntimeError:
----------------------------------------------------------
Failed initializing MeCab. Please see the README for possible solutions:
https://github.com/SamuraiT/mecab-python3#common-issues
If you are still having trouble, please file an issue here, and include the
ERROR DETAILS below:
https://github.com/SamuraiT/mecab-python3/issues
issueを英語で書く必要はありません。
------------------- ERROR DETAILS ------------------------
arguments:
[ifs] no such file or directory: /usr/local/etc/mecabrc
----------------------------------------------------------
思い出した。
/usr/local/etc/mecabrc
を定義する必要がある。
/etc/mecabrc
のシンボリックリンクを張っておこう。
$ cd /usr/local/etc
$ ln -s /etc/mecabrc
無事に動くようになった。
$ python ./mecab_test.py
これ 名詞,代名詞,一般,*,*,*,これ,コレ,コレ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
使え 動詞,自立,*,*,五段・ワ行促音便,仮定形,使う,ツカエ,ツカエ
ば 助詞,接続助詞,*,*,*,*,ば,バ,バ
鬼滅の刃 名詞,固有名詞,一般,*,*,*,鬼滅の刃,キメツノヤイバ,キメツノヤイバ
も 助詞,係助詞,*,*,*,*,も,モ,モ
上手く 形容詞,自立,*,*,形容詞・アウオ段,連用テ接続,上手い,ウマク,ウマク
単語 名詞,一般,*,*,*,*,単語,タンゴ,タンゴ
として 助詞,格助詞,連語,*,*,*,として,トシテ,トシテ
認識 名詞,サ変接続,*,*,*,*,認識,ニンシキ,ニンシキ
さ 動詞,自立,*,*,サ変・スル,未然レル接続,する,サ,サ
れる 動詞,接尾,*,*,一段,基本形,れる,レル,レル
かも 助詞,副助詞,*,*,*,*,かも,カモ,カモ
しれ 動詞,自立,*,*,一段,連用形,しれる,シレ,シレ
ませ 助動詞,*,*,*,特殊・マス,未然形,ます,マセ,マセ
ん 助動詞,*,*,*,不変化型,基本形,ん,ン,ン
。 記号,句点,*,*,*,*,。,。,。
EOS