Неофициальный форум пользователей Qlik Sense & Qlikview

Для разработчиков => Вопросы по Qlik Sense & QlikView => Тема начата: Ирина от 20 августа 2015, 11:45:39

Название: Нечеткое сравнение текстовых полей (Qlikview, Qlik Sense)
Отправлено: Ирина от 20 августа 2015, 11:45:39
Добрый день!
Может кто-то подскажет, как сделать нечеткое сравнение двух текстовых полей в таблице.
Например, у меня есть 2 базы данных с названиями брендов. Мне нужно получить следующую таблицу:

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

В QlikView есть нечеткий поиск, идея близка, только нужно выводить результат сравнения.
Нашла только одну тему на форуме, но без ответа https://community.qlik.com/message/8913#8913
Название: Re: Нечеткое сравнение текстовых полей
Отправлено: kvv от 20 августа 2015, 12:17:40
Добрый день.
Думаю, самый правильный способ - это все сделать "ручками". То есть, сначала выбрать строки где есть полное совпадение а дальше "ручками".

Дополнительная информация/вопросы:
1. Кроме полей что вы написали есть еще какие-то?
2. Сколько строк нужно "сопоставить"?
Название: Re: Нечеткое сравнение текстовых полей
Отправлено: admin от 20 августа 2015, 01:51:57
Привет.
Таблицу соответствий придется делать руками.
А потом - маппингом.
А я бы еще и первоисточники просмотрел бы на предмет унификации, чтобы не ломать потом голову на сопровождение.
Название: Re: Нечеткое сравнение текстовых полей
Отправлено: bibis от 20 августа 2015, 02:42:25
Добрый день. Действительно вижу 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 .....

Но если различных данных много и написать их могут как угодно- не выйдет
Название: Re: Нечеткое сравнение текстовых полей
Отправлено: admin от 20 августа 2015, 03:57:04
Привет,
Цитата: bibis от 20 августа  2015, 02:42:25  
4.Административный - заставить заполнять базу нормально.

Четвертый вариант считаю оптимальным)
Полностью поддерживаю :)
Название: Re: Нечеткое сравнение текстовых полей
Отправлено: Ирина от 20 августа 2015, 04:03:17
Если бы можно было заставить заполнять базу нормально, я бы уже это сделала.
База скачивается со стороннего ресурса, поэтому об этом даже речи идти не может.

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

Что подразумевается под вариантами?
1.мапинг - что это такое?
2.условные операторы с использованием like
Название: Re: Нечеткое сравнение текстовых полей
Отправлено: kvv от 20 августа 2015, 04:31:50
И все же, данную задачу, практически не возможно, полностью автоматизировать.
Автоматизировать возможно до какого то этапа, а дальше все равно "ручками".

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

Название: Re: Нечеткое сравнение текстовых полей
Отправлено: admin от 20 августа 2015, 05:01:11
Цитата: Ирина от 20 августа  2015, 04:03:17  
Ручками это все понятно, интересует именно автоматизация этого процесса.
Слишком затратно.
Проще и быстрее автоматизировать процесс контроля за корректностью таблицы сопоставления, для отлова новых пар.
Название: Re: Нечеткое сравнение текстовых полей
Отправлено: bibis от 20 августа 2015, 05:15:01
мапинг:
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 ... и так для каждого.