namazu-dev(ring)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: trouble: namazu mistakes to wakatize



masao@xxxxxxxxxx (Masao Takaku) wrote:

>> 昨日から急に namazu がわかち書きに失敗するように
>> なり検索できなくなってしまいました。
>
>確認ですが、
>ここで説明されているのは、
>「全文」で検索すると、「甦蠍」とわかち書きされている、
>ってことですか?
>
>> namazu(debug): query: [全文]
>> namazu(debug): Query.tabN: 1
>> namazu(debug): wakati original: [甦蠍].

このデバッグ用メッセージの [全文] と [甦蠍] の部分の 
encoding は EUC-JP ですか? それとも ISO-2022-JP ですか? おそ
らく前者だと思いますが。


>ちょっと気になって見てみましたが、
>
>% echo 全文 | nkf | od -c
>0000000 033   $   B   A   4   J   8 033   (   B  \n
>
>% echo 甦蠍 | nkf | od -c
>0000000 033   $   B   a   4   j   8 033   (   B  \n
>
>のようにどうも、JISコードシーケンスに対して、
>case-insensitiveな検索を行なっているように見えませんか?

わかち書きをする処理の少し前の段階で nmz_strlower() という関
数を呼び出しています。

  void nmz_strlower(char *str)
  {
      while (*str) {
	  *str = tolower(*str);
	  str++;
      }
  }

もしかしたら、この関数が EUC-JP の

  % echo '全文' |od -t x1
  c1 b4 ca b8 0a

を

  % echo '甦蠍' |od -t x1
  e1 b4 ea b8 0a

に変換してしまっているのかもしれません。tolower() 関数の挙動
が

>恐らく~/.namazurcあたりで設定しているであろう、LANG指定を
>> 45: DIRECTIVE: [LANG]
>>     ARG1: [ja_JP.JIS7]

によっておかしくなってしまったのかもしれません。(localeはよ
くわからん)

search.c の 974行目あたりを修正して、 nmz_strlower() の前後
で文字列を出力させるとはっきりします。確認してもらえませんか?

  nmz_debug_printf("before nmz_strlower: [%s]", key);
  nmz_strlower(key);
  nmz_debug_printf("after nmz_strlower:  [%s]", key);

-- Satoru Takabayashi
One person's data is another person's program. -- Guy L. Steele, Jr.