Namazu2.0.14とKakasiを使用してWindows上でシステムを構築しました。日本語にも英語にも対応する為に

Langの設定を外しindex作成時にja_JP.SJISで設定して英語、日本語の検索は同じIndexを使用し
別URL(urlにlang= かlang=ja_JP.SJISを指定する)を使用してそれぞれ英語版、日本語版と
使用することができました。
ところがこの英語版というのが曲者で実際に使用する際には検索文字に日本語をいれる事が
あるので実際英語版と日本語版でそれぞれ「その他」などを検索してみると日本語版では
参考ヒット数: { [ その: 15 ] [ 他: 6 ] :: 4 }などのようにわかち書きができるのですが
英語版だと References: [ その他: 0 ]となりわかち書きができません。
nmz.wをみると「その」と「他」がそれぞれ別にindex化されているので英語版でも
「その」で検索すると問題なくHitするのですが、日本語版と英語版でそれぞれ同じ日本語をいれた際に同じ検索結果にならないのですが、これは英語版のNamazuの場合kakasiを使用したわかち書きが使用できないという認識で正しいのでしょうか?

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/07/28 13:50:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント35pt

Langを省略しても“英語版”にはならないと思います。

手元にWindows版が無いので確実なことは言えませんが、Linux版ではデフォルトLangが "ja_JP.euc.JP" なので、検索時にEUC-JPとして処理しているのではないかと推測します。

id:mach_club

>pahooさん 

早速の返信ありがとうございます。

英語版という表現が悪かったのかもしれません。申し訳ありません。私は

http://www.namazu.org/doc/manual.html

の"検索結果の言語を選択する"での記述を見て現在クエリーストリングでlangを指定しています。この際にlangの指定をそれぞれ

ja or (blank)にすることによってNMZ.headなどのテンプレートはそれぞれNMZ.head.ja(日本語版) or NMZ.head(英語版)がそれぞれ使用されResultも各々のresultを使用しています。確かにlangの指定はデフォルトでwindowsではja_JP.SJISなのですが、環境変数及び、namazu.rcなどのlangをコメントするとindex作成時はeucで作成されていました、その為漢字などが文字化けした状態でindexが作成されていましたので、index作成時にoptionで-Lを使いsjisでindexを作成しました。その後英語版の検索をおこないましたが、英語はアドレスを見る限り検索文字列をeucjpに変換しindexファイルを検索しているようですが、その際に"その他"という検索文字列が

[現状]

"その" "他" (日本語版)

"その他"(英語版)

[理想]

"その" "他" (日本語版)

"その" "他" (英語版)

と検索しているようです。英語版でも検索文字列を "その 他"とスペースをいれると日本語版と同じような検索内容及び検索結果となるのですが英語版ですとどの言葉でも検索文字列を自動でわけて処理する事はないようなのですが、この文字の分割処理(分かち書き)のシステムが英語版だと動かないものと理解しました。なぜなら英語版(NMZ.headなどを使用される場合)などは基本アルファベットで文字の分割はスペースを持って判断をする為分かち書きが動かないのではないかと推測しております。ただこの部分はあくまで私の推測ですので、今回同じような経験で英語環境化で日本語を使用された場合のNamazu+kakasiでの分かち書きの動きを確認させて頂きたかった次第です。又動きとしては日本語版と英語版とで同じ検索方法を取り検索結果を同じにしたいのですが、その手段があるのかどうかをもしご存知であればご教授願えますでしょうか

2008/07/21 18:28:02
id:i_kumagoro No.2

回答回数170ベストアンサー獲得回数58

ポイント35pt

これは英語版のNamazuの場合kakasiを使用したわかち書きが使用できないという認識で正しいのでしょうか?

この認識で正しいです。

ソースの nmz/search.c を見れば分かりますが、kakasiを呼び出している部分が

>|c|

if (nmz_is_lang_ja()) {

if (nmz_wakati(tmpkey)) {

val.stat = ERR_FATAL;

return val;

}

/* Re-examine because tmpkey is wakatied. */

if (strchr(tmpkey, '\t')) {

mode = PHRASE_MODE;

} else {

mode = WORD_MODE;

}

}

||<

のように書かれており、nmz_is_lang_ja関数(ここで環境変数を見ています)で日本語と判定されなければkakasiは呼ばれません。

ソースを変更するか、英語のテンプレートを*.jaに名前を変更したcgiを追加でもう一組入れる等して対応する必要があると思います。

id:mach_club

ありがとうございます。納得できました。Namazuを使用してシステムを構築する場合、

ある程度のものは簡単に作成できるのですが、カスタマイズをしていくにしたがって

情報の集め方やNamazuメーリングリスト(現在も受付られているんですかね?)など

を使用しましたがかなり苦戦します。。今回この用なすばやい回答を頂き大変助かりました。

2008/07/22 22:10:41

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません