KND の備忘録

2015-04-04のメモです。

主に関ジン研(関東ジンギス研究会)からのリンクのためと、食べ歩きの際に前回いつ行ったかを自分で検索するために記述を残しています。稀に雑多なことを書いたりもします。


LIRS: 更新の確認にご利用下さい。
カテゴリ: EmacsLisp | Ruby | tDiary | そよかぜ | たべある記 | 羊肉 | 自作ソフト | 花配列 | 超多段シフト | 辛いもの | 雑記 |

2015-04-04 (Sat)

[超多段シフト] 『風』Ver.2 の辞書の構造が少しわかったかもしれない

先日の、『風』Ver.2 の辞書をsms.txtにするRubyスクリプトで変換した sms.txt に「餃」の字がない件の続き。

辞書の中身を見る限り、『風』Ver.2 の辞書をsms.txtにするRubyスクリプトの仮定に少し間違いがあるような気がする。

  1. Wind2.reaのヘッダサイズは 0x280 でなく 0x298 だと思う。
  2. Wind2.dic内にある、漢字のエントリ(key_codeと漢字からなる)1つのサイズを 3バイト固定としているけど、可変長だと思う。
  3. Rubyスクリプトで nazoと表現している情報は、yomiという読みを持つ漢字のエントリが続くバイト長だと思う。

2つ目は少し説明が必要かもしれない。RubyスクリプトではWind2.dic内にある yomiのエントリを、1バイトのkey_code と 2バイトの漢字であるという処理になっているけど、実際には key_code が 1バイトであるとは限らないみたい。具体的には、key_codeが 1〜254 だと \x01〜\xFE の 1バイトで、key_code が 255以上(理論上 509以下)は \xFF\x00、\xFF\x01、\xFF\x02、\xFF\x03 … の 2バイトで表現しているように見える。これ、自然数 n = 255q_n + r_n (但し 0≦r_n<255)を、q_n個の \xFFに r_nのバイト表現を連結したバイト列(計(q_n + 1)バイト)として表現するような、接頭符号化の一種*1なんじゃないかな。

とりあえず、これを正しいものと仮定して Rubyスクリプトを修正してみたところ、sms.txtにおける「コウ」の読みに対応する出力が、7ページ目も 8ページ目も含めて『風』の表示する仮想鍵盤と一致した。きっと、辞書のヘッダも何か情報を持っているのだろうけど、sms.txtにするだけならどうやらこれでうまくいっているみたい。

*1 この場合、接頭部集合は \x00〜\xFE(符号語は接頭部そのもの)と \xFFの 1個以上連続したバイト列(符号語は接頭部とその次の \xFF以外の 1バイト)から構成される。



最近のツッコミ:


KND への連絡は以下まで。
m・knd◎zob・jp (「◎」を「@」、「・」を「.」に置換え)