Posted at

Xonsh のスクリプトで mecab-ipadic-neologd の辞書を更新し、前回との差分を出力する

More than 1 year has passed since last update.

オープンソースで公開されて継続的にメンテナンスされている辞書がある、というのを技術職以外の方と話すことがあります。

そうすると「どれくらいの頻度で更新されてるの?」とか「最近だと、どんな単語が追加されたの?」などといった質問をされて若干回答に窮するので、スクリプトを書いて差分を確認できるようにしてみました。

手元の環境は以下になります。


  • Ubuntu 16.04 LTS

  • Python 3.6.5 :: Anaconda, Inc.

  • xonsh==0.6.9

最近使っている Xonsh で書いてみました。スクリプトは以下になります。

update_neologd

特定ファイル名は Python の記述で取得して、コピーや解凍はいつも通りのシェルコマンドで実行するという使い方が個人的には楽しかったです。(Python でも同じことはできますが)

NEOLOGD_PATH = os.environ.get('NEOLOGD_PATH')

p = Path(NEOLOGD_PATH + '/seed')
seed = list(p.glob('mecab-user-dict-seed.*.csv.xz'))[0]

DIFF_PATH = os.environ.get('DIFF_PATH')
cp @(str(seed)) @(DIFF_PATH + '/diff_from.csv.xz')
xz -dv @(DIFF_PATH + '/diff_from.csv.xz')

直近の更新を確認してみたところ、以下のようになりました。

delete 767

put 2653
edit 0

詳細を読むと以下のような感じでした。(抜粋。< が削除で > が追加)

< イェルクフェルバー

< イェルク・フェルバー
< イェルマーク
< イェレナ
< イエローキッド
< イエロー・キッド
< イゴールオジム
< イゴール・オジム
< イバラキケンドウサンジュウニゴウダイゴミワセン
< イマージュエンターテインメント
< イーゴリジューコフ
< イーゴリ・ジューコフ
< ウェスタ神殿
< ウォルターヴァンベイレンドンク
< ウガヤフキアエズ
< ウドムルトの首長

> イイジャンファクター
> イェベホイビェア
> イェベ・ホイビェア
> イェルクフェルバー
> イェルク・フェルバー
> イェルマーク
> イェレナ
> イエスプライムミニスター
> イエス・プライム・ミニスター
> イエローキッド
> イエロー・キッド
> イエンバイ
> イギリスの欧州連合離脱是非を問う国民投票
> イゴールオジム
> イゴール・オジム
> イタロケルト語派
> イタロ・ケルト語派
> イッタイデンドウニナニガオキタノカ
> イナリ
> イルダガデア
> イルダ・ガデア
> インガロンダキング
> インガ・ロンダ・キング
> インターナリン
> インナーウエア
> インプロバブルワールズ
> インプロバブル・ワールズ
> イーゴリジューコフ
> イーゴリ・ジューコフ
> イーストサイド名店街
> ウィザーディングワールド
> ウィザーディング・ワールド
> ウィネパングの戦い
> ウェスタ川越
> ウェストコーストポップ
> ウェストサイドストーリー
> ウェストサイド物語
> ウェストナイルウイルス
> ウェスト・サイド物語
> ウェディングバトルアウトな男たち
> ウェディング・バトルアウトな男たち
> ウェブユーエスビー
> ウェンディージム
> ウエスタングローバルエアラインズ
> ウエスタン・グローバル・エアラインズ
> ウエストバージニア
> ウエストヴァージニア州
> ウォルターデシルヴァ
> ウォーフロント
> ウガヤフキアエズ
> ウソ発見器
> ウドムルトの首長

単語だけ出力したので、品詞情報だけ変更になっているものもありそうですね。

今回スクリプト書いてみて、追加だけでなく削除も行って品質を向上させているのが判って良かったです。

aliases に設定しても良さそうですし、@NEologdOfficial で更新のアナウンスがされた際などに実行して確認してみたいと思います。


参考になった記事

Pythonistaに贈るXonshのススメ