misima 漢詩作成支援 SQLite3 オペレーション・メモ

misima 漢詩作成支援: 平仄音韻分析・詩語検索 misimakansiservlet を使っている方からメールをいただいた。そこで思い出したように,久しぶりに辞書のメンテナンスを行った。平仄などのデータを格納した辞書=漢字データベースは SQLite3 で作成したのだけど,SQLite3 オペレーションを中心とするメンテナンス手順を忘れてしまっていた。思い出したのを整理し,ここにも備忘録を残しておく。以下,beatirce:/home/isao[nnnn] % は misima サーバ機端末の tcsh プロンプト,nnnn はコマンド履歴番号を示す。

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 のスキーマ(データ項目とその属性)を定義する元ネタである。misimakansiservlet の場合は以下のようなものである。

-- -*- 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/local/etc/misima/ の下にコピーする。これで Web サーブレットから使えるようになる。以下,SQLite3 DB 操作のメモ。

  1. SQLite3 コマンドラインの起動
  2. 扱う DB を引数に指定する。
    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>
  3. テーブル名の表示
  4. sqlite> .table
    KANJITBL
  5. DB スキーマの表示
  6. 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
    );
  7. DB 件数の確認
  8. sqlite> select count(*) from KANJITBL;
    6929
  9. tcsh コマンドラインから直接 SQL を入力する
  10. sqlite3 [opt] [db-file] に続けてクオート(ダブルクオーテーションマークで括る)して SQL 文を書けばよい。SQLite3 は標準入力からも SQL を受け付けるので,テキストファイルに書いておきリダイレクトで読み込ませてもよい。
    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:艷|ぜん;ねん|-|ほおひげ;鬚髯:柔らかいあごひげとほおひげ;

これで追加した漢字の平仄分析ができるようになった。

20111008-kanjituika.png
初めてのSQL
Alan Beaulieu
オライリージャパン