fuzzystrmatch
Вычисление схожести и расстояния между строками.
Схема размещения:
ext
.Модуль содержит функции для вычисления схожести и расстояния между строками.
Система Soundex позволяет вычислить похожие по звучанию имена, приводя их к одинаковым кодам. Система не очень полезна для неанглоязычных имен.
Функции для работы с кодами Soundex:
Функция | Возвращает | Описание |
---|---|---|
soundex(text) | text | Преобразует строку в код Soundex |
difference(text, text) | int : 0 – полное несоответствие, 4 — точное совпадение | Преобразует две строки в их коды Soundex и затем сообщает количество совпадающих позиций в этих кодах; коды Soundex состоят из четырех символов |
Функция вычисляет «расстояние Левенштейна» между двумя строками.
Примечание: расстояние Левенштейна (редакционное расстояние, дистанция редактирования) — метрика, измеряющая по модулю разность между двумя последовательностями символов. Она определяется как минимальное количество односимвольных операций (а именно вставки, удаления, замены), необходимых для превращения одной последовательности символов в другую.
Функции Левенштейна:
Функция | Возвращает |
---|---|
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 |
Функция
levenshtein_less_equal
является ускоренной версией функции Левенштейна. Она предназначена для использования, когда интерес представляют небольшие расстояния.Входные параметры функций Левенштейна:
Параметр | Тип | Описание |
---|---|---|
source | text | В качестве исходной может быть передана любая строка, отличная от NULL и не длиннее 255 символов |
target | text | В качестве целевой может быть передана любая строка, отличная от NULL и не длиннее 255 символов |
ins_cost | int | Стоимость добавления символов |
del_cost | int | Стоимость удаления символов |
sub_cost | int | Стоимость замены символов |
max_d | int | Пороговое (максимальное) значение расстояния для функции levenshtein_less_equal (описание параметра представлено ниже) |
Зависимость результата функции
levenshtein_less_equal
при установке параметра max_d
от фактического расстояния:- меньше или равно
max_d
– возвращает точное его значение; - больше
max_d
– возвращает значение, большее чемmax_d
; - отрицательное – работа аналогична функции
levenshtein
.
Примечание: Metaphone, как и Soundex, построен на идее составления кода, представляющего входную строку. Две строки признаются похожими, если их коды совпадают.
Функция Metaphone:
Функция | Возвращает | Описание | Входные параметры |
---|---|---|---|
metaphone (text source, int max_output_length) | text | Вычисляет код метафона входной строки | source – строка, отличная от NULL длиной до 255 символов; max_output_length – максимальная длина выходного кода метафона; если код длиннее, он обрезается |
Алгоритм Double Metaphone (Двойной метафон) вычисляет две строки «похожего звучания» для заданной строки — «первичную» и «альтернативную». В большинстве случаев они совпадают, но для неанглоязычных имен в особенности они могут быть весьма различными, в зависимости от произношения.
Функция Double Metaphone:
Функция | Возвращает | Описание |
---|---|---|
dmetaphone (text source) | text | Вычисляет первичный код |
dmetaphone_alt (text source) | text | Вычисляет альтернативный код |
Примеры использования:
-
soundex. Пример:
SELECT ext.soundex('hello my world!!');
Пример вывода:Раскрыть type=sqlsoundex --------- H456 (1 row)
-
difference.Пример 1:
SELECT ext.soundex('Anne'), ext.soundex('Ann'), ext.difference('Anne', 'Ann');
Пример вывода:Раскрыть type=sqlsoundex | soundex | difference ---------+---------+------------ A500 | A500 | 4 (1 row)
Пример 2: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;
Пример вывода:Раскрыть type=sqlnm ------ john joan (2 rows) nm ------ john joan jack (3 rows)
-
levenshtein:Пример 1:
SELECT levenshtein('FOOTBALL', 'GANDBOOL');
Пример вывода:Раскрыть type=sqlqllevenshtein ------------- 6 (1 row)
Пример 2:SELECT levenshtein('FOOTBALL', 'GANDBOOL', 2, 1, 1);
Пример вывода:Раскрыть type=sqllevenshtein ------------- 6 (1 row)
-
levenshtein_less_equal.Пример 1:
SELECT levenshtein_less_equal('extensive', 'exhaustive', 2);
Пример вывода:Раскрыть type=sqllevenshtein_less_equal ------------------------ 3 (1 row)
Пример 2:SELECT levenshtein_less_equal('extensive', 'exhaustive', 4);
Пример вывода:Раскрыть type=sqllevenshtein_less_equal ------------------------ 4 (1 row)
-
metaphone. Пример:
SELECT metaphone('GUNDBOLIST', 4);
Пример вывода:Раскрыть type=sqlmetaphone ----------- KNTB (1 row)
-
dmetaphone.Пример 1:
SELECT dmetaphone('Gundbolist');
Пример вывода:Раскрыть type=sqldmetaphone ------------ KNTP (1 row)
Пример 2:SELECT levenshtein_less_equal('extensive', 'exhaustive', 4);
Пример вывода:Раскрыть type=sqllevenshtein_less_equal ------------------------ 4 (1 row)
Дополнительную информацию по поставляемому модулю fuzzystrmatch можно получить по ссылке.