CJKSplitterでカタカナ検索
ふと、このサイトのLiveSearch(右上の検索ボックス)でカタカナの検索ができないことに気づきました。
Plone内コンテンツの検索用インデックスを作成するために CJKSplitter という文字分割ツールを使っているのですが、どうもこれに問題があるようです。そういえば、前にlirisさんがCJKSplitterでカタカナのパッチを書いたと言っていました。そこで、lirisさんの日記を探してみるとありました、ありました。
インデックスされたものの中をみると、カタカナのインデックスがないような気がする。漢字やひらがな、英語などは問題なさげ。やっぱり、カタカナはごっそり落としていました。とりあえず、パッチ書こう。 ということで、パッチをacceptしてもらえました。かたかなを知らなかったみたいです。こういう理由は好きです。次のバージョンでカタカナも大丈夫になるはず。 cjksplitter — Emerge Technology
なるほど、CJKSplitterの作者は中国の人でしたから、片仮名を知らないというのも納得がいきます。でも、このパッチは半年たった今でも最新版に反映されていないんですね。でも、その肝心のパッチがみつからない… 仕方がないので、CJKSplitter.pyを見てみると、平仮名の範囲に片仮名の文字集合を追加してあげるだけでした(下記参照)。この後、インデックスを再構築することで無事にカタカナでも検索できるようになりました。
\u3040-\u309f → \u3040-\u30ff
ちなみに私も形態素解析よりもN-gram方式のほうが好きです。形態素解析だと辞書に依存するので、辞書に登録されていない単語は非常に弱いです。N-gramだと、文章をただの文字の並びとしかみないので、検索の漏れも少ないようです。
- 今回の教訓:
- Use the Source, Luke!









