namazu-ml(avocado)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
long katakana word and phrase search problem
- From: Satoru Takabayashi <ccsatoru@xxxxxxxxxxxxxxxxxx>
- Date: Tue, 8 Sep 1998 13:18:55 +0900
- X-ml-name: namazu
- X-mail-count: 01127
高林です
長いカタカナ語をわかち書きしてフレイズとして扱ったときに検索結果が
不気味になってしまうという意見をもらいました。わかち書きもフレイズ
検索もどちらも安易な実装なので仕方がないのですが、とりあえずカタカ
ナ語のときはわかち書きしないというパッチを作りました。
-- 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);