fuzzystrmatch

Вычисление схожести и расстояния между строками.
Схема размещения: ext.
Модуль содержит функции для вычисления схожести и расстояния между строками.

Описание функции Soundex

Система 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

Примечание: Metaphone, как и Soundex, построен на идее составления кода, представляющего входную строку. Две строки признаются похожими, если их коды совпадают.
Функция Metaphone:
ФункцияВозвращаетОписаниеВходные параметры
metaphone (text source, int max_output_length)
textВычисляет код метафона входной строкиsource – строка, отличная от NULL длиной до 255 символов; max_output_length – максимальная длина выходного кода метафона; если код длиннее, он обрезается

Описание функции Soundex

Алгоритм Double Metaphone (Двойной метафон) вычисляет две строки «похожего звучания» для заданной строки — «первичную» и «альтернативную». В большинстве случаев они совпадают, но для неанглоязычных имен в особенности они могут быть весьма различными, в зависимости от произношения.
Функция Double Metaphone:
ФункцияВозвращаетОписание
dmetaphone (text source)
textВычисляет первичный код
dmetaphone_alt (text source)
textВычисляет альтернативный код

Использование модуля

Примеры использования:
  • soundex. Пример:
    SELECT ext.soundex('hello my world!!');
    Пример вывода:
    Раскрыть type=sql
     soundex
    ---------
     H456
    (1 row)
    
  • difference.
    Пример 1:
    SELECT ext.soundex('Anne'), ext.soundex('Ann'), ext.difference('Anne', 'Ann');
    Пример вывода:
    Раскрыть type=sql
     soundex | 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=sql
      nm
    ------
     john
     joan
    (2 rows)
    
      nm
    ------
     john
     joan
     jack
    (3 rows)
    
  • levenshtein:
    Пример 1:
    SELECT levenshtein('FOOTBALL', 'GANDBOOL');
    Пример вывода:
    Раскрыть type=sqlql
     levenshtein
    -------------
               6
    (1 row)
    
    Пример 2:
    SELECT levenshtein('FOOTBALL', 'GANDBOOL', 2, 1, 1);
    Пример вывода:
    Раскрыть type=sql
     levenshtein
    -------------
               6
    (1 row)
    
  • levenshtein_less_equal.
    Пример 1:
    SELECT levenshtein_less_equal('extensive', 'exhaustive', 2);
    Пример вывода:
    Раскрыть type=sql
     levenshtein_less_equal
    ------------------------
                          3
    (1 row)
    
    Пример 2:
    SELECT levenshtein_less_equal('extensive', 'exhaustive', 4);
    Пример вывода:
    Раскрыть type=sql
     levenshtein_less_equal
    ------------------------
                          4
    (1 row)
    
  • metaphone. Пример:
    SELECT metaphone('GUNDBOLIST', 4);
    Пример вывода:
    Раскрыть type=sql
     metaphone
    -----------
     KNTB
    (1 row)
    
  • dmetaphone.
    Пример 1:
    SELECT dmetaphone('Gundbolist');
    Пример вывода:
    Раскрыть type=sql
     dmetaphone
    ------------
     KNTP
    (1 row)
    
    Пример 2:
    SELECT levenshtein_less_equal('extensive', 'exhaustive', 4);
    Пример вывода:
    Раскрыть type=sql
     levenshtein_less_equal
    ------------------------
                          4
    (1 row)
    

Ссылки на документацию разработчика

Дополнительную информацию по поставляемому модулю fuzzystrmatch можно получить по ссылке.
Предыдущий раздел
fulleq
Следующий раздел
hstore
Была ли страница полезной?