Skip to content

(very experimental) NEologd 辞書を内包した janome をビルドする方法

Tomoko Uchida edited this page Feb 15, 2022 · 47 revisions

追記 2017/8/19

ビルド済みパッケージを こちらからダウンロードできます。 更新は不定期です。

まえがき

バージョン 0.3.3 で,mmap サポート内包辞書ビルドの並列化 を行い,mecab-ipadic-neologd 辞書を内包した janome を実験的にビルドできるようになりました。

ビルドしたパッケージは,実行環境に配布して,ふつうの janome 同様に pip でインストールできます。

制限・留意事項を了解のうえ,お試しください。

制限・留意事項

  • 環境によっては動作しなかったり,ここに記載の手順ではビルドできなくなる可能性があります。
  • ビルドには,相応の CPU 時間とメモリを消費します。
  • ビルドした janome パッケージは 200 MB 程度になります。(2017-07-17 の NEologd アップデートでビルドした場合です。NEologd のエントリが増えれば,パッケージサイズは大きくなります。)
  • 解析時は,1 GB ~ メモリを消費します。また, PyPI 公開の janome を使う場合より解析が遅くなります。
  • 解析時は, mmap を使います。GAE や Heroku など PaaS 環境では動かないかもしれませんが未確認です。
  • NEologd 辞書の著作権について,こちら を参照してください。

ビルドに必要な環境

  • NEologd 辞書のビルドに必要なソフトウェアについては mecab-ipadic-neologd の要件を参照してください。
  • janome のパッケージングには Python 3.6 以上が必要です。

ビルドしたパッケージのインストール・動作要件

  • サポートする Python バージョンは PyPI 配付版と同じです。
  • mmap が使える必要があります。
  • インストール・動作には最低,2GB 以上の RAM が必要です。

ビルド手順

① mecab-ipadic-neologd を clone し,NEologd 辞書を make します。

$ git clone git@github.com:neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ ./libexec/make-mecab-ipadic-neologd.sh

実行すると, mecab-ipadic-neologd/build/ 以下に NEologd 辞書が作成されます。

※ NEologd インストールの必要はありません。

② janome を clone し, NEologd 辞書から janome 内包辞書をビルドします。

デフォルトでは,2 ワーカープロセスを使ってビルドを行います(並列処理できる箇所のみ,マルチプロセスで実行します)。4GB 程度のメモリが必要です。ビルドには時間がかかるので,気長にお待ちください ☕ 。 2017-07-17 の NEologd アップデートでは,Core i5-2300 のデスクトップマシンで1時間弱かかりました。

※ マルチコア環境で CPU をフルに使える場合は ipadic/build.sh の環境変数 WORKER_PROCESS=2 の値を空に設定し, WORKER_PROCESS= としてください。システムの CPU と同数のワーカープロセスが稼働し,速くビルドが終わります。 ワーカープロセスごとに約 2GB 程度のメモリを消費するので,メモリ使用量に注意してください! 4 ワーカープロセス なら 2 x 4 = 8GB 必要です。

#
# 環境構築
#
$ git clone git@github.com:mocobeta/janome.git
$ cd janome
$ python -m venv .venv && source .venv/bin/activate
$ python setup.py develop

#
# 辞書ビルド
#
$ cd janome/ipadic
$ ./build.sh \
  <path-to-neologd-repo>/build/mecab-ipadic-2.7.0-20070801-neologd-<YYYYMMDD> \ 
  utf8

③ janome のパッケージを作成します。

PyPI 公開の janome と区別するため,version.py を変更しておくことをおすすめします。

$ cd <path-to-janome-repo>
$ vi janome/version.py
JANOME_VERSION = '0.4.0.neologd20200813'

setup スクリプトでパッケージを作成します。少し(5分程度)時間がかかります。 dist/ 以下にパッケージができれば成功です。 🙌

$ python setup.py sdist
$ ls dist/
Janome-0.4.0.neologd20200813.tar.gz

インストール

作成したパッケージを pip でインストールします。インストール時にすべての .py をプリコンパイルすると長い時間がかかってしまうため, --no-compile オプションをつけてインストールしください(下記実行例を参照)。

(venv)$ pip install dist/Janome-0.4.0.neologd20200813.tar.gz --no-compile

解析実行: コマンドライン (Janome CLI) から試す

mmap mode で実行するため, -m オプションをつけてください。

※インストール後の初回の解析には,時間がかかります。

(venv)$ echo "改元にともない、退位礼正殿の儀が2019年4月30日に、剣璽等承継の儀が2019年5月1日 に行われる。" | janome -m
改元	名詞,サ変接続,*,*,*,*,改元,カイゲン,カイゲン
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
ともない	動詞,自立,*,*,五段・ワ行促音便,連用形,ともなう,トモナイ,トモナイ
、	記号,読点,*,*,*,*,、,、,、
退位礼正殿の儀	名詞,固有名詞,一般,*,*,*,退位礼正殿の儀,タイイレイセイデンノギ,タイーレイセイデンノギ
が	助詞,格助詞,一般,*,*,*,が,ガ,ガ
2019年	名詞,固有名詞,一般,*,*,*,2019年,ニセンジュウキュウネン,ニセンジュウキュウネン
4月30日	名詞,固有名詞,一般,*,*,*,4月30日,シガツサンジュウニチ,シガツサンジュウニチ
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
、	記号,読点,*,*,*,*,、,、,、
剣璽等承継の儀	名詞,固有名詞,一般,*,*,*,剣璽等承継の儀,ケンジトウケイショウノギ,ケンジトウケイショウノギ
が	助詞,格助詞,一般,*,*,*,が,ガ,ガ
2019年	名詞,固有名詞,一般,*,*,*,2019年,ニセンジュウキュウネン,ニセンジュウキュウネン
5月1日	名詞,固有名詞,一般,*,*,*,5月1日,ゴガツツイタチ,ゴガツツイタチ
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
行わ	動詞,自立,*,*,五段・ワ行促音便,未然形,行う,オコナワ,オコナワ
れる	動詞,接尾,*,*,一段,基本形,れる,レル,レル
。	記号,句点,*,*,*,*,。,。,。

解析実行: Janome API を使う

Tokenizer 初期化時,mmap=False オプションは併用できません。

(venv)$ python
>>> from janome.tokenizer import Tokenizer
>>> t = Tokenizer()
>>> s = '改元にともない、退位礼正殿の儀が2019年4月30日に、剣璽等承継の儀が2019年5月1日 に行われる。'
>>> for token in t.tokenize(s):
...   print(token)
... 
改元	名詞,サ変接続,*,*,*,*,改元,カイゲン,カイゲン
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
ともない	動詞,自立,*,*,五段・ワ行促音便,連用形,ともなう,トモナイ,トモナイ
、	記号,読点,*,*,*,*,、,、,、
退位礼正殿の儀	名詞,固有名詞,一般,*,*,*,退位礼正殿の儀,タイイレイセイデンノギ,タイーレイセイデンノギ
が	助詞,格助詞,一般,*,*,*,が,ガ,ガ
2019年	名詞,固有名詞,一般,*,*,*,2019年,ニセンジュウキュウネン,ニセンジュウキュウネン
4月30日	名詞,固有名詞,一般,*,*,*,4月30日,シガツサンジュウニチ,シガツサンジュウニチ
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
、	記号,読点,*,*,*,*,、,、,、
剣璽等承継の儀	名詞,固有名詞,一般,*,*,*,剣璽等承継の儀,ケンジトウケイショウノギ,ケンジトウケイショウノギ
が	助詞,格助詞,一般,*,*,*,が,ガ,ガ
2019年	名詞,固有名詞,一般,*,*,*,2019年,ニセンジュウキュウネン,ニセンジュウキュウネン
5月1日	名詞,固有名詞,一般,*,*,*,5月1日,ゴガツツイタチ,ゴガツツイタチ
 	記号,空白,*,*,*,*, ,*,*
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
行わ	動詞,自立,*,*,五段・ワ行促音便,未然形,行う,オコナワ,オコナワ
れる	動詞,接尾,*,*,一段,基本形,れる,レル,レル
。	記号,句点,*,*,*,*,。,。,。

謝辞

NEologd 開発者の @overlast さんに感謝いたします。

何か困ったら

Gitter room または Twitter で声をかけてください。

Clone this wiki locally