[netatalk-ja:0191] Re: Spotlightと日本語

Hiroyuki Sato hiroysato @ gmail.com
2013年 5月 3日 (金) 22:23:39 JST


HATさん・湯浅さん

Scientific Linux 6上でspotlight版netatalkを動かすのは挫折気味です。

FPCatSearchの方は調べてみたいと思います。
あんまり時間を割けないので期待しないでください。


2013年5月3日 0:16 HAT <hat @ fa2.so-net.ne.jp>:

> HATです。
>
> Wed, 24 Apr 2013 01:27:17 +0900, Hiroyuki Sato <hiroysato @ gmail.com>:
> > まだ湯浅さんのところまで追いついておりません。
> > 今しばらくお待ちください。
>
> CentOS 6上でtrackerのインストールに成功したとしても、その手順は極めて
> 難解であり、情報を公開したところで社会的な貢献度は希薄だと思います。
> やるだけ無駄じゃないでしょうか。
> Spotlightの検討をするならば、trackerのパッケージが用意されているOS上で
> 行うべきでしょう。
>
> それよりも、FPCatSearchで曖昧検索を実装するのはどうでしょうか。
>
> ドイツ語の「ß」とASCIIの「ss」と同一視するテーブルはどれなのか
> 調べたところ、見つかりました。
> http://www.unicode.org/Public/UNIDATA/CaseFolding.txt
>
> 00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S
> 1E9E; F; 0073 0073; # LATIN CAPITAL LETTER SHARP S
>
> case foldingすればßやẞがssになります。
> つまり、case foldingとNFKD化の両方をやってから文字列比較すれば
> 曖昧検索できます。
>
> CentOS 6にはlibunistringパッケージがあるので、netatalkがこれを呼び出せば
> いいんです。
> http://www.gnu.org/software/libunistring/manual/libunistring.html
>
> ズバリこの関数です。
> uint16_t * u16_casefold (const uint16_t *s, size_t n, const char
> *iso639_language, uninorm_t nf, uint16_t *resultbuf, size_t *lengthp)
>
> 具体的には、
> u16_casefold(文字列, 文字数, NULL, UNINORM_NFKD, resultbuf, lengthp)
> としてやると、case foldしてからNFKD化した文字列がresultbufに入ります。
>
> 現在のnetatalkのFPCatSearchはetc/afpd/catsearch.c内で実装されており、
> 部分一致検索の場合、strcasestr_w()
> 完全一致検索の場合、strcasecmp_w()
> を呼び出して比較しています。
>
> この部分に手を加えて、文字列をu16_casefold()で変換してから、
> 部分一致検索の場合、strstr_w()
> 完全一致検索の場合、strcmp_w()
> を呼び出して比較すれば、たぶん曖昧検索できます。
>
> --
> HAT
>



-- 
Hiroyuki Sato


netatalk-ja メーリングリストの案内