Как с помошью функции similarity заменить значения по определению схожести одного значения к другому в PostgreSQL?

День добрый, у меня проблем связанная с большим количеством опечаток в названии фирм/компаний и я хочу их объединить строго по определённым названиям бывает так что на одно название фирмы 20-30 похожих названий. Работаю с PostgreSQL 12.7. Например одна компания ее единственное верное название (OOO "VLADI") и исковерканные значения из за опечаток, и так еще со сотней разных фирм/компаний : "VLADI" , LTD "VLAD" , "vladi" , "vlad" и т.д. Думал использовать функцию similarity для определения схожести одного значения к другому и потом на основании схожести перезаписать данные на единственное верное (OOO "VLADI"). Таблица у меня "DataB" в ней столбец Compania , а также временная таблица compare со столбцом need ( в этом столбце указаны правильные названия фирм). Как сделать так что бы из столбца Compania самостоятельно вытаскивались значения и сравнивались со столбцом need в временной таблицей compare и заменялись. Благодаря пользователю «Mike» и «Roman Konoval» смог собрать вот ЭТО , но оно не работает как надо .

Вот примеры самой таблици:

Таблица №1 таблица DataB (то что есть)

CountryCompanii Compania
DE OOO "VLADI"
DE OOO "VLAD"
DE OOO VLADI
DE OOO VLAD
DE "VLADI"
DE "VLAD"
DE LTD "VLAD"
DE VLADI в германии
GB ООО "LILYT"
GB LTD "LILYT"
GB LTD "LiLYT"
GB LTD "Lilyt"
GB LTD "LyLiT"

Таблица №2 таблица DataB ( то, что должно быть)

CountryCompanii Compania
DE OOO "VLADI"
DE OOO "VLADI"
DE OOO "VLADI"
DE OOO "VLADI"
DE OOO "VLADI"
DE OOO "VLADI"
DE OOO "VLADI"
DE OOO "VLADI"
GB ООО "LILYT"
GB ООО "LILYT"
GB ООО "LILYT"
GB ООО "LILYT"
GB ООО "LILYT"

Также вот сам скрипт:

WITH compare (need) AS
     (VALUES ('ООО "LILYT"'),('ООО VLADI')
),
UPDATE (Compania)  as(
SELECT Compania, 'сравниваем с ' || need, similarity(Compania, need)
,DENSE_RANK() OVER (PARTITION BY need ORDER BY similarity(Compania, need) DESC)
AS "Ранжирование результатов"
FROM "DataB" CROSS JOIN "compare"
WHERE similarity(Compania, need) >0.25
)
UPDATE "DataB" SET Compania = need 
FROM compare

Помогите ибо очень много времени тратится на ручную редакцию, если есть альтернативы по эффективнее , то буду рад о них узнать.


Ответы (0 шт):