Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Умное сравнение строк


Автор: lazarevmax_mcx 2.10.2005, 09:28
Такая проблема:

нужно сравнить две строки названий товара из прайса:

Сетевой фильтр Sven Platinum, 1.8 метра
Сетевой фильтр <Sven Platinum Pro> 1.8 м

и чтобы в результате сравнений было true.

а если сравниваются строки:

Сетевой фильтр Sven Platinum, 1.8 метра
Сетевой фильтр Sven Optima Special 1.8 м

возвращал false....


У кого может быть есть идеи?

Автор: Pakshin A. S. 2.10.2005, 10:09
Вот прикрепил идею...

Автор: Zero 2.10.2005, 11:42
Цитата(lazarevmax_mcx @ 2.10.2005, 09:28)
У кого может быть есть идеи?

А у меня такая:
1. Создаёш два буфера типа string;
2. Потом загоняшь в каждый буферы соответствующие строки;
3. Потом через цикл по кол-ву символов во втором буфере, удаляешь символы из него которые не подходят по определённым критериям (например: спецсимволы, скобки и т.п.)
4. Далее остатки буферов сравниваешь.

Автор: Vet 2.10.2005, 20:11
lazarevmax_mcx, под твое условие подошло бы и:
Pos('Sven Platinum', 'Строка с фильтром') > 0

Автор: cardinal 2.10.2005, 20:41
А у меня другая идея: навести порядок в прайс-листе. smile

Зачем парится над хитрыми решениями поиска и сравнения, когда можно внести ограничения в систему ввода наименований товара и обеспечить тем самым порядок!

Автор: Pakshin A. S. 2.10.2005, 21:34
cardinal Это-то само собой, но релизовать реальную сравнивалку строк тоже интересно...

Автор: Zero 2.10.2005, 21:57
cardinal а если у них уже всё введено, и lazarevmax_mcx парится над тем как это всё объеденить, то ты предлагаешь, не парится над прогой и сделать всё вручную, т.к. голова умнее программы???

Автор: Pakshin A. S. 2.10.2005, 22:01
Впринцепе если уже речь пошла о голове, то мы ведь не сможет реализовать принцип сравнения двух строк, который аботает у нас в голове, а только максимально приблизиться к нему, а значит погрешности все-таки будут...

Автор: cardinal 2.10.2005, 23:50
Цитата(Zero @ 2.10.2005, 19:57)
то ты предлагаешь, не парится над прогой и сделать всё вручную, т.к. голова умнее программы???

А что если кто-то начал делать г...., извиняюсь, то надо продолжать это делать? Возможно это как раз тот момент, в который еще можно переработать все вручную, чтобы в будущем не париться.

Автор: _hunter 3.10.2005, 11:01
+ это хорошо, что автор знает что Сетевой фильтр Sven Platinum и Сетевой фильтр Sven Platinum Pro это одно и то же. ибо я, например, так бы не сказал...

Автор: Петрович 4.10.2005, 17:37
Интересно, значит предположим имеем три строки:

1. Сетевой фильтр Sven Platinum
2. Сетевой фильтр Sven Platinum Pro
3. Сетевой фильтр Sven Optima Special


При этом первые две это один товар, а третья это другой товар.
Интересно, но по моему, это задача даже не для искуственного интелекта, а для системы с самообучением, которая сама в состоянии производить поиск в инете, в бумажных справочниках производителей и пр.литературе.
Иначе, как она сможет определить что Platinum и Platinum Pro это одно и то же, однако сильно отличается от Optima Special?
smile
Добавлено @ 17:39
Кстати, а как на счет Сетевой фильтр Sven Platinum Pro Plus?

Автор: Pakshin A. S. 4.10.2005, 17:40
Я предлагаю попробовать нечто типа процента несовпадения строк. Т. е. использовать схему распознавания букв, скажем в FineReader...

Автор: _hunter 4.10.2005, 17:55
ды а толку с этого процента несовпадения? проблему предыдущих двух постов это не решит...

тут разве-что можно создать базу всех встречающихся наименований и вручную их сруппировать ( ну или id-шники одинаковые попрописывать ) и уже по этим id-шникам определять оно или не оно...

Автор: Zero 5.10.2005, 11:45
Цитата
2. Сетевой фильтр Sven Platinum Pro

Цитата
Кстати, а как на счет Сетевой фильтр Sven Platinum Pro Plus?

Петрович с плюсом это уже будет совсем другой элемент
А я предумал ещё один способ: smile
1. Рассмотреть в цикле каждое отдельное слово первой строки, и найти такоеже слово во второй строке;
2. потом:
-- если во второй строке, слов больше чем на одно то это разные товары,
-- если слова первой строки ненайдены во второй то тоже разные;
3. Если после сравнения каждое слово первой строки будет найдено во второй строке, и во второй строке останится максимум 1 слово, тогда ─ это один и тот же товар;....

При этом регистр должен быть одним (например все символы должны быть маленькими), при этом в обоих строках удалить все спецсимволы и т.п.

Автор: _hunter 5.10.2005, 11:59
пункт 2.2 -- не катит ( если сравнивать наоборот )
+ алгоритм не катит -- не факт что какой-нить "креатив платинум" и "креатив про" тоже одно и то же.

Автор: Zero 5.10.2005, 12:04
Цитата(_hunter @ 5.10.2005, 11:59)
пункт 2.2 -- не катит ( если сравнивать наоборот )

Смысла нет, достаточно делать сравнения в одну сторону.
Цитата(_hunter @ 5.10.2005, 11:59)
не факт что какой-нить "креатив платинум" и "креатив про" тоже одно и то же.

В соответствии с пунктом 2.2 эти слава будут разными... smile

Автор: Pakshin A. S. 5.10.2005, 17:05
Zero Я предлагал почти тоже... алгоритм работает по тому же принципу...

Автор: _hunter 5.10.2005, 17:41
Цитата
Смысла нет, достаточно делать сравнения в одну сторону.

а откуда ты знаеш правильную сторону?
Цитата
В соответствии с пунктом 2.3 эти слава будут разными

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

Автор: Pakshin A. S. 5.10.2005, 17:44
Как я понимаю мы тут "собираемся" делать распознавалку моделей, что естессно нереально, но может зачинщику этого обсуждения просто нуно сравнить приблизительно строки?

Автор: Zero 5.10.2005, 22:23
Цитата(_hunter @ 5.10.2005, 17:41)
а откуда ты знаеш правильную сторону?

Её можно определить программно...
Цитата(_hunter @ 5.10.2005, 17:41)
тогда и свены будут разными -- что неправильно

А в соответствии с примичанием и свены будут одинаковыми... smile smile
Цитата(lonely @ 5.10.2005, 17:05)
Я предлагал почти тоже...

Видишь Pakshin A.S. мыслил по тому же принцыпу... А я когда придумал этот способ, предварительно представил как у меня мыслит в этом плане голова... smile

Автор: _hunter 6.10.2005, 10:55
Цитата
Её можно определить программно...

интересно как? ;)
Цитата
А в соответствии с примичанием и свены будут одинаковыми

дааа?
интересно почему это в соостветствии с примичанием smile
"свен платинум" и "свен про" это одно и то же
а "креатив платинум" и "креатив про" нет

Автор: Zero 6.10.2005, 11:26
Цитата(_hunter @ 6.10.2005, 10:55)
интересно почему это в соостветствии с примичанием

Я думал ты имеешь ввиду про:
Цитата(lazarevmax_mcx @ 2.10.2005, 09:28)
Сетевой фильтр Sven Platinum, 1.8 метра
Сетевой фильтр <Sven Platinum Pro> 1.8 м

А если:
Цитата(_hunter @ 6.10.2005, 10:55)
свен платинум" и "свен про"

То в соответствии с пунктом 2.2 эти свены будут разными
Цитата(_hunter @ 6.10.2005, 10:55)
а "креатив платинум" и "креатив про"

Это аналогично. smile
Цитата(_hunter @ 6.10.2005, 10:55)
интересно как? ;)

строка где слов меньше то ─ 1-ое предложение, а другое 2 ─ ое... smile
А вообще на любую задачу существует 1000 алгоритмов решения.... smile

Автор: _hunter 6.10.2005, 11:44
Цитата
А вообще на любую задачу существует 1000 алгоритмов решения

это так ( может, конечно, и не 1000... ), но этот не работает smile

Автор: Zero 6.10.2005, 21:01
Цитата(_hunter @ 6.10.2005, 11:44)
но этот не работает

Ты сначало скажи что именно не работает, а потом говори что он не работает...
Цитата(lonely @ 5.10.2005, 17:05)
Я предлагал почти тоже... алгоритм работает по тому же принципу...

Он уже вначале где то что-то вынес, на тест.... Если доработать то будет всё нормально... smile

Автор: _hunter 6.10.2005, 21:33
повторяю:
Сетевой фильтр Sven Platinum, 1.8 метра
Сетевой фильтр <Sven Platinum Pro> 1.8 м
это одно и тоже ( о чем твой алгоритм и сообщает )
а что-нить типа
колонки креатив
и колонки креатив минус -- не одно и то же ( а твой алгоритм сообщает об обратном )
или ( чтобы было понятнее )
Сетевой фильтр Samoklep Platinum, 1.8 метра
Сетевой фильтр <Samoklep Platinum Pro> 1.8 м
на самом деле слвсем разные фильтры

Автор: Zero 6.10.2005, 21:55
Цитата(_hunter @ 6.10.2005, 21:33)
Сетевой фильтр Samoklep Platinum, 1.8 метра
Сетевой фильтр <Samoklep Platinum Pro> 1.8 м
на самом деле слвсем разные фильтры

Ето в чиём интиресна придствление они то разные, кхе кхе... smile Прочитай цитату автара...
Цитата(lazarevmax_mcx @ 2.10.2005, 09:28)
Сетевой фильтр Sven Platinum, 1.8 метра
Сетевой фильтр <Sven Platinum Pro> 1.8 м

и чтобы в результате сравнений было true.

Ну как, секёшь чувак... smile
Добавлено @ 21:59
Цитата(_hunter @ 6.10.2005, 21:33)
колонки креатив
и колонки креатив минус -- не одно и то же ( а твой алгоритм сообщает об обратном )

Нее... Ну ты загнул... Это уже чисто семантика пошла... Тут единственный способ, это создание БД, с кучей всяких заумных слов...
Добавлено @ 22:01
Или во, я придумал коректировку алгоритма... smile
Пусть оставшиеся слова, проверяются на корректность:
-если слово корректное, то это другой товар
-иначе тот же...

Автор: _hunter 7.10.2005, 11:06
Цитата
Ето в чиём интиресна придствление они то разные, кхе кхе...

в представлении инженеров ( и маркетологов ) фирмы Samoklep -- они выпускают две ( абсолютно разные ) модели сетевых фильтров: представители первой модели горят в течении первых 40-ка секунд работы, а представители второй -- нет ( у них одна линия питани оборвана )
Цитата
Прочитай цитату автара...

сам прочитай... он писал о сетевых фильтрах компании Sven ( о чем я и написал:
Цитата(_hunter @ 6.10.2005, 21:33)
Сетевой фильтр Sven Platinum, 1.8 метра
Сетевой фильтр <Sven Platinum Pro> 1.8 м
это одно и тоже ( о чем твой алгоритм и сообщает )

)

Цитата
Это уже чисто семантика пошла... Тут единственный способ, это создание БД, с кучей всяких заумных слов...

ооо!.. НАКОНЕЦ ТО ПОНЯЛ!

Цитата
Или во, я придумал коректировку алгоритма... smile
Пусть оставшиеся слова, проверяются на корректность:
-если слово корректное, то это другой товар
-иначе тот же...

ну и толку с такой коректировки? + что понимаеться под "если слово корректное"?

Автор: Петрович 7.10.2005, 11:45
По моему, уже давно пора закончить спор.
Если в БД бардак, то справиться с ним может только человек, да и то, наделенный некоторыми техническими знаниями, и имеющий возможность, при необходимости, почерпнуть доп.информацию о товаре из других источников.
Программу такому не научить. Любая попытка сделать это, приведет к тому что один хаос в БД будет заменен на другой хаос.

Автор: Zero 7.10.2005, 23:46
Цитата(_hunter @ 7.10.2005, 11:06)
что понимаеться под "если слово корректное"

Если ты его напишешь в ворде например, и он на тебя не матернётся...
Цитата
Программу такому не научить. Любая попытка сделать это, приведет к тому что один хаос в БД будет заменен на другой хаос.

Ладно, мой алгоритм впринципе сможет, челу помоч в некотрой степени, но до конца коректировать прогу он должен сам... smile

Автор: Петрович 8.10.2005, 03:15
Цитата(Zero @ 8.10.2005, 00:46)
Ладно, мой алгоритм впринципе сможет, челу помоч в некотрой степени, но до конца коректировать прогу он должен сам...

Я считаю что "помоч в некотрой степени" здесь вряд ли сгодится. Если задача не решена полностью (что невозможно), то человеку вряд-ли будет легче. Ведь поскольку программа может ошибаться, то человеку в любом случае надо будет проверять правильность принятого программой решения.
Это как раз тот самый случай, когда человека не надо расслаблять иллюзией того что программа за него что-то сделала.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)