Определения схожести одного значения к другому в PostgreSQL
День добрый, хочу объединить кучу названий которые по смыслу одинаковые , но разные по написанию (разные в основном из за опечаток) бывает так что на одно название 20-30 похожих названий. Работаю с PostgreSQL 12.7. Например одна компания OOO "VLADI" и исковерканные значения : "VLADI" , LTD "VLAD" , "vladi" , "vlad" и т.д. Думал использовать функцию similarity для определения схожести одного значения к другому и потом вместо них вести одно единственное верное (OOO "VLADI"). Вот что питался сделать я :
WITH DataB (CodCompanii,Compania) AS ( -- входная таблица с данными
VALUES (1, 'ООО Vlad')
,(2, 'ООО "VLADD"')
,(3, 'ООО VlaD')
,(4, 'ОАО "VlAD"')
,(5, 'ЗАО VLaD')
,(6, 'ООО VLAD I')
,(7, 'ООО VLAd')
,(8, 'ZAO VLDI')
,(9, 'LTD VI')
,(10, 'Vlad')
),
compare (id, need) AS -- наша база для сопоставления
(VALUES (100500, 'OOO "VLADI"')
)
SELECT c1.CodCompanii, c1.Compania, 'сравниваем с ' || c2.need, similarity(c1.Compania, c2.need)
,dense_rank() OVER (PARTITION BY c2.need ORDER BY similarity(c1.Compania, c2.need) DESC)
AS "Ранжирование результатов"
FROM DataB c1 CROSS JOIN compare c2
WHERE similarity(cCompania, c2.need) >0.3
ORDER BY similarity DESC;
Так я смог определить схожести одного з другим , но как потом перезаписать значение в столбец я не знаю. Или подскажите вариант по лучше. Помогите ибо очень много времени тратится на ручную редакцию.