-
Notifications
You must be signed in to change notification settings - Fork 52
(very experimental) NEologd 辞書を内包した janome をビルドする方法
ビルド済みパッケージを こちら で公開しています。 更新は不定期です。
バージョン 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 が必要です。
$ 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 インストールの必要はありません。
デフォルトでは,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/ipadic
$ ./build.sh <path-to-mecab-ipadic-neologd-repo>/build/mecab-ipadic-2.7.0-20070801-neologd-<YYYYMMDD> utf8
PyPI 公開の janome と区別するため,setup.py の モジュール名 バージョンを変更しておくことをおすすめします。
$ cd <path-to-janome-repo>
$ vi setup.py
...
setup(
name='Janome',
version=version + '.neologd<neologd-version>', # version を変更
...
setup スクリプトでパッケージを作成します。少し(5分程度)時間がかかります。 dist/
以下にパッケージができれば成功です。 🙌
$ 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 初期化時,mmap=True
オプションが必須です。このオプションをつけないと, LoadingDictionaryError
が発生します。
(venv) $ python
>>> from janome.tokenizer import Tokenizer
>>> t = Tokenizer(mmap=True)
>>> s = u'渋谷ヒカリエは、東京都渋谷区の渋谷駅東口に位置する東急文化会館跡地に建設された複合商業施設 。東急百貨店や飲食店、事務所のほか、ミュージカル劇場「東急シアターオーブ」などが入居している。'
>>> for token in t.tokenize(s):
... print(token)
...
渋谷ヒカリエ 名詞,固有名詞,一般,*,*,*,渋谷ヒカリエ,シブヤヒカリエ,シブヤヒカリエ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
、 記号,読点,*,*,*,*,、,、,、
東京都渋谷区 名詞,固有名詞,地域,一般,*,*,東京都渋谷区,トウキョウトシブヤク,トーキョートシブヤク
の 助詞,連体化,*,*,*,*,の,ノ,ノ
渋谷駅 名詞,固有名詞,地域,一般,*,*,渋谷駅,シブヤエキ,シブヤエキ
東口 名詞,一般,*,*,*,*,東口,ヒガシグチ,ヒガシグチ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
位置 名詞,サ変接続,*,*,*,*,位置,イチ,イチ
する 動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
東急文化会館 名詞,固有名詞,一般,*,*,*,東急文化会館,トウキュウブンカカイカン,トーキューブンカカイカン
跡地 名詞,一般,*,*,*,*,跡地,アトチ,アトチ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
建設 名詞,サ変接続,*,*,*,*,建設,ケンセツ,ケンセツ
さ 動詞,自立,*,*,サ変・スル,未然レル接続,する,サ,サ
れ 動詞,接尾,*,*,一段,連用形,れる,レ,レ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
複合商業施設 名詞,固有名詞,一般,*,*,*,複合商業施設,フクゴウショウギョウシセツ,フクゴーショーギョーシセツ
。 記号,句点,*,*,*,*,。,。,。
東急百貨店 名詞,固有名詞,組織,*,*,*,東急百貨店,トウキュウヒャッカテン,トーキューヒャッカテン
や 助詞,並立助詞,*,*,*,*,や,ヤ,ヤ
飲食店 名詞,固有名詞,一般,*,*,*,飲食店,インショクテン,インショクテン
、 記号,読点,*,*,*,*,、,、,、
事務所 名詞,一般,*,*,*,*,事務所,ジムショ,ジムショ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
ほか 名詞,副詞可能,*,*,*,*,ほか,ホカ,ホカ
、 記号,読点,*,*,*,*,、,、,、
ミュージカル 名詞,一般,*,*,*,*,ミュージカル,ミュージカル,ミュージカル
劇場 名詞,一般,*,*,*,*,劇場,ゲキジョウ,ゲキジョー
「 記号,括弧開,*,*,*,*,「,「,「
東急シアターオーブ 名詞,固有名詞,一般,*,*,*,東急シアターオーブ,トウキュウシアターオーブ,トーキューシアターオーブ
」 記号,括弧閉,*,*,*,*,」,」,」
など 助詞,副助詞,*,*,*,*,など,ナド,ナド
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
入居 名詞,サ変接続,*,*,*,*,入居,ニュウキョ,ニューキョ
し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
いる 動詞,非自立,*,*,一段,基本形,いる,イル,イル
。 記号,句点,*,*,*,*,。,。,。
>>> s = u'ヨーロッパ中央銀行は2012年に仮想通貨を「未制御だが、特殊なバーチャルコミュニティで受け入れ られた電子マネー」と定義付けた。'
>>> for token in t.tokenize(s):
... print(token)
...
ヨーロッパ中央銀行 名詞,固有名詞,一般,*,*,*,ヨーロッパ中央銀行,ヨーロッパチュウオウギンコウ,ヨーロッパチューオーギンコー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
2012年 名詞,固有名詞,一般,*,*,*,2012年,ニセンジュウニネン,ニセンジュウニネン
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
仮想通貨 名詞,固有名詞,一般,*,*,*,仮想通貨,カソウツウカ,カソーツーカ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
「 記号,括弧開,*,*,*,*,「,「,「
未 接頭詞,名詞接続,*,*,*,*,未,ミ,ミ
制御 名詞,サ変接続,*,*,*,*,制御,セイギョ,セイギョ
だ 助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ
が 助詞,接続助詞,*,*,*,*,が,ガ,ガ
、 記号,読点,*,*,*,*,、,、,、
特殊 名詞,形容動詞語幹,*,*,*,*,特殊,トクシュ,トクシュ
な 助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ
バーチャル 名詞,一般,*,*,*,*,バーチャル,バーチャル,バーチャル
コミュニティ 名詞,一般,*,*,*,*,コミュニティ,コミュニティ,コミュニティ
で 助詞,格助詞,一般,*,*,*,で,デ,デ
受け入れ 動詞,自立,*,*,一段,未然形,受け入れる,ウケイレ,ウケイレ
られ 動詞,接尾,*,*,一段,連用形,られる,ラレ,ラレ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
電子マネー 名詞,固有名詞,一般,*,*,*,電子マネー,デンシマネー,デンシマネー
」 記号,括弧閉,*,*,*,*,」,」,」
と 助詞,格助詞,引用,*,*,*,と,ト,ト
定義付け 動詞,自立,*,*,一段,連用形,定義付ける,テイギヅケ,テイギズケ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 記号,句点,*,*,*,*,。,。,。
NEologd 開発者の @overlast さんに感謝いたします。
Gitter room または Twitter でぜひ気軽に声をかけてください。すぐに解決できるかはわからないですが,なるべく必ず反応します!