わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

C/Migemoで「令和」を検索したい!~辞書を独自ビルド

 はじめに,検索結果画面を:

 当ブログとサブブログ(かけ算の順序の昔話)のそれぞれで,記事をタイトルや日付から検索したり,はてな記法でリンクを貼り付けたりするため,1行1記事でテキストファイル(上記ではtakehikoMultiply_title.txt)を作成していて,Emacsでファイルを開き,検索を行っています.下段(ミニバッファ)で表示されているように,打ち込んだのは「reiwa」です.インクリメンタルサーチの機能により,ファイル内の「令和」を表示しています.
 ローマ字入力で日本語インクリメンタルサーチを行うソフトウェアといえば,Migemoです.

 しかしそこでダウンロードできるソフトウェアでは,辞書に「令和」が含まれていません.ただし,辞書がSKKベースであることを知っていれば,Migemoで「reiWa」とタイプすることで,(「れい」と「わ」の並びとしての)「令和」にヒットすることはできていました.
 「reiwa」で「令和」を検索できるといいなあ,新語をMigemoの辞書に取り入れたいなあと思いながら,今年になってGoogle検索をしていると,その方法や,辞書ファイルのURLが,公開されているのを知りました*1

 L辞書と,jinmei,geo,propernoun,stationの各専門辞書を取り入れることとしました.コマンドは以下の通りです.C/Migemoは事前に~/bin/cmigemoにインストール済みです.

$ cd ~
$ git clone https://github.com/koron/cmigemo.git
$ cd cmigemo
$ ./configure
$ make gcc
$ make gcc-dict
$ cd dict
$ for n in jinmei geo propernoun station; do wget "https://skk-dev.github.io/dict/SKK-JISYO.${n}.gz" ; gzip -d "SKK-JISYO.${n}.gz" ; done
$ perl ../tools/skk2migemo.pl < SKK-JISYO.{L,jinmei,geo,propernoun,station} > dict.tmp
$ perl ../tools/optimize-dict.pl < dict.tmp > base-dict2
$ nkf -x -s < base-dict2 > migemo-dict2
$ mkdir -p migemo-dict-enriched-20240327
$ iconv -t utf-8 -f cp932 < migemo-dict2 > migemo-dict-enriched-20240327/migemo-dict
$ mv ~/bin/cmigemo/share/migemo/utf-8/migemo-dict{,.bak}
$ cp migemo-dict-enriched-20240327/migemo-dict ~/bin/cmigemo/share/migemo/utf-8/migemo-dict

 Emacsを起動し直して,テキストファイルを開き,C-sのあとreiwaで,記事冒頭の表示を得ることができました.
 コマンドラインで,新旧辞書の違いを確認しておきましょう.

$ cd ~/cmigemo
$ ./build/cmigemo -d ~/bin/cmigemo/share/migemo/utf-8/migemo-dict -e 
migemo_open("略/migemo-dict")=略
clock()=0.102628
QUERY: reiwa
PATTERN: \(レ\s-*イ\s-*ワ\|レ\s-*イ\s-*ワ\|例\s-*話\|令\s-*和\|れ\s-*い\s-*わ\|r\s-*e\s-*i\s-*w\s-*a\|r\s-*e\s-*i\s-*w\s-*a\)
QUERY: ^C
$ ./build/cmigemo -d ~/bin/cmigemo/share/migemo/utf-8/migemo-dict.bak -e
migemo_open("略/migemo-dict.bak")=略
clock()=0.053427
QUERY: reiwa
PATTERN: \(レ\s-*イ\s-*ワ\|レ\s-*イ\s-*ワ\|例\s-*話\|れ\s-*い\s-*わ\|r\s-*e\s-*i\s-*w\s-*a\|r\s-*e\s-*i\s-*w\s-*a\)
QUERY: ^C

 migemo-dictを指定して,「reiwa」を与えると,PATTERNの行に「令\s-*和」が出現するのに対し,migemo-dict.bakには含まれていません.これで,バッチリです.

*1:今回使用していませんが,各辞書ファイルのサイズや作成日などを一覧するには,http://openlab.ring.gr.jp/skk/dic/がおすすめです.