F.16. Fuzzystrmatch - 토토 캔 유사성 및 거리 결정#

thefuzzystrmatch모듈은 토토 캔 사이의 유사성과 거리를 결정하기위한 몇 가지 기능을 제공합니다.

주의

현재,soundex, Metaphone, dmetaphonedmetaphone_alt함수는 Multibyte 인코딩 (예 : UTF-8)과 잘 작동하지 않습니다. 사용daitch_mokotoff또는Levenshtein그러한 데이터와 함께.

이 모듈이 고려됩니다신뢰할 수있는Create현재 데이터베이스의 권한.

F.16.1. soundex#

SoundEx 시스템은 동일한 코드로 변환하여 유사한 사운드 이름을 일치시키는 방법입니다. 1880 년, 1900 년 및 1910 년에 미국 인구 조사에 의해 처음 사용되었습니다. Soundex는 영어 이외의 이름에 그다지 유용하지 않습니다.

the12518_12533모듈은 Soundex 코드 작업을위한 두 가지 기능을 제공합니다.

soundex (텍스트)는 텍스트를 반환합니다
차이 (텍스트, 텍스트) 반환 int

thesoundex함수는 토토 캔을 SoundEx 코드로 변환합니다. 그만큼차이함수는 두 줄을 Soundex 코드로 변환 한 다음 일치하는 코드 위치의 수를보고합니다. Soundex 코드에는 4 개의 문자가 있으므로 결과는 0에서 4까지이며 0은 일치하지 않고 4 개는 정확히 일치합니다. (따라서 기능의 이름이 잘못되었습니다 -유사성더 나은 이름이었을 것입니다.)

여기에 몇 가지 사용 예가 있습니다.

SONCEP SOUNDEX ( 'Hello World!');

SONCEX ( 'Anne'), soundex ( 'ann'), 차이 ( 'Anne', 'Ann');
SONCEX ( 'Anne'), Soundex ( 'Andrew'), 차이 ( 'Anne', 'Andrew');
SONCENEX ( 'Anne'), SoundEx ( 'Margaret'), 차이 ( 'Anne', 'Margaret');

테이블을 작성하십시오 (nm 텍스트);

s 값에 삽입 ( 'John');
s 값에 삽입 ( 'joan');
s 값에 삽입 ( 'Wobbly');
s 값에 삽입 ( 'Jack');

SOONT * From S Where Soundex (NM) = soundex ( 'John');

SELECT * SELECT WHERE DIFFER (S.NM, 'John') 2;

F.16.2. Daitch-Mokotoff Soundex#

원래 SoundEx 시스템과 마찬가지로 Daitch-Mokotoff Soundex는 동일한 코드로 변환하여 비슷한 사운드 이름과 일치합니다. 그러나 Daitch-Mokotoff Soundex는 원래 시스템보다 영어 이외의 이름에 훨씬 더 유용합니다. 원래 시스템에 대한 주요 개선에는 다음이 포함됩니다.

  • 코드는 4 개가 아닌 처음 6 개의 의미있는 토토 캔를 기반으로합니다.

  • 문자 또는 문자 조합은 7 개가 아닌 10 개의 가능한 코드로 맵핑됩니다.

  • 두 개의 연속 토토 캔가 단일 사운드를 가진 경우 단일 번호로 코딩됩니다.

  • 토토 캔 나 토토 캔 조합이 다른 소리를 가질 수있는 경우 모든 가능성을 다루기 위해 여러 코드가 방출됩니다.

이 함수는 입력에 대한 Daitch-Mokotoff Soundex 코드를 생성합니다.

daitch_mokotoff (소스텍스트) 텍스트를 반환합니다 []

결과에는 몇 개의 그럴듯한 발음이 있는지에 따라 하나 이상의 코드가 포함될 수 있으므로 배열로 표시됩니다..

Daitch-Mokotoff Soundex 코드는 6 자리로 구성되므로소스가급적 단어 또는 이름이어야합니다.

여기 몇 가지 예가 있습니다.

daitch_mokotoff ( 'George');
 daitch_mokotoff
------------------
 595000

daitch_mokotoff ( 'John')를 선택하십시오.
 daitch_mokotoff
------------------
 160000,460000

daitch_mokotoff ( 'bierschbach')를 선택하십시오.
                      daitch_mokotoff
------------------------------------------------------------------------
 794575,794574,794750,794740,745750,745740,747500,747400

daitch_mokotoff ( 'Schwartzenegger')를 선택하십시오.
 daitch_mokotoff
------------------
 479465

단일 이름과 일치하려면 반환 된 텍스트 배열이 직접 일치 할 수 있습니다&&연산자 : 모든 오버랩은 일치하는 것으로 간주 될 수 있습니다. 진 지수는 효율성을 위해 사용될 수 있습니다. 참조PostgreSQL : 문서 : 17 : 64.4. 진 토토 캔그리고이 예 :

테이블 생성 (nm 텍스트);
(fastupdate = off)와 함께 gin (daitch_mokotoff (nm))를 사용하여 s에서 색인 ix_s_dm을 만듭니다.

s (nm) 값에 삽입하십시오
  ( 'Schwartzenegger'),
  ('남자'),
  ( '제임스'),
  ( 'Steinman'),
  ( 'Steinmetz');

SELECT *에서 daitch_mokotoff (nm) && daitch_mokotoff ( 'swartzenegger');
SELECT * From S Where Daitch_mokotoff (nm) && daitch_mokotoff ( 'Jane');
SELECT * From S Where Daitch_mokotoff (nm) && daitch_mokotoff ( 'Jens');

어떤 순서로든 이름을 색인화하고 일치 시키려면 전문 검색 기능을 사용할 수 있습니다. 보다PostgreSQL : 문서 : 17 : 12 장. 전문 스포츠 토토그리고이 예 :

함수 만들기 soundex_tsvector (v_name 텍스트)는 tsvector를 반환합니다
원자를 시작하십시오
  to_tsvector ( 'simple',
                     string_agg (array_to_string (daitch_mokotoff (n), '', '')))
  regexp_split_to_table (v_name, '\ s+')에서 n으로;
끝;

함수 soundex_tsquery (v_name 텍스트)를 반환합니다
원자를 시작하십시오
  string_agg ( '('|| array_to_string ( '|| array_to_string (n),'| ') ||') ','& ') :: tsquery를 선택하십시오
  regexp_split_to_table (v_name, '\ s+')에서 n으로;
끝;

테이블을 작성하십시오 (nm 텍스트);
(fastupdate = off)와 함께 gin (soundex_tsvector (nm))를 사용하여 s에서 색인 ix_s_txt를 만듭니다.

s (nm) 값에 삽입하십시오
  ('존 도'),
  ( 'Jane Roe'),
  ( 'Public John Q.'),
  ( 'George Best'),
  ( 'John Yamson');

sonectex_tsvector (nm) @@ soundex_tsquery ( 'john')에서 *를 선택하십시오.
sonectex_tsquector (nm) @@ soundex_tsquery ( 'Jane Doe')에서 *를 선택하십시오.
soundex_tsvector (nm) @@ soundex_tsquery ( 'John Public');
sonectex_tsquector (nm) @@ soundex_tsquery ( 'besst, giorgio')를 선택하십시오.
SOLECT * SOUNDEX_TSVECTOR (nm) @@ soundex_tsquery ( 'Jameson John');

인덱스 재확인 중에 Soundex 코드의 재 계산을 피하려면 별도의 열의 인덱스를 표현식의 인덱스 대신 사용할 수 있습니다. 저장된 생성 열이이를 위해 사용될 수 있습니다. 보다PostgreSQL : 문서 : 17 : 5.4. 범퍼카 토토 된 열.

F.16.3. Levenshtein#

이 함수는 두 줄 사이의 Levenshtein 거리를 계산합니다 :

levenshtein (소스 텍스트, 대상 텍스트, INS_COST int, del_cost int, sub_cost int) int를 반환합니다.
Levenshtein (소스 텍스트, 대상 텍스트) int를 반환합니다
levenshtein_less_equal (소스 텍스트, 대상 텍스트, ins_cost int, del_cost int, sub_cost int, max_d int) int를 반환합니다.
levenshtein_less_equal (소스 텍스트, 대상 텍스트, max_d int) int를 반환합니다.

둘 다소스and대상는 최대 255 자의 널이 아닌 문자열 일 수 있습니다. 비용 매개 변수는 각각 문자 삽입, 삭제 또는 대체에 대해 얼마나 많은 비용을 청구할지 지정합니다. 함수의 두 번째 버전에서와 같이 비용 매개 변수를 생략 할 수 있습니다. 이 경우 그들은 모두 기본적으로 1입니다.

levenshtein_less_equal는 작은 거리 만 관심을 가질 때 사용하기위한 Levenshtein 기능의 가속 버전입니다. 실제 거리는보다 작거나 같으면max_d,levenshtein_less_equal올바른 거리를 반환합니다. 그렇지 않으면 값보다 큰 값을 반환합니다.max_d. 만약에max_d부정적이면 동작은와 동일합니다.Levenshtein.

예 :

test =# Levenshtein ( 'gumbo', 'gambol');
 Levenshtein
-------------
           2
(1 줄)

test =# select levenshtein ( 'gumbo', 'gambol', 2, 1, 1);
 Levenshtein
-------------
           3
(1 줄)

test =# select levenshtein_less_equal ( '광범위한', '철저한', 2);
 levenshtein_less_equal
-------------------------
                      3
(1 줄)

test =# select levenshtein_less_equal ( '광범위한', '철저한', 4);
 levenshtein_less_equal
-------------------------
                      4
(1 행)

F.16.4. 은유#

Soundex와 같은 Metaphone은 입력 문자열에 대한 대표 코드를 구성한다는 아이디어를 기반으로합니다. 그런 다음 두 줄은 동일한 코드를 가지고 있으면 비슷한 것으로 간주됩니다.

이 함수는 입력 토토 캔의 은유 코드를 계산합니다.

Metaphone (소스 텍스트, max_output_length int) 텍스트를 반환

소스최대 255 자의 널이 아닌 토토 캔이어야합니다.max_output_length출력 중유 코드의 최대 길이를 설정합니다. 더 길면 출력 이이 길이로 잘립니다.

예 :

test =# Metaphone ( 'Gumbo', 4);
 은유
----------
 km
(1 행)

F.16.5. 이중 은유#

이중 은유 시스템은 2를 계산합니다.주어진 입력 토토 캔에 대한 토토 캔 - a기본and an대체. 대부분의 경우 그것들은 동일하지만 영어가 아닌 이름의 경우 특히 발음에 따라 약간 다를 수 있습니다. 이러한 기능은 기본 및 대체 코드를 계산합니다.

dmetaphone (소스 텍스트)은 텍스트를 반환합니다
dmetaphone_alt (소스 텍스트) 텍스트를 반환

입력 토토 캔에는 길이 제한이 없습니다.

예 :

test =# dmetaphone ( 'gumbo');
 dmetaphone
------------
 KMP
(1 행)

정정 제출

문서에 올바른 것이 없으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면