1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PGroongaを使って類義語辞書を実装する

Posted at

最近、個人開発しているサービスに類義語辞書を実装したいなと思ったところ、PGroongaで実現できそうだったので、その方法についてまとめます。

1. PGroongaとは

PGroongaとは、PostgresのExtensionで日本語の全文検索(※)を可能にしてくれます。

全文検索とは、テキスト内の任意の文字列を検索キーワードとして使用できる検索機能です。例えば、"あー。今日もいい天気だな。"というテキストがあった場合、"天気"と検索するとこのテキストがヒットします。

今回は、PGroongaを使って類義語辞書を実装していきます。

2. 今回のゴール

以下の検索が可能になることをゴールとします。

  • 同じ意味を持つ単語を検索結果に含める
    例えば、「ミルク」と検索した場合に、「牛乳」がヒットする。
  • カタカナ、ひらがな、ローマ字の入力に対応
    例えば、「gyu」と検索しても「牛乳」がヒットする。

この機能を実現するために、PGroongaの類義語辞書として使える仕組みを構築していきます。

3.実装

今回の実装は、PGroongaの公式サイト通りに進めていきます。

3.1 類義語テーブルの作成

まずは類義語を格納するテーブルを作成します。
このテーブルは、以下の2つのカラムを持ちます。

  • term: 検索対象の単語
  • readings: 類義語や読み仮名のリスト(配列形式)
CREATE TABLE terms (
  term text,
  readings text[]
);

3.2 インデックスの作成

次に類義語検索に使用するインデックスを作成します。

CREATE INDEX pgroonga_terms_prefix_search ON terms USING pgroonga
  (readings pgroonga_text_array_term_search_ops_v2);

3.3 類義語の登録

さきほど作成したテーブルに類義語を登録します。

INSERT INTO terms (term, readings) 
VALUES ('牛乳', ARRAY['ギュウニュウ', 'ミルク']);

これで実装は完了です!

4. 動作確認

今回の同義語を検索する際は以下のようなSELECT文を実行します。

SELECT term FROM terms WHERE readings &^~ '任意の文字';

では、実際にSELECT文で動作確認してみたいと思います。

SELECT term FROM terms WHERE readings &^~ 'ミルク';

 term
------
 牛乳
(1 row)

"牛乳" の類義語として登録した "ミルク" でヒットしました!

また、他にも以下の検索条件でも同じようにヒットします。

-- ローマ字
SELECT term FROM terms WHERE readings &^~ 'gyuunyuu';
SELECT term FROM terms WHERE readings &^~ 'miruku';

-- 前方一致(ローマ字)
SELECT term FROM terms WHERE readings &^~ 'gyu';
SELECT term FROM terms WHERE readings &^~ 'mi';

-- 前方一致(カタカナ)
SELECT term FROM terms WHERE readings &^~ 'ギュウ';
SELECT term FROM terms WHERE readings &^~ 'ミ';

-- 前方一致(ひらがな)
SELECT term FROM terms WHERE readings &^~ 'ぎゅう';
SELECT term FROM terms WHERE readings &^~ 'み';

5. まとめ

PGroongaを使うことで、類義語辞書を簡単に実装できました。
個人開発やプロジェクトで日本語の検索機能を強化したい場合に、ぜひ参考にしてみてください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?