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

Tomoko Uchida edited this page Jun 29, 2018 · 25 revisions

追記 2017/8/19

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

まえがき

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

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

NEologd のデータサイズや更新頻度を考慮すると,ビルド済みのパッケージを配布するのは厳しいので,ビルド手順のみ公開します。制限・留意事項を了解のうえ,お試しください。

制限・留意事項

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

ビルドに必要な環境

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

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

  • Python 2.7 または Python 3.3 以上が必要です。
  • 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 程度のメモリが必要です。ビルドには時間がかかるので,気長にお待ちください :coffee: 。 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/ipadic
$ ./build.sh \
  <path-to-neologd-repo>/build/mecab-ipadic-2.7.0-20070801-neologd-<YYYYMMDD> \ 
  utf8

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

PyPI 公開の janome と区別するため,setup.py の モジュール名 バージョンを変更しておくことをおすすめします。

$ cd <path-to-janome-repo>
$ vi setup.py
...
setup(
    name='Janome',
    version=version + '.neologd<neologd-version>',  # version を変更
...

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

$ python setup.py sdist
$ ls dist/
Janome-0.3.4.dev1.neologd20170717.tar.gz

インストール

作成したパッケージを pip でインストールします。インストール時にすべての .py をプリコンパイルすると長い時間がかかってしまうため, --no-compile オプションをつけてインストールし, インストールした後に, (mmap 動作時に必要なモジュールのみコンパイルするため、)一度 Tokenizer の初期化を行ってください(下記実行例を参照)。

(venv)$ pip install Janome-0.3.4.dev1.neologd20170717.tar.gz --no-compile
(venv)$ python -c "from janome.tokenizer import Tokenizer; Tokenizer(mmap=True)"

解析実行

Tokenizer 初期化

Tokenizer 初期化時,mmap=True オプションが必須です。このオプションをつけないと, LoadingDictionaryError が発生します。

(venv) $ python
>>> from janome.tokenizer import Tokenizer
>>> t = Tokenizer(mmap=True)

実行例(1)

>>> s = u'渋谷ヒカリエは、東京都渋谷区の渋谷駅東口に位置する東急文化会館跡地に建設された複合商業施設 。東急百貨店や飲食店、事務所のほか、ミュージカル劇場「東急シアターオーブ」などが入居している。'
>>> for token in t.tokenize(s):
...   print(token)
... 
渋谷ヒカリエ	名詞,固有名詞,一般,*,*,*,渋谷ヒカリエ,シブヤヒカリエ,シブヤヒカリエ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
、	記号,読点,*,*,*,*,、,、,、
東京都渋谷区	名詞,固有名詞,地域,一般,*,*,東京都渋谷区,トウキョウトシブヤク,トーキョートシブヤク
の	助詞,連体化,*,*,*,*,の,ノ,ノ
渋谷駅	名詞,固有名詞,地域,一般,*,*,渋谷駅,シブヤエキ,シブヤエキ
東口	名詞,一般,*,*,*,*,東口,ヒガシグチ,ヒガシグチ
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
位置	名詞,サ変接続,*,*,*,*,位置,イチ,イチ
する	動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
東急文化会館	名詞,固有名詞,一般,*,*,*,東急文化会館,トウキュウブンカカイカン,トーキューブンカカイカン
跡地	名詞,一般,*,*,*,*,跡地,アトチ,アトチ
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
建設	名詞,サ変接続,*,*,*,*,建設,ケンセツ,ケンセツ
さ	動詞,自立,*,*,サ変・スル,未然レル接続,する,サ,サ
れ	動詞,接尾,*,*,一段,連用形,れる,レ,レ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
複合商業施設	名詞,固有名詞,一般,*,*,*,複合商業施設,フクゴウショウギョウシセツ,フクゴーショーギョーシセツ
。	記号,句点,*,*,*,*,。,。,。
東急百貨店	名詞,固有名詞,組織,*,*,*,東急百貨店,トウキュウヒャッカテン,トーキューヒャッカテン
や	助詞,並立助詞,*,*,*,*,や,ヤ,ヤ
飲食店	名詞,固有名詞,一般,*,*,*,飲食店,インショクテン,インショクテン
、	記号,読点,*,*,*,*,、,、,、
事務所	名詞,一般,*,*,*,*,事務所,ジムショ,ジムショ
の	助詞,連体化,*,*,*,*,の,ノ,ノ
ほか	名詞,副詞可能,*,*,*,*,ほか,ホカ,ホカ
、	記号,読点,*,*,*,*,、,、,、
ミュージカル	名詞,一般,*,*,*,*,ミュージカル,ミュージカル,ミュージカル
劇場	名詞,一般,*,*,*,*,劇場,ゲキジョウ,ゲキジョー
「	記号,括弧開,*,*,*,*,「,「,「
東急シアターオーブ	名詞,固有名詞,一般,*,*,*,東急シアターオーブ,トウキュウシアターオーブ,トーキューシアターオーブ
」	記号,括弧閉,*,*,*,*,」,」,」
など	助詞,副助詞,*,*,*,*,など,ナド,ナド
が	助詞,格助詞,一般,*,*,*,が,ガ,ガ
入居	名詞,サ変接続,*,*,*,*,入居,ニュウキョ,ニューキョ
し	動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
て	助詞,接続助詞,*,*,*,*,て,テ,テ
いる	動詞,非自立,*,*,一段,基本形,いる,イル,イル
。	記号,句点,*,*,*,*,。,。,。

実行例(2)

>>> s = u'ヨーロッパ中央銀行は2012年に仮想通貨を「未制御だが、特殊なバーチャルコミュニティで受け入れ られた電子マネー」と定義付けた。'
>>> for token in t.tokenize(s):
...   print(token)
... 
ヨーロッパ中央銀行	名詞,固有名詞,一般,*,*,*,ヨーロッパ中央銀行,ヨーロッパチュウオウギンコウ,ヨーロッパチューオーギンコー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
2012年	名詞,固有名詞,一般,*,*,*,2012年,ニセンジュウニネン,ニセンジュウニネン
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
仮想通貨	名詞,固有名詞,一般,*,*,*,仮想通貨,カソウツウカ,カソーツーカ
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
「	記号,括弧開,*,*,*,*,「,「,「
未	接頭詞,名詞接続,*,*,*,*,未,ミ,ミ
制御	名詞,サ変接続,*,*,*,*,制御,セイギョ,セイギョ
だ	助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ
が	助詞,接続助詞,*,*,*,*,が,ガ,ガ
、	記号,読点,*,*,*,*,、,、,、
特殊	名詞,形容動詞語幹,*,*,*,*,特殊,トクシュ,トクシュ
な	助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ
バーチャル	名詞,一般,*,*,*,*,バーチャル,バーチャル,バーチャル
コミュニティ	名詞,一般,*,*,*,*,コミュニティ,コミュニティ,コミュニティ
で	助詞,格助詞,一般,*,*,*,で,デ,デ
受け入れ	動詞,自立,*,*,一段,未然形,受け入れる,ウケイレ,ウケイレ
られ	動詞,接尾,*,*,一段,連用形,られる,ラレ,ラレ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
電子マネー	名詞,固有名詞,一般,*,*,*,電子マネー,デンシマネー,デンシマネー
」	記号,括弧閉,*,*,*,*,」,」,」
と	助詞,格助詞,引用,*,*,*,と,ト,ト
定義付け	動詞,自立,*,*,一段,連用形,定義付ける,テイギヅケ,テイギズケ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。

謝辞

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

何か困ったら

Gitter room または Twitter でぜひ気軽に声をかけてください。すぐに解決できるかはわからないですが,なるべく必ず反応します!

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.