misima 漢詩作成支援: 平仄音韻分析・詩語検索 misimakansiservlet を使っている方からメールをいただいた。そこで思い出したように,久しぶりに辞書のメンテナンスを行った。平仄などのデータを格納した辞書=漢字データベースは SQLite3 で作成したのだけど,SQLite3 オペレーションを中心とするメンテナンス手順を忘れてしまっていた。思い出したのを整理し,ここにも備忘録を残しておく。以下,beatirce:
misimakansiservlet において,漢詩分析デーモン misimakansiserver は漢字データベース KANJITBL で見つからなかった文字をログに出力するようになっている。私はこれを定期的にチェックし,それらの辞書にない文字(ユーザが入力したが辞書になかった漢字)を手作業で DB に追加する。ログのその部分を抽出する。
beatirce:/home/isao[1001] % grep -e '\*\*\*' /var/log/kansiserver.log | sort | uniq ***** 㱕 が KANJITBL にありません. ***** 僲 が KANJITBL にありません. ***** 嵆 が KANJITBL にありません. ***** 扃 が KANJITBL にありません. ***** 涴 が KANJITBL にありません. ***** 疴 が KANJITBL にありません. ***** 裛 が KANJITBL にありません. ***** 髥 が KANJITBL にありません.
というわけで,今回この 8 文字を追加。漢字字典を調べ,平仄,読み,語義などを DB のソースコード kanji.src にテキストエディタで追加する。完了したら,create table で漢字データベースファイル KANJI.db を生成する。そしてこれに kanji.src の内容を .import コマンドでロードする。kanji.src のデータ記述はカンマ区切りの CSV 形式なので,ロード実行には -separator , オプションを指定している。
beatirce:/home/isao[1005] % sqlite3 KANJI.db < mkkanji.sql beatirce:/home/isao[1006] % sqlite3 -separator , KANJI.db ".import kanji.src KANJITBL"
ここで,mkkanji.sql とは create 文で DB のスキーマ(データ項目とその属性)を定義する元ネタである。misima
-- -*- coding: utf-8; mode: sql; -*- -- misimakansiservert 平仄音韻分析用漢字テーブルレイアウト -- 漢字 ji, 平仄 hs, 韻 in1, 韻 in2, 音読 yo, 訓読 yk, 備考 bk create table KANJITBL ( ji text not null, hs text not null, in1 text not null, in2 text not null, yo text not null, yk text not null, bk text not null );
これで漢字データベースはできた。データ内容を確認して問題なければ,/usr/
- SQLite3 コマンドラインの起動 扱う DB を引数に指定する。
- テーブル名の表示
- DB スキーマの表示
- DB 件数の確認
- tcsh コマンドラインから直接 SQL を入力する sqlite3 [opt] [db-file] に続けてクオート(ダブルクオーテーションマークで括る)して SQL 文を書けばよい。SQLite3 は標準入力からも SQL を受け付けるので,テキストファイルに書いておきリダイレクトで読み込ませてもよい。
beatirce:/home/isao[1009] % sqlite3 KANJI.db SQLite version 3.7.7.1 2011-06-28 17:39:05 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite>
sqlite> .table KANJITBL
sqlite> .schema KANJITBL CREATE TABLE KANJITBL ( ji text not null, hs text not null, in1 text not null, in2 text not null, yo text not null, yk text not null, bk text not null );
sqlite> select count(*) from KANJITBL; 6929
beatirce:/home/isao[1011] % sqlite3 KANJI.db "select * from KANJITBL where ji='髥';" 髥|◎|hs:14:塩|sk:29:艷|ぜん;ねん|-|ほおひげ;鬚髯:柔らかいあごひげとほおひげ; beatirce:/home/isao[1012] % cat sql.txt select * from KANJITBL where ji='㱕'; select * from KANJITBL where ji='僲'; select * from KANJITBL where ji='嵆'; select * from KANJITBL where ji='扃'; select * from KANJITBL where ji='涴'; select * from KANJITBL where ji='疴'; select * from KANJITBL where ji='裛'; select * from KANJITBL where ji='髥'; beatirce:/home/isao[1013] % sqlite3 KANJI.db < sql.txt 㱕|○|hk:05:微|-|き|かえる;かえす|帰・歸の異体字; 僲|○|hs:01:先|-|せん|-|仙人;僊の異体字; 嵆|○|hk:08:齊|-|けい;げ|-|稽古の当て・古いことを集めて考える;嵆山:山の名;嵆康:姓の一; 扃|○|hs:09:青|-|けい;きょう|-|かんぬき;とざす; 涴|●|sj:13:阮|sk:21:箇|えん;おん;わ|-|涴演:川が曲がりまわって流れるさま;けがす・けがれる; 疴|◎|hs:05:歌|sk:22:禡|あ;か;け|-|やまい;痾に同じ・痾疾; 裛|●|sn:14:緝|sn:16:葉|ゆう;おう;よう|-|つつむ・香がまとわりつく;書物の覆い;しっとりと濡れる; 衣の部; 髥|◎|hs:14:塩|sk:29:艷|ぜん;ねん|-|ほおひげ;鬚髯:柔らかいあごひげとほおひげ;
これで追加した漢字の平仄分析ができるようになった。