fuzzystrmatch. Вычисление схожести и расстояния между строками#
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
Схема размещения:
ext.
Модуль содержит функции для вычисления схожести и расстояния между строками.
Описание функций#
Soundex#
Система Soundex позволяет вычислить похожие по звучанию имена, приводя их к одинаковым кодам. Система не очень полезна для неанглоязычных имен.
Функции для работы с кодами Soundex:
Функция |
Возвращает |
Описание |
|---|---|---|
|
|
Преобразует строку в код Soundex |
|
|
Преобразует две строки в их коды Soundex и затем сообщает количество совпадающих позиций в этих кодах; коды Soundex состоят из четырех символов |
Левенштейн#
Функция вычисляет «расстояние Левенштейна» между двумя строками.
Примечание:
Расстояние Левенштейна (редакционное расстояние, дистанция редактирования) — метрика, измеряющая по модулю разность между двумя последовательностями символов. Она определяется как минимальное количество односимвольных операций (а именно вставки, удаления, замены), необходимых для превращения одной последовательности символов в другую.
Источник: ru.wikipedia.org.
Функции Левенштейна:
Функция |
Возвращает |
|---|---|
|
|
|
|
|
|
|
|
Функция levenshtein_less_equal является ускоренной версией функции Левенштейна. Она предназначена для использования, когда интерес представляют небольшие расстояния.
Входные параметры функций Левенштейна:
Параметр |
Тип |
Описание |
|---|---|---|
|
|
В качестве исходной может быть передана любая строка, отличная от |
|
|
В качестве целевой может быть передана любая строка, отличная от |
|
|
Стоимость добавления символов |
|
|
Стоимость удаления символов |
|
|
Стоимость замены символов |
|
|
Пороговое (максимальное) значение расстояния для функции |
Зависимость результата функции levenshtein_less_equal при установке параметра max_d от фактического расстояния:
меньше или равно
max_d– возвращает точное его значение;больше
max_d– возвращает значение, большее чемmax_d;отрицательное – работа аналогична функции
levenshtein.
Metaphone#
Примечание:
Metaphone - это фонетический алгоритм, опубликованный Лоуренсом Филипсом в 1990 году для индексации слов по их английскому произношению.
Источник: ru.wikipedia.org
Metaphone, как и Soundex, построен на идее составления кода, представляющего входную строку. Две строки признаются похожими, если их коды совпадают.
Функция Metaphone:
Функция |
Возвращает |
Описание |
Входные параметры |
|---|---|---|---|
|
|
Вычисляет код метафона входной строки |
|
Double Metaphone#
Алгоритм Double Metaphone (Двойной метафон) вычисляет две строки «похожего звучания» для заданной строки — «первичную» и «альтернативную». В большинстве случаев они совпадают, но для неанглоязычных имен в особенности они могут быть весьма различными, в зависимости от произношения.
Функция Double Metaphone:
Функция |
Возвращает |
Описание |
|---|---|---|
|
|
Вычисляет первичный код |
|
|
Вычисляет альтернативный код |
Доработка#
Доработка не проводилась.
Ограничения#
Функции некорректно работают с многобайтными кодировками, как например UTF-8.
Установка#
Модуль считается «доверенным», то есть его могут устанавливать пользователи, имеющие право CREATE в текущей базе данных:
CREATE EXTENSION fuzzystrmatch SCHEMA ext;
Настройка#
Не требуется.
Использование модуля#
Примеры использования:
soundex
Команда:
SELECT ext.soundex('hello my world!!');Пример вывода:
soundex --------- H456 (1 row)difference
Команда:
SELECT ext.soundex('Anne'), ext.soundex('Ann'), ext.difference('Anne', 'Ann');Пример вывода:
soundex | soundex | difference ---------+---------+------------ A500 | A500 | 4 (1 row)Команда:
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;Пример вывода:
nm ------ john joan (2 rows) nm ------ john joan jack (3 rows)levenshtein
Команда:
SELECT levenshtein('FOOTBALL', 'GANDBOOL');Пример вывода:
levenshtein ------------- 6 (1 row)Команда:
SELECT levenshtein('FOOTBALL', 'GANDBOOL', 2, 1, 1);Пример вывода:
levenshtein ------------- 6 (1 row)levenshtein_less_equal
Команда:
SELECT levenshtein_less_equal('extensive', 'exhaustive', 2);Пример вывода:
levenshtein_less_equal ------------------------ 3 (1 row)Команда:
SELECT levenshtein_less_equal('extensive', 'exhaustive', 4);Пример вывода:
levenshtein_less_equal ------------------------ 4 (1 row)metaphone
Команда:
SELECT metaphone('GUNDBOLIST', 4);Пример вывода:
metaphone ----------- KNTB (1 row)dmetaphone
Команда:
SELECT dmetaphone('Gundbolist');Пример вывода:
dmetaphone ------------ KNTP (1 row)Команда:
SSELECT levenshtein_less_equal('extensive', 'exhaustive', 4);Пример вывода:
levenshtein_less_equal ------------------------ 4 (1 row)
Ссылки на документацию разработчика#
Исходная документация PosgreSQL по модулю fuzzystrmatch: https://www.postgresql.org/docs/15/fuzzystrmatch.html.