Oracle: нечеткий поиск - PullRequest
0 голосов
/ 30 апреля 2018

Я загружаю таблицу, просматривая таблицу сотрудников. Однако иногда имена из исходных файлов и таблицы Employee не совпадают правильно.

**Employee table:**
Employee Name
Paul Jaymes

**Source File**
Paul James

Я хочу, чтобы это соответствовало. Какое может быть решение.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Используйте UTL_MATCH пакет или SOUNDEX функцию :

SQL Fiddle

Настройка схемы Oracle 11g R2 :

CREATE TABLE Employees ( Name ) AS
SELECT 'Paul Jaymes' FROM DUAL;

Запрос 1 :

UTL_MATCH.EDIT_DISTANCE: Вычисляет количество изменений, необходимых для преобразования строки-1 в строку-2

SELECT *
FROM   Employees
WHERE  UTL_MATCH.EDIT_DISTANCE( Name, 'Paul James' ) < 2

Запрос 2 :

UTL_MATCH.EDIT_DISTANCE_SIMILARITY: Вычисляет количество изменений, необходимых для преобразования строки-1 в строку-2, возвращая значение от 0 (без совпадения) до 100 (безошибочное совпадение)

SELECT *
FROM   Employees
WHERE  UTL_MATCH.EDIT_DISTANCE_SIMILARITY( Name, 'Paul James' ) > 90

Запрос 3 :

UTL_MATCH.JARO_WINKLER: Вычисляет меру согласия между строкой-1 и строкой-2

SELECT *
FROM   Employees
WHERE  UTL_MATCH.JARO_WINKLER( Name, 'Paul James' ) > 0.9

Запрос 4 :

UTL_MATCH.JARO_WINKLER_SIMILARITY: Вычисляет меру соответствия между строкой-1 и строкой-2, возвращая значение между 0 (без совпадения) и 100 (безошибочное совпадение)

SELECT *
FROM   Employees
WHERE  UTL_MATCH.JARO_WINKLER_SIMILARITY( Name, 'Paul James' ) > 95

Запрос 5 :

SOUNDEX: возвращает строку символов, содержащую фонетическое представление char. Эта функция позволяет сравнивать слова, написанные по-разному, но звучащие одинаково на английском языке

SELECT *
FROM   Employees
WHERE  SOUNDEX( Name ) = SOUNDEX( 'Paul James' )

Результаты : Все дают вывод:

|        NAME |
|-------------|
| Paul Jaymes |
0 голосов
/ 30 апреля 2018

Используйте функцию UTL_MATCH.EDIT_DISTANCE_SIMILARITY в Oracle.

Я бы порекомендовал создать временную таблицу, как показано ниже, и проверить, соответствуют ли данные ожиданиям. Обычно оценка выше 90-93 должна быть одинаковой с некоторой опечаткой в ​​разных системах. Если разница только в 1 символе, вы получите оценку 92 и выше.

select s.employee_name,
utl_match.edit_distance_similarity(initcap(s.employee_name),e.employee_name) as score
from source_table s cross join employee_table e
where utl_match.edit_distance_similarity(initcap(s.employee_name),e.employee_name) >=90 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...