fuzzystrmatch. Вычисление схожести и расстояния между строками
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
Схема размещения:
ext
.
Модуль содержит функции для вычисления схожести и расстояния между строками.
Описание функций
Soundex
Система Soundex позволяет вычислить похожие по звучанию имена, приводя их к одинаковым кодам. Система не очень полезна для неанглоязычных имен.
Функции для работы с кодами Soundex:
Функция | Возвращает | Описание |
---|---|---|
soundex(text) | text | Преобразует строку в код Soundex |
difference(text, text) | int : 0 – полное несоответствие, 4 — точное совпадение | Преобразует две строки в их коды Soundex и затем сообщает количество совпадающих позиций в этих кодах; коды Soundex состоят из четырех символов |
Левенштейн
Функция вычисляет «расстояние Левенштейна» между двумя строками.
Расстояние Левенштейна (редакционное расстояние, дистанция редактирования) — метрика, измеряющая по модулю разность между двумя последовательностями символов. Она определяется как минимальное количество односимвольных операций (а именно вставки, удаления, замены), необходимых для превращения одной последовательности символов в другую.
Источник: ru.wikipedia.org.
Функции Левенштейна:
Функция | Возвращает |
---|---|
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
Metaphone - это фонетический алгоритм, опубликованный Лоуренсом Филипсом в 1990 году для индексации слов по их английскому произношению.
Источник: ru.wikipedia.org
Metaphone, как и Soundex, построен на идее составления кода, представляющего входную строку. Две строки признаются похожими, если их коды совпадают.
Функция Metaphone:
Функция | Возвращает | Описание | Входные параметры |
---|---|---|---|
metaphone (text source, int max_output_length) | text | Вычисляет код метафона входной строки | source – строка, отличная от NULL длиной до 255 символов; max_output_length – максимальная длина выходного кода метафона; если код длиннее, он обрезается |
Double Metaphone
Алгоритм Double Metaphone (Двойной метафон) вычисляет две строки «похожего звучания» для заданной строки — «первичную» и «альтернативную». В большинстве случаев они совпадают, но для неанглоязычных имен в особенности они могут быть весьма различными, в зависимости от произношения.
Функция Double Metaphone:
Функция | Возвращает | Описание |
---|---|---|
dmetaphone (text source) | text | Вычисляет первичный код |
dmetaphone_alt (text source) | text | Вычисляет альтернативный код |
Доработка
Доработка не проводилась.
Ограничения
Функции некорректно работают с многобайтными кодировками, как например 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.