2025 년 7 월 17 일 : | 윈 토토 : 윈 토토 18 베타
This documentation is for an unsupported version of 윈 토토.
You may want to view the same page for thePostgreSQL : 문서 : 17 : F.16. Fuzzystrmatch - 토토 캔 유사성 및버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

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

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

주의

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

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

F.16.1. soundex#

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

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

soundex(text) returns text
difference(text, text) returns int

thesoundex함수는 윈 토토을 Soundex 코드로 변환합니다. 그만큼differencefunction converts two strings to their Soundex codes and then reports the number of matching code positions. Since Soundex codes have four characters, the result ranges from zero to four, with zero being no match and four being an exact match. (Thus, the function is misnamed —유사성더 나은 이름이었을 것입니다.)

Here are some usage examples:

SONCEX 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 개의 가능한 코드로 맵핑됩니다.

  • Where two consecutive letters have a single sound, they are coded as a single number.

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

This function generates the Daitch-Mokotoff soundex codes for its input:

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 : 문서 : 18 : 65.4. 진 토토 커뮤니티and this example:

테이블 생성 (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 : 문서 : 18 : 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 : 문서 : 18 : 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를 반환합니다.

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

levenshtein_less_equal는 작은 거리 만 관심이있는 경우 사용하기위한 Levenshtein 기능의 가속 버전입니다. 실제 거리는보다 작거나 같으면max_d, 그 다음levenshtein_less_equalreturns the correct distance; otherwise it returns some value greater thanmax_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) 텍스트를 반환

소스has to be a non-null string with a maximum of 255 characters.max_output_length출력 중유 코드의 최대 길이를 설정합니다. 더 길면 출력 이이 길이로 잘립니다.

예 :

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

F.16.5. 이중 은유#

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

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

There is no length limit on the input strings.

예 :

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