Kanhiraその3、複数の辞書
※Kanhiraについては/tag/kanhiraを参照されたい。
これはKanhiraその2、辞書の構造の続きである。0.7から複数の辞書を扱えるようになった。
複数辞書の指定
以前のバージョンでは単一の辞書しか使用できなかったのだが、0.7以降は複数辞書を扱えるようになった。
KanwaDict dict0 = ...
KanwaDict dict1 = ....
Kanhira kanhira = new Kanhira(dict1, dict0);
この場合Kanhiraコンストラクタにおいて先に記述された方が優先される。
この意図としては、テキストファイルを読み込んで作成される「かかし」辞書に加え、ユーザがデータベース等に自由に辞書登録を行い、それを「かかし」辞書よりも優先して引くということだ。
つまり、具体的には以下のように初期化する。
KanwaDict dict0 = KakasiDictReader.load(/* InputStream */);
KanjiYomiMap dict1 = new KanjiYomiMap();
// dict1にDBなどから読み込む
kanhira = new Kanhira((KanwaDict)dict1, dict0);
KanjiYomiMap
KanjiYomiMapはスレッドセーフなので、Kanhiraがdict1を利用している最中にaddやremoveで辞書メンテを行って構わない。
/**
* 漢字とそのよみを登録する。
* 送り仮名の無い場合には"悪代官", "あくだいかん"のように登録すればよいが、送り仮名の
* ある場合にはそれを半角小文字アルファベットにする必要がある。
* 例えば、"悪名高い"の場合には"あくめいたかi"
* @param kanji 漢字。例えば"悪名高"
* @param yomi よみ。例えば"あくめいたかi"
*/
public synchronized void add(String kanji, String yomi) {
/**
* 指定された登録を削除する。
* 漢字だけではなく、よみも必要。
* 例えば、同一の漢字でも「悪名高:あくめいたかi」、「悪名高:あくめいたかk」などと複数登録されていることがある。
* @param kanji 漢字
* @param yomi よみ
* @return
*/
public synchronized boolean remove(String kanji, String yomi) {