namazu-ml(avocado)


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

long katakana word and phrase search problem



高林です

長いカタカナ語をわかち書きしてフレイズとして扱ったときに検索結果が
不気味になってしまうという意見をもらいました。わかち書きもフレイズ
検索もどちらも安易な実装なので仕方がないのですが、とりあえずカタカ
ナ語のときはわかち書きしないというパッチを作りました。

-- Satoru Takabayashi

diff -c namazu-1.2.0.6/src/wakati.c namazu-1.2.0.7-beta-1/src/wakati.c
*** namazu-1.2.0.6/src/wakati.c	Tue Sep  8 00:42:01 1998
--- namazu-1.2.0.7-beta-1/src/wakati.c	Tue Sep  8 13:01:42 1998
***************
*** 31,36 ****
--- 31,39 ----
  #include "util.h"
  
  #define iseuc(c)  ((c) >= 0xa1 && (c) <= 0xfe)
+ #define is_kanji(c)  (iseuc(*c) && iseuc(*(c+ 1)))
+ #define is_katakana(c)  ((int)*c >= 0xa5 && \
+                          (int)*(c + 1) >= 0xa0 && (int)*(c + 1) <= 0xff)
  
  void wakati(uchar *key)
  {
***************
*** 40,47 ****
      for (i = 0; i < strlen(key); i++) {
  	if (iseuc(*(key + i))) {
  	    key_leng = 0;
! 	    for (j = 0; iseuc(*(key + i + j)) 
! 		     && iseuc(*(key + i + j + 1)); j += 2) {
  		uchar tmp[BUFSIZ];
  
  		strncpy(tmp, key + i, j + 2);
--- 43,51 ----
      for (i = 0; i < strlen(key); i++) {
  	if (iseuc(*(key + i))) {
  	    key_leng = 0;
! 	    for (j = 0; is_kanji(key + i + j) && (!is_katakana(key + i + j));
!                  j += 2) 
!             {
  		uchar tmp[BUFSIZ];
  
  		strncpy(tmp, key + i, j + 2);