ApsaraDB RDS for PostgreSQL menyediakan ekstensi fuzzystrmatch yang mendukung algoritma Soundex, Levenshtein, Metaphone, dan Double Metaphone. Anda dapat menggunakan algoritma-algoritma tersebut untuk menghitung kemiripan dan jarak antar string.
Aktifkan atau nonaktifkan ekstensi fuzzystrmatch
-
Aktifkan ekstensi.
CREATE EXTENSION fuzzystrmatch; -
Nonaktifkan ekstensi.
DROP EXTENSION fuzzystrmatch;
Soundex
Algoritma Soundex mengonversi kata-kata yang terdengar mirip menjadi kode yang sama, tetapi tidak cocok untuk kata-kata non-Inggris.
Algoritma Soundex menyediakan fungsi-fungsi berikut:
soundex(text) returns text
difference(text, text) returns int
-
Fungsi
soundexmengonversi sebuah string menjadi kode Soundex-nya, misalnya A550. -
Fungsi
differencemengonversi dua string menjadi kode Soundex masing-masing dan mengembalikan jumlah posisi kode yang sesuai. Karena kode Soundex memiliki empat karakter, hasilnya berkisar dari 0 hingga 4. Nilai 0 menunjukkan tidak ada kecocokan, sedangkan nilai 4 menunjukkan kecocokan sempurna.
Contoh:
SELECT soundex('hello world!');
SELECT soundex('Anne'), soundex('Andrew'), difference('Anne', 'Andrew');
SELECT soundex('Anne'), soundex('Margaret'), difference('Anne', 'Margaret');
CREATE TABLE s (nm text);
INSERT INTO s VALUES ('john');
INSERT INTO s VALUES ('joan');
INSERT INTO s VALUES ('wobbly');
INSERT INTO s VALUES ('jack');
SELECT * FROM s WHERE soundex(nm) = soundex('john');
SELECT * FROM s WHERE difference(s.nm, 'john') > 2;
Levenshtein
Algoritma Levenshtein menghitung jarak Levenshtein antara dua string.
Algoritma Levenshtein menyediakan fungsi-fungsi berikut:
levenshtein(text source, text target, int ins_cost, int del_cost, int sub_cost) returns int
levenshtein(text source, text target) returns int
levenshtein_less_equal(text source, text target, int ins_cost, int del_cost, int sub_cost, int max_d) returns int
levenshtein_less_equal(text source, text target, int max_d) returns int
Tabel berikut menjelaskan parameter yang harus Anda konfigurasi pada fungsi-fungsi di atas.
|
Parameter |
Deskripsi |
|
source |
String pertama. Tidak boleh kosong dan panjangnya maksimal 255 karakter. |
|
target |
String kedua. Tidak boleh kosong dan panjangnya maksimal 255 karakter. |
|
ins_cost |
Biaya penyisipan karakter. |
|
del_cost |
Biaya penghapusan karakter. |
|
sub_cost |
Biaya substitusi karakter. |
|
max_d |
Jarak Levenshtein maksimum. |
Fungsi levenshtein_less_equal merupakan versi yang dioptimalkan dari fungsi levenshtein, berguna saat memeriksa jarak kecil:
-
Jika jarak aktual kurang dari atau sama dengan
max_d, fungsi mengembalikan jarak eksak. -
Jika jarak aktual lebih besar dari
max_d, fungsi mengembalikan nilai yang lebih besar darimax_d. -
Jika
max_dbernilai negatif, fungsi berperilaku identik dengan fungsilevenshtein.
Contoh:
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);
test=# SELECT levenshtein('GUMBO', 'GAMBOL');
levenshtein
-------------
2
(1 row)
test=# SELECT levenshtein('GUMBO', 'GAMBOL', 2,1,1);
levenshtein
-------------
3
(1 row)
test=# SELECT levenshtein_less_equal('extensive', 'exhaustive',2);
levenshtein_less_equal
------------------------
3
(1 row)
test=# SELECT levenshtein_less_equal('extensive', 'exhaustive',4);
levenshtein_less_equal
------------------------
4
(1 row)
Metaphone
Algoritma Metaphone bekerja serupa dengan algoritma Soundex dengan membuat kode representatif untuk setiap string yang ditentukan. Jika dua string memiliki kode representatif yang sama, algoritma Metaphone menganggap keduanya mirip.
Algoritma Metaphone menyediakan fungsi berikut:
metaphone(text source, int max_output_length) returns text
Tabel berikut menjelaskan parameter yang harus Anda konfigurasi pada fungsi di atas.
|
Parameter |
Deskripsi |
|
source |
String sumber. Tidak boleh kosong dan panjangnya maksimal 255 karakter. |
|
max_output_length |
Panjang maksimum kode metaphone output. Kode yang lebih panjang akan dipotong. |
Contoh:
SELECT metaphone('GUMBO', 4);
Double Metaphone
Algoritma Double Metaphone menghasilkan dua kode yang terdengar mirip untuk sebuah string tertentu, yaitu kode primary dan kode secondary. Dalam kebanyakan kasus, kedua kode tersebut sama, tetapi mungkin sedikit berbeda untuk kata non-Inggris, tergantung pada pelafalannya.
Algoritma Double Metaphone menyediakan fungsi-fungsi berikut:
dmetaphone(text source) returns text
dmetaphone_alt(text source) returns text
Contoh:
select dmetaphone('gumbo');
select dmetaphone_alt('gumbo');