| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
А у меня такая: 1. Создаёш два буфера типа string; 2. Потом загоняшь в каждый буферы соответствующие строки; 3. Потом через цикл по кол-ву символов во втором буфере, удаляешь символы из него которые не подходят по определённым критериям (например: спецсимволы, скобки и т.п.) 4. Далее остатки буферов сравниваешь. |
| Автор: Vet 2.10.2005, 20:11 |
| lazarevmax_mcx, под твое условие подошло бы и: Pos('Sven Platinum', 'Строка с фильтром') > 0 |
| Автор: cardinal 2.10.2005, 20:41 |
| А у меня другая идея: навести порядок в прайс-листе. Зачем парится над хитрыми решениями поиска и сравнения, когда можно внести ограничения в систему ввода наименований товара и обеспечить тем самым порядок! |
| Автор: 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 | ||
А что если кто-то начал делать г...., извиняюсь, то надо продолжать это делать? Возможно это как раз тот момент, в который еще можно переработать все вручную, чтобы в будущем не париться. |
| Автор: _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? Добавлено @ 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 | ||||
Петрович с плюсом это уже будет совсем другой элемент А я предумал ещё один способ: 1. Рассмотреть в цикле каждое отдельное слово первой строки, и найти такоеже слово во второй строке; 2. потом: -- если во второй строке, слов больше чем на одно то это разные товары, -- если слова первой строки ненайдены во второй то тоже разные; 3. Если после сравнения каждое слово первой строки будет найдено во второй строке, и во второй строке останится максимум 1 слово, тогда ─ это один и тот же товар;.... При этом регистр должен быть одним (например все символы должны быть маленькими), при этом в обоих строках удалить все спецсимволы и т.п. |
| Автор: _hunter 5.10.2005, 11:59 |
| пункт 2.2 -- не катит ( если сравнивать наоборот ) + алгоритм не катит -- не факт что какой-нить "креатив платинум" и "креатив про" тоже одно и то же. |
| Автор: Zero 5.10.2005, 12:04 | ||||
Смысла нет, достаточно делать сравнения в одну сторону.
В соответствии с пунктом 2.2 эти слава будут разными... |
| Автор: Pakshin A. S. 5.10.2005, 17:05 |
| Zero Я предлагал почти тоже... алгоритм работает по тому же принципу... |
| Автор: _hunter 5.10.2005, 17:41 | ||||
а откуда ты знаеш правильную сторону?
тогда и свены будут разными -- что неправильно |
| Автор: Pakshin A. S. 5.10.2005, 17:44 |
| Как я понимаю мы тут "собираемся" делать распознавалку моделей, что естессно нереально, но может зачинщику этого обсуждения просто нуно сравнить приблизительно строки? |
| Автор: Zero 5.10.2005, 22:23 | ||||||
Её можно определить программно...
А в соответствии с примичанием и свены будут одинаковыми...
Видишь Pakshin A.S. мыслил по тому же принцыпу... А я когда придумал этот способ, предварительно представил как у меня мыслит в этом плане голова... |
| Автор: _hunter 6.10.2005, 10:55 | ||||
интересно как? ;)
дааа? интересно почему это в соостветствии с примичанием "свен платинум" и "свен про" это одно и то же а "креатив платинум" и "креатив про" нет |
| Автор: Zero 6.10.2005, 11:26 | ||||||||||
Я думал ты имеешь ввиду про:
А если:
То в соответствии с пунктом 2.2 эти свены будут разными
Это аналогично.
строка где слов меньше то ─ 1-ое предложение, а другое 2 ─ ое... А вообще на любую задачу существует 1000 алгоритмов решения.... |
| Автор: _hunter 6.10.2005, 11:44 | ||
это так ( может, конечно, и не 1000... ), но этот не работает |
| Автор: Zero 6.10.2005, 21:01 | ||||
Ты сначало скажи что именно не работает, а потом говори что он не работает...
Он уже вначале где то что-то вынес, на тест.... Если доработать то будет всё нормально... |
| Автор: _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 | ||||||
Ето в чиём интиресна придствление они то разные, кхе кхе...
Ну как, секёшь чувак... Добавлено @ 21:59
Нее... Ну ты загнул... Это уже чисто семантика пошла... Тут единственный способ, это создание БД, с кучей всяких заумных слов... Добавлено @ 22:01 Или во, я придумал коректировку алгоритма... Пусть оставшиеся слова, проверяются на корректность: -если слово корректное, то это другой товар -иначе тот же... |
| Автор: _hunter 7.10.2005, 11:06 | ||||||||||
в представлении инженеров ( и маркетологов ) фирмы Samoklep -- они выпускают две ( абсолютно разные ) модели сетевых фильтров: представители первой модели горят в течении первых 40-ка секунд работы, а представители второй -- нет ( у них одна линия питани оборвана )
сам прочитай... он писал о сетевых фильтрах компании Sven ( о чем я и написал:
)
ооо!.. НАКОНЕЦ ТО ПОНЯЛ!
ну и толку с такой коректировки? + что понимаеться под "если слово корректное"? |
| Автор: Петрович 7.10.2005, 11:45 |
| По моему, уже давно пора закончить спор. Если в БД бардак, то справиться с ним может только человек, да и то, наделенный некоторыми техническими знаниями, и имеющий возможность, при необходимости, почерпнуть доп.информацию о товаре из других источников. Программу такому не научить. Любая попытка сделать это, приведет к тому что один хаос в БД будет заменен на другой хаос. |
| Автор: Zero 7.10.2005, 23:46 | ||||
Если ты его напишешь в ворде например, и он на тебя не матернётся...
Ладно, мой алгоритм впринципе сможет, челу помоч в некотрой степени, но до конца коректировать прогу он должен сам... |
| Автор: Петрович 8.10.2005, 03:15 | ||
Я считаю что "помоч в некотрой степени" здесь вряд ли сгодится. Если задача не решена полностью (что невозможно), то человеку вряд-ли будет легче. Ведь поскольку программа может ошибаться, то человеку в любом случае надо будет проверять правильность принятого программой решения. Это как раз тот самый случай, когда человека не надо расслаблять иллюзией того что программа за него что-то сделала. |