Kouhei Sutou
kou****@clear*****
2014年 1月 28日 (火) 17:40:45 JST
須藤です。 In <CANM+Hhc70-_9vDEi****@mail*****> "[groonga-dev,02075] Re: 複数の検索クエリがある場合のスニペットの取得対象について<Groonga>" on Tue, 28 Jan 2014 08:47:25 +0900, Naoya Murakami <visio****@gmail*****> wrote: >> あぁ、groonga-normalizer-mysqlに入っているノーマライザーは部 >> 分的にしかノーマライザーの機能を実装していないからかもしれま >> せん。ノーマライズ前は何バイト目にあった文字か、という情報を >> 入れれば動きそうな気が。。。 >> (空白を削除するとか、いわゆる全角文字を半角文字に正規化した >> りすると何バイト目かというのがずれるので、それを補正するため >> の情報です。) >> > > ご説明ありがとうございます! > おかげでgrn_stringのchecksが何者か把握することができました。 > > grn_string_set_checksを使って、grn_stringのchecksをぽつぽつ > 入れていけば、いけそうです! お、あたっていましたね! > とりあえず、スペースのみのずれならできるようになりました。 > まだ全角を含むときがうまくいってないのですが、normalizer.cの > utf8_normalizeの実装を参考にすれば、対応できそうです。 > (この関数、1文字、2文字変数が多くて読むのが大変。。) す、すみません。。。 NormalizerAuto(NormalizserNFKC51)は1文字で「キロメートル」 (U+3315)となっているやつを6文字で「キロメートル」に展開し たりするので処理しながらchecksを伸ばしていますが、 groonga-normalizer-mysqlのやつはそんなことはせずに一文字ずつ 正規化しているはずな気がするので、最初に必要な分だけchecksの 領域を確保できます。なので、少し楽かも。。。 > これで先頭N文字を取得する関数とか所定のタグ範囲を取得する関数を作れば、 > Googleみたいにスニペットがないときは、<meta name="description">の内容 > を取得するとかできそうですね! 先頭N文字を取得する関数は組み込みであるとうれしそうですね! タグ範囲を取得ではないのですが、テキストからHTMLのタグを抜く やつはhtml_untag()というのがすでにあったりします! http://groonga.org/ja/docs/reference/functions/html_untag.html -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) Groongaサポート: http://groonga.org/ja/support/ パッチ採用はじめました: http://www.clear-code.com/recruitment/ コミットへのコメントサービスはじめました: http://www.clear-code.com/services/commit-comment.html