web-dev-qa-db-ja.com

トリグラムの単語の類似性はどの程度正確に機能しますか?

ドキュメント Word_similarity関数について と言う:

最初の文字列と2番目の文字列の最も類似したWordとの類似性を示す数値を返します。この関数は、2番目の文字列で、最も類似した部分文字列ではなく、最も類似した単語を検索します。結果の範囲は0(2つの文字列が完全に異なることを示す)から1(最初の文字列が2番目の文字列の単語の1つと同じであることを示す)です。

しかし、「最初の文字列」に複数の単語が含まれている場合の結果は、あいまいです。次の結果の説明は何ですか?

select Word_similarity('foo bar','foo bar baz');
 |単語の類似性| 
 | :----------- | 1 | 
select Word_similarity('baz bar','foo bar baz');
 |単語の類似性| 
 | :-------------- | 
 | 1 | 
select Word_similarity('baz foo','foo bar baz');
 |単語の類似性| 
 | :-------------- | 
 | 0.8 | 

dbfiddle ---(ここ

2017-2018のメーリングリストのスレッド のように動作しません。

2番目の文字列のトライグラムの連続範囲を(元の順序で)検索します。これは、最初の文字列のトライグラムと最も類似しています。可能な解決策は、この範囲の境界をWordの境界にすることです。ただし、Wordのpartを検索する方が便利ではありません。そして、私たちはすでにユーザーにこの機能を採用させています。

解決策は pg_trgm 1.4 with new features をリリースすることでした。これはPostgreSQL 11で削除される予定です。エクステント境界を強制的にWord境界にするstrict_Word_similarityを提供します。さらに、2つの新しい演算子<<<-><<%が追加され、インデックスに対して厳密なWord範囲の操作が実行されます。

詳細については、 開発バージョンpg_trgm のドキュメントを参照してください。

2
Evan Carroll