W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
fuzzystrmatch
模塊提供多個函數(shù)來判斷字符串之間的相似性和距離。
當前,soundex
、metaphone
、dmetaphone
和dmetaphone_alt
函數(shù)使用多字節(jié)編碼(例如 UTF-8)下工作得不好。
這個模塊被視為“trusted”,就是說,它可由在當前數(shù)據(jù)庫上擁有CREATE
特權(quán)的非超級用戶安裝。
語音表示法系統(tǒng)是一種將相似發(fā)音的名字轉(zhuǎn)換成相同的代碼來匹配它們的方法。這最初由美國國家統(tǒng)計局在 1880 年、1900 年和 1910 年使用。注意語音表示法對于非英語名稱不是很有用。
fuzzystrmatch
模塊提供了兩個函數(shù)用于語音表示法代碼:
soundex(text) 返回 text
difference(text, text) 返回 int
soundex
函數(shù)將一個字符串轉(zhuǎn)換成它的語音表示法代碼。difference
函數(shù)將兩個字符串轉(zhuǎn)換成它們的語音表示法代碼并且接著報告能匹配代碼位置的數(shù)量。由于語音表示法代碼具有四個字符,結(jié)果可以從零到四,零表示沒有匹配而四表示完全匹配(因此這個函數(shù)的命名并不適當 — similarity
才是更合適的名稱)。
這里有一些例子:
SELECT soundex('hello world!');
SELECT soundex('Anne'), soundex('Ann'), difference('Anne', 'Ann');
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;
這個函數(shù)計算兩個字符串之間的編輯距離。
levenshtein(text source, text target, int ins_cost, int del_cost, int sub_cost) 返回 int
levenshtein(text source, text target) 返回 int
levenshtein_less_equal(text source, text target, int ins_cost, int del_cost, int sub_cost, int max_d) 返回 int
levenshtein_less_equal(text source, text target, int max_d) 返回 int
source
以及target
都可以是任何非空字符串, 最長為 255 個字符。代價參數(shù)分別指定一個字符插入、刪除或替換的開銷。 你可以像這個函數(shù)的第二種版本那樣忽略代價參數(shù),那樣它們都會默認為 1。
levenshtein_less_equal
是 Levenshtein 函數(shù)的速度更快 的版本,它被用于只對小距離感興趣的情況。如果實際距離小于等于max_d
, 那么levenshtein_less_equal
返回正確的距離。否則它返回某個 大于max_d
的值。如果
max_d
是負值,那么其行為等同于 levenshtein
。
例子:
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)
和 Soundex 相似,Metaphone 的思想是構(gòu)建一個輸入字符串的一種代碼。如果兩個字符串具有相同的代碼則認為它們相似。
這個函數(shù)計算一個輸入字符串的變音位代碼:
metaphone(text source, int max_output_length) 返回 text
source
必須是一個非空字符串,最大長度為 255 個字符。max_output_length
設(shè)置輸出的變音位代碼的最大長度,如果超長,輸出會被截斷到這個長度。
例子:
test=# SELECT metaphone('GUMBO', 4);
metaphone
-----------
KM
(1 row)
雙變音位系統(tǒng)為一個給定輸入字符串計算兩個“聽起來像的”字符串 — 一個“主要”代碼和一個“次要”代碼。在大部分情況下它們是相同的,但是對于非英語名稱它們可能有一點不同,這取決于發(fā)音。這些函數(shù)計算主要和次要代碼:
dmetaphone(text source) 返回 text
dmetaphone_alt(text source) 返回 text
對輸入字符串沒有長度限制。
例子:
test=# SELECT dmetaphone('gumbo');
dmetaphone
------------
KMP
(1 row)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: