Нечеткое сравнение текстовых полей (Qlikview, Qlik Sense)

Автор Ирина, августа 20, 2015, 11:45:39 am

« предыдущая - следующая »

Ирина

августа 20, 2015, 11:45:39 am Последнее редактирование: августа 21, 2015, 10:24:32 am от admin
Добрый день!
Может кто-то подскажет, как сделать нечеткое сравнение двух текстовых полей в таблице.
Например, у меня есть 2 базы данных с названиями брендов. Мне нужно получить следующую таблицу:

Название бренда -База 1      Название бренда - База 2        Результат сравнения
Данон                                    Донон                                        Сходятся
Буги Вуги                              БугиВуги                                   Сходятся

В QlikView есть нечеткий поиск, идея близка, только нужно выводить результат сравнения.
Нашла только одну тему на форуме, но без ответа https://community.qlik.com/message/8913#8913

kvv

августа 20, 2015, 12:17:40 pm #1 Последнее редактирование: августа 20, 2015, 12:39:42 pm от kvv
Добрый день.
Думаю, самый правильный способ - это все сделать "ручками". То есть, сначала выбрать строки где есть полное совпадение а дальше "ручками".

Дополнительная информация/вопросы:
1. Кроме полей что вы написали есть еще какие-то?
2. Сколько строк нужно "сопоставить"?

admin

Привет.
Таблицу соответствий придется делать руками.
А потом - маппингом.
А я бы еще и первоисточники просмотрел бы на предмет унификации, чтобы не ломать потом голову на сопровождение.

bibis

августа 20, 2015, 02:42:25 pm #3 Последнее редактирование: августа 20, 2015, 02:49:47 pm от bibis
Добрый день. Действительно вижу 4 варианта, в зависимости от данных:
1.мапинг
2.условные операторы с использованием like
3.REGEXP  в части SQL  запроса
...
4.Админстративный - заставить заполнять базу нормально.

Четвертый вариант считаю оптимальным)

Ну это всё в скрипте .
Так можно прям в таблице что-то придумать типа :
if( (left(Column(1),1)=left(Column(2),1) and lenght(Column(1))=lenght(Column(2)) and right(Column(1),1)=right(Column(2),1))  or .....

Но если различных данных много и написать их могут как угодно- не выйдет

admin

Привет,
Цитата: bibis от августа 20, 2015, 02:42:25 pm
4.Административный - заставить заполнять базу нормально.

Четвертый вариант считаю оптимальным)

Полностью поддерживаю :)

Ирина

Если бы можно было заставить заполнять базу нормально, я бы уже это сделала.
База скачивается со стороннего ресурса, поэтому об этом даже речи идти не может.

Ручками это все понятно, интересует именно автоматизация этого процесса.

Что подразумевается под вариантами?
1.мапинг - что это такое?
2.условные операторы с использованием like

kvv

августа 20, 2015, 04:31:50 pm #6 Последнее редактирование: августа 21, 2015, 09:21:32 am от kvv
И все же, данную задачу, практически не возможно, полностью автоматизировать.
Автоматизировать возможно до какого то этапа, а дальше все равно "ручками".

Для примера:
Сначала вычисляем совпадения; дальше убираем пробелы в начале и конце; далее убираем пробелы вообще и т.д.


admin

августа 20, 2015, 05:01:11 pm #7 Последнее редактирование: августа 20, 2015, 05:05:41 pm от admin
Цитата: Ирина от августа 20, 2015, 04:03:17 pm
Ручками это все понятно, интересует именно автоматизация этого процесса.

Слишком затратно.
Проще и быстрее автоматизировать процесс контроля за корректностью таблицы сопоставления, для отлова новых пар.

bibis

августа 20, 2015, 05:15:01 pm #8 Последнее редактирование: августа 20, 2015, 05:25:29 pm от bibis
мапинг:
t1:
LOAD * inline [
prod
dove
dav
dave
bugvugi
bugi-bugi]
;
map:
Mapping LOAD * Inline
  [
prod,norm_prod
dove,dove
dav,dove
dave,dove
bugvugi, bugi-vugi
bugi-vugi bugi-vugi];

t2:

LOAD  ApplyMap( 'map',prod) as produkt Resident t1;
DROP Table t1;


Т.е. есть шанс, что со временем, нарастив файл с картой вы учтете все варианты написаний...но практика показывает, что пользователи очень изобретательны.

Условные операторы, если вдуматься, не подходят вряд ли у вас там 10-20 товаров, чтоб писать
if(prod like 'd*v*' , dove ... и так для каждого.



Рейтинг@Mail.ru Яндекс.Метрика