関係各位、
お世話になっております。

text::kakasiにてkakasiのライブラリ処理内にて
不具合が発生していましたので、報告させていただきます。

【動作環境】
OS              :AIX 5.3
perl            :5.8.2
kakasi          :2.3.4
text::kakasi    :2.04
itaijidict      :kakasiのデフォルト辞書
kanwadict       :kakasiのデフォルト辞書
LANG            :ja_JP.SJIS(AIXのデフォルトJa_JPから変更)

【使用用途】
namazuにてtext::kakasiを使用した分かち書きをしたい。

【現象】
kakasiコマンドとtext::kakasiにて"引越を考えています。"を分かち書きすると
以下のような差異がでました。
・kakasi(パラメータ:-isjis -osjis -w)
        "引越 を 考え ています 。"
・text::kakasi(パラメータ:-isjis -osjis -w)
        "引 越 を 考え ています 。"

kanwadictには"引越"が存在するのですが、text::kakasiではうまく処理されません
でした。
また、Windows環境で動作した場合にはtext::kakasiでもkakasiコマンドと
同じ結果が返されました。

AIX特有の現象かもしれません。

【原因】
ライブラリ化されたitaiji.cソース内のmkitaijitbl関数にて
kakasiコマンドとの実行結果に相違がありました。

64行目から
    while(fgets(buffer, BUFSIZE, fp) != NULL) {
/* デバッグ用に追加 */fprintf(stderr, "%s", buffer);
        sscanf(buffer, "%1c%1c%1c%1c", &n1, &n2, &o1, &o2);
        n1 &= 0x7f;
        n2 &= 0x7f;
        ittbl1[n1][n2] = o1;
        ittbl2[n1][n2] = o2;
/* デバッグ用に追加 */fprintf(stderr, "mkitaijitbl::changeAfter::n1(%d):n2(%
d):o1(%d):o2(%d)\n", n1, n2, o1, o2);
    }

kakasiコマンドにて実行(パラメータ -isjis -osjis -w )
        芦蘆
        mkitaijitbl::changeAfter::n1(176):n2(178):o1(233):o2(195)
        壱一
        mkitaijitbl::changeAfter::n1(176):n2(237):o1(176):o2(236)
        苅刈
        mkitaijitbl::changeAfter::n1(180):n2(163):o1(180):o2(162)
        舘館
        mkitaijitbl::changeAfter::n1(180):n2(220):o1(180):o2(219)
        曽曾
        mkitaijitbl::changeAfter::n1(193):n2(190):o1(193):o2(189)
        ・
        ・
        ・

perlよりtext::kakasiを実行(パラメータ -isjis -osjis -w )
        芦蘆
        mkitaijitbl::changeAfter::n1(176):n2(178):o1(233):o2(10)
        壱一
        mkitaijitbl::changeAfter::n1(176):n2(250):o1(204):o2(10)
        苅刈
        mkitaijitbl::changeAfter::n1(180):n2(163):o1(180):o2(162)
        舘館
        mkitaijitbl::changeAfter::n1(180):n2(220):o1(180):o2(219)
        曽曾
        mkitaijitbl::changeAfter::n1(193):n2(190):o1(193):o2(189)
        ・
        ・
        ・

上記結果よりbufferには正しくitaijidictのレコードが取り出されているのですが、
sscanfにて1文字づつ分けた結果が異なっております。

【対処】
        sscanf(buffer, "%1c%1c%1c%1c", &n1, &n2, &o1, &o2);
を
        n1 = buffer[0];
        n2 = buffer[1];
        o1 = buffer[2];
        o2 = buffer[3];
に変更したところ、text::kakasiでも正常に分かち書き出来るようになりました。


何故コマンドラインとperlからのコールにて差異が出るのかは
納得できていませんが、何かの役に立てればと思い、取り合えず
ご報告させていただきます。

以上


_______________________________________________
Kakasi-dev mailing list
[email protected]
http://www.namazu.org/cgi-bin/mailman/listinfo/kakasi-dev

メールによる返信