すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:fuzzystrmatch拡張を使用して文字列間の類似度を計算する

最終更新日:Jan 11, 2024

ApsaraDB RDS for PostgreSQLは、fuzzystrmatch拡張機能を提供します。 この拡張機能は、Soundex、Levenshtein、Metaphone、およびDouble Metaphoneアルゴリズムをサポートします。 これらのアルゴリズムを使用して、文字列間の類似度と距離を計算できます。

fuzzystrmatch拡張機能の有効化または無効化

  • fuzzystrmatch拡張を有効にします。
    拡張fuzzystrmatchを作成します。
  • fuzzystrmatch拡張機能を無効にします。
    ドロップ拡張fuzzystrmatch;

Soundex

Soundexアルゴリズムは、類似音の単語を同じコードに変換します。 ただし、このアルゴリズムは英語以外の単語には適していません。

Soundexアルゴリズムは、次の関数を提供します。

soundex(text) はテキストを返します
difference(text, text) returns int 
  • soundex関数は、文字列をA550などのSoundexコードに変換します。
  • 差分関数は、2つの文字列をそれらのSoundexコードに変換します。 次に、差分関数は、2つの文字列間の位置に一致するコードの数を報告する。 Soundexコードは4文字で構成されています。 したがって、コードマッチング位置の数は、0から4までの範囲である。 値0はゼロ一致を示し、値4は完全一致を示す。

例:

SELECT soundex('hello world!');
SELECT soundex('Anne') 、soundex('Andrew') 、difference('Anne' 、'Andrew');
SELECT soundex('Anne') 、soundex('Margaret') 、difference('Anne' 、'Margaret');

CREATE TABLE s (nmテキスト);
INSERT INTO s VALUES ('john');
INSERT INTO s VALUES ('joan');
値に挿入する (「ぐらつく」);
INSERT INTO s VALUES ('jack ');

SELECT * FROM WHERE soundex(nm) = soundex('john');
SELECT * からs WHERE差 (s.nm、'john') > 2; 

レーベンシュタイン

Levenshteinアルゴリズムは、2つの文字列間のLevenshtein距離を計算します。

Levenshteinアルゴリズムは、次の関数を提供します。

levenshtein (テキストソース、テキストターゲット、int ins_cost、int del_cost、int sub_cost) はintを返します。levenshtein (テキストソース、テキストターゲット) はintを返します
levenshtein_less_equal (テキストソース、テキストターゲット、int ins_cost、int del_cost、int sub_cost、int max_d) はintを返します。levenshtein_less_equal (テキストソース、テキストターゲット、int max_d) はint
を返します

次の表に、上記の関数で設定する必要があるパラメーターを示します。

パラメーター説明
ソース最初の文字列。 文字列は空にすることはできず、最大255文字の長さを含めることができます。
ターゲット2番目の文字列。 文字列は空にすることはできず、最大255文字の長さを含めることができます。
ins_cost文字を挿入するために必要なオーバーヘッド。
del_cost文字を削除するために必要なオーバーヘッド。
sub_cost文字を置き換えるために必要なオーバーヘッド。
max_d指定された2つの文字列間で許可される最大のレーベンシュタイン距離。
説明 levenshtein_less_equal関数は、levenshtein関数の高速化バージョンです。 短いLevenshtein距離を計算するためにのみ使用されます。
  • 実際の距離がmax_dパラメーターの値以下の場合、levenshtein_less_equal関数は計算された正確な距離を返します。
  • 実際の距離がmax_dパラメーターの値よりも大きい場合、levenshtein_less_equal関数はmax_dパラメーターの値よりも大きいランダムな距離を返します。
  • max_dパラメーターの値が負の場合、levenshtein_less_equal関数とlevenshtein関数は同じ距離を返します。

例:

SELECT levenshtein('GUMBO' 、'GAMBOL');
SELECT levenshtein('GUMBO' 、'GAMBOL' 、2,1、1);
SELECT levenshtein_less_equal('extensive', 'exhaustive',2);
SELECT levenshtein_less_equal('extensive', 'exhaustive',4); 
Levenshtein

メタフォン

Metaphoneアルゴリズムは、Soundexアルゴリズムと同じように機能します。 Metaphoneアルゴリズムは、指定された文字列ごとに代表コードを作成します。 2つの文字列が同じ代表コードを有する場合、Metaphoneアルゴリズムはそれらが類似しているとみなす。

Metaphoneアルゴリズムは、次の関数を提供します。

metaphone(text source, int max_output_length) returns text

次の表に、上記の関数で設定する必要があるパラメーターを示します。

パラメーター説明
ソース空ではない文字列。 文字列の長さは最大255文字です。
max_output_length返されるMetaphoneコードの最大長。 メタフォン・コードが最大長を超える場合、メタフォン・アルゴリズムはメタフォン・コードを最大長に切り捨てる。

例:

SELECTメタフォン ('GUMBO', 4);

二重メタフォン

Double Metaphoneアルゴリズムは、指定された文字列に対して2つの類似したサウンディングコードを取得します。 これらのコードは、一次コードおよび二次コードを含む。 ほとんどの場合、2つのコードは同じです。 英語以外の単語を指定すると、少し異なる場合があります。 違いは発音によって異なります。

Double Metaphoneアルゴリズムは、次の関数を提供します。

dmetaphone (テキストソース) はテキストを返します
dmetaphone_alt (テキストソース) はテキスト
を返します

例:

dmetaphone('gumbo') を選択します。選択dmetaphone_alt('gumbo');