[groonga-dev,04408] Re: 日本語、英語、仏語のまざった文章で複数形や過去形をフォローできますでしょうか

Back to archive index

toshio_uchiy****@mirro***** toshio_uchiy****@mirro*****
2017年 7月 21日 (金) 11:46:54 JST


矢田様

 お世話になります。内山です。
 分かりやすいご回答ありがとうございます。
あれから、英語だけでもステミングしてみようと
思い、私も stem.c を見てみました。
 全文検索をおこなえるようにしているプラットフォームが
最初、FreeBSD 11.0 + PostgreSQL 9.6 + PGRonnga でしたが、
安定動作のため、CentOS 7.3 がインストールできず、
CentOS 6.9 でサービスを展開しています。
 どうやら、CentOS 6 系では、stem.c は動作しないようです。
やるとしたら、debian とかに乗り換えるか、CentOS 7 系が
インストールできるように頑張ってみるかですね。
 マシンは、Fujitsu TX1310 M1 です。

 また、英語・フランス語・日本語の文章の混ざったテーブルに
複数のトークンフィルターを適用すると問題が起こる可能性が
ある。とのこと。

 これらのことから考えて、ステミング、ノーマライズをおこなうのは
もっと検討してからの方が良さそうです。

 今回は、実現しようとしたユーザーへのサービスを、すぐには
実現できないという結論ですが、これも、将来への課題ということに
したいと思います。ユーザーには申し訳ありませんが、現在のところ
これで精いっぱいです。

 ありがとうございます。

-----Original Message-----
From: groon****@lists***** [mailto:groon****@lists*****] On Behalf Of Susumu Yata
Sent: Thursday, July 20, 2017 12:51 PM
To: 全文検索エンジンGroonga開発メーリングリスト
Subject: [groonga-dev,04404] Re: 日本語、英語、仏語のまざった文章で複数形や過去形をフォローできますでしょうか

内山様

未来検索ブラジルの矢田です.

> CREATE INDEX manual_pgroonga_content_idx on ( manual ) using pgroonga 
> WITH (plugins='token_filters/stem', token_filters="TokenFilterStem' );
>
> のようにすれば、今のままで英語についてステミングができるのでしょうか。

できるはずです.
基本的にはトークナイザと併せて使うことになると思います.

> PGroonga のマニュアルによると
>
> token_filters='${トークンフィルター1}, ${トークンフィルター2}, ..., ${トークンフィルターN}'
>
> のように複数のトークンフィルターを指定できるようです。英語のステミング
> をおこなうトークンフィルター、フランス語のステミングをおこなうトークンフィルター
> を両方とも指定することは可能でしょうか。

ソースコードを見る限り,トークンフィルターを複数指定した場合,それらは順番に適用されるだけのようです.
そのため,実際に入力された言語に関係なく,英語用のステミングとフランス語用のステミングが両方とも適用されてしまいます.
うまく機能する可能性もありますが,検索結果がおかしくなるケースもありそうです.
フランス語のことはほとんどわからないため,たしかなことは言えません.

> ちなみに、プラグインでステミングを指定して、トークナイザーに TokenMecab を指定する:
>
> CREATE INDEX manual_pgroonga_content_idx on ( manual ) using pgroonga 
> WITH (plugins='token_filters/stem', token_filters="TokenFilterStem', 
> tokenizer='TokenMecab' );
>
> のようなことも可能でしょうか。

私は PGroonga を使ったことがないので「できるはず」としか言えません.
試してから返信できれば良かったのですが,まだ試せていないのです.

それから,ノーマライザーも併せて使った方が良いかもしれません.

> アドバイスなどありましたらよろしくお願いします。

ほかの Groonga 開発者さんにも少し話を聞いてみました.

現状,ステミングについては,英語のみのサポートとなっています.
ほかの言語については,言語別にトークンフィルターを用意すると種類がすごく増えてしまうため,
どうやって対応するのか検討中とのことです.

複数言語の取り扱いについては,各言語のステミングに対応したとしても,
現状では言語別に保存するカラムを分け,さらにインデックス用のテーブルも分けるしかなさそうです.
検索時には,クエリの言語によって検索対象を変更するか,
あるいは問答無用ですべての言語について検索するかという話になりそうです.

2017年7月19日 9:40  <toshio_uchiy****@mirro*****>:
> 矢田様、メーリングリストの皆様
>
>  お世話になります。内山です。質問が多くて申し訳ありません。
>  ようやく、PGroonga の Create Index のトークンフィルターと
> Groonga のトークンフィルターについて、ドキュメントを読む時間が
> 取れました。
>
> CREATE INDEX manual_pgroonga_content_idx on ( manual ) using pgroonga 
> WITH (plugins='token_filters/stem', token_filters="TokenFilterStem' );
>
> のようにすれば、今のままで英語についてステミングができるのでしょうか。
> PGroonga のマニュアルによると
>
> token_filters='${トークンフィルター1}, ${トークンフィルター2}, ..., ${トークンフィルターN}'
>
> のように複数のトークンフィルターを指定できるようです。英語のステミング
> をおこなうトークンフィルター、フランス語のステミングをおこなうトークンフィルター
> を両方とも指定することは可能でしょうか。
>  ちなみに、プラグインでステミングを指定して、トークナイザーに
> TokenMecab を指定する:
>
> CREATE INDEX manual_pgroonga_content_idx on ( manual ) using pgroonga 
> WITH (plugins='token_filters/stem', token_filters="TokenFilterStem', 
> tokenizer='TokenMecab' );
>
> のようなことも可能でしょうか。
>  アドバイスなどありましたらよろしくお願いします。
>
> -----Original Message-----
> From: groon****@lists***** 
> [mailto:groon****@lists*****] On Behalf Of Susumu Yata
> Sent: Tuesday, July 18, 2017 3:35 PM
> To: 全文検索エンジンGroonga開発メーリングリスト
> Subject: [groonga-dev,04399] Re: 
> 日本語、英語、仏語のまざった文章で複数形や過去形をフォローできますでしょうか
>
> 内山さん
>
> 未来検索ブラジルの矢田です.
>
> 英語やフランス語の活用による変化を検索で無視する方法としては,
> ステミングを使うことが多いかと思います.
> PGroonga, Groonga のドキュメントにおいては,以下のページに記述が見つかりました.
>
> - CREATE INDEX USING pgroonga | PGroonga
>   - 
> https://pgroonga.github.io/ja/reference/create-index-using-pgroonga.ht
> ml#custom-token-filters
> - 7.9. トークンフィルター — Groonga v7.0.4ドキュメント
>   - http://groonga.org/ja/docs/reference/token_filters.html
>
> ただ,実装を見る限りでは,英語用のステミングとなっているようです.
>
>  groonga/plugins/token_filters/stem.c
>   54: const char *algorithm = "english";
>   55: const char *encoding = "UTF_8";
>   56: token_filter->stemmer = sb_stemmer_new(algorithm, encoding);
>
> これを真似して "english" のところを "french" にすれば,
> フランス語用のステミングプラグインを用意できそうな気はしますが,
> フランス語について無知なので断言できません.
>
> 後は,もし同じカラムに日本語,英語,フランス語が格納されているのであれば,
> どれを適用するかが問題になると思います.
>
> 解決方法としては,以下のような選択肢が思い浮かびました.
>
> - 言語によってカラムを分割する.
>   - あらかじめデータを言語別に分けなければならない.
> - 英語用とフランス語用のステミングを両方とも適用する.
>   - 副作用で検索の精度が下がる恐れがある.
>
> 参考になりましたら幸いです.
>
>
> 2017年7月17日 6:58  <toshio_uchiy****@mirro*****>:
>> メーリングリストの皆様
>>
>>
>>
>>  お世話になります。内山と申します。
>>
>>  日本語、英語、フランス語の短いセンテンスが
>>
>> たくさんあります。これに、PGroonga で索引をつけ
>>
>> PostgreSQL で全文検索しています。 トークナイザーは
>>
>> TokenMecab です。
>>
>> 検索を実行するサイトでは、日本語、英語、フランス語
>>
>> で検索できます。と謳うつもりです。
>>
>>  この時、英語を例にとると、dependency と dependencies
>>
>> は別々に検索しないとヒットしないようです。以前より気に
>>
>> なってました。
>>
>>  Google では、単数形で検索すれば複数形もヒットするように
>>
>> 見えました。
>>
>>  仕組みとしては、単数形と複数形の辞書、過去形や過去分詞と
>>
>> 現在系の辞書を持てば何とかなりそうな気がしてしまいます。
>>
>>  今回、日本語と英語に加えて、フランス語の文章も全文検索
>>
>> の対象に加えたので、男性、中性、女性などの型も気になり、
>>
>> 少しここを調べようと思いググってみました。しかし、groonga
>>
>> full text search で検索しても、これだという情報を見つける
>>
>> ことができませんでした。
>>
>> 今回の疑問について参考となるサイトなどありましたら、
>>
>> 教えていただけますでしょうか。
>>
>>  よろしくお願いします。
>>
>>
>>
>>
>> _______________________________________________
>> groonga-dev mailing list
>> groon****@lists*****
>> http://lists.osdn.me/mailman/listinfo/groonga-dev
>>
>
>
>
> --
> Susumu Yata <susum****@gmail*****>
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.osdn.me/mailman/listinfo/groonga-dev
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.osdn.me/mailman/listinfo/groonga-dev



--
Susumu Yata <susum****@gmail*****>
_______________________________________________
groonga-dev mailing list
groon****@lists*****
http://lists.osdn.me/mailman/listinfo/groonga-dev



groonga-dev メーリングリストの案内
Back to archive index