![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Форумчанин
Регистрация: 30.01.2008
Сообщений: 314
|
![]()
посчитать корреляцию
допустим, наличие цифробуквенного кода - полное совпадение, совпадение начальных символов отдельных слов - отношение количества совпадений к минимальному количеству слов и т.п. .. |
![]() |
![]() |
#12 |
Пользователь
Регистрация: 22.08.2008
Сообщений: 65
|
![]()
вот в том то все и дело
какие именно отношения лучше всего взять? |
![]() |
![]() |
#13 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
Лично я - большой любитель замутить мощную формулу, которая бы сразу все посчитала, но было уже много задач, где я спасовал в пользу ВБА.
Боюсь, что данная относится именно к таким задачам. Дело в том, что выдать коэффициент кореляции от 0 до 1, на мой взгляд недостаточно. Необходимо выдать четкую рекомендацию 0 или 1. Было бы очень не полохо добиться именно такого результата. Согласитесь, если сравнивать 10 тыс. пар и по 7 тысячам из них получить результат 0,7 - это значит, что решение принимать необходимо практически вручную. Мое представление - нераспознанных пар должно быть меньше 1%. На 10 тысячах записей - это приемлемая цифра. Если крупными мазками, то алгоритм сравнения двух строк на предмет их схожести может быть таким: 0. Сравнить, может они одинаковы 1. Выделяем меньшую по размерам (строка1) 2. Делим строку1 на блоки данных (блок это буквы подряд или цифры подряд), разделители (пробелы, точки, запятые, тире, косые, кавычки и т.д.) игнорируем 3. Ищем вхождение блоков в строке2. Если нашлись все - это одно и тоже. Те, которые нашлись - вырезаем??? из строки2, уменьшим таким образом количество последующих вычислений. Выкидываем из строки2 все разделители и повторяем поиск не найденных ранее блоков. Строка2 теперь есть в 3-х видах: исходная строка2, строка21 - с удаленными распознанными блоками, строка22 - с удаленными блоками и разделителями. 4. Блоки, которые не нашлись, дробим на меньшие части, вплоть до побуквенно анализа. Собственно, если распишем алгоритм для 4-го пункта - задача решена. Прошу высказываться. Поддерживаем, развиваем изложенные мысли, критикуем в пух и прах - кому что ближе. Смелее, господа.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
Последний раз редактировалось IgorGO; 29.09.2008 в 19:30. |
![]() |
![]() |
#14 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
добавлю ещё немножечко...
очень много зависит от конкретной решаемой задачи. например, "казнить нельзя, помиловать" и "казнить, нельзя помиловать" одно и то же? ;-) или совпадения ИНН/Банковских счетов, номеров паспортов и прочей идентифицируещей информации... никаких корреляций - или совпало, или нет... хотя тот же советский паспорт (где была серия из римских циферок - как только не кодировали ;-) хотя, подход IgorGO мне кажется вполне работоспобным и перспективным. респект! |
![]() |
![]() |
#15 |
Форумчанин
Регистрация: 25.08.2008
Сообщений: 159
|
![]()
+++ IgorGO
а что если еще и использовать подход правописания WORD'а. Часто бывают проблемы когда в названии продукта, например, дописывают, сокращают или ошибаются в словах. брать блок, кторый представляет слово (причем если написано "телефонSGH100" разделить на "телефон SGH 100"), по символьно сравнивать с блоками из строки2, каждый символ должен находиться за предидущими и до следующих. создать два массива в одном отмечать положения каждого символа строки1 в строке2, во втором отмечать просмотренные символы в строке2, чтобы не зарегистровать один и тот же символ несколько раз(дальше развить). и, например, при 85% совпадении считать, что эти блоки идентичны. + к этому, возвращать не 0 или 1, а объект со значениями(или передавать параметры): -сколько блоков лишних в обоих строках или в одной, и/или совпавших; -каков минимальный процент похожести одного из совпавших блоков; -каков общий процент похожести совпавших блоков; -каков общий процент похожести строк; +к списку присваивать блокам типы(слово рус., слово англ., цифры или что-то подобное) -и выдавать тип блока не совпавшего с другой строкой (например если в паре "телефонSGH100" и "телефонSGH110" не совпадет только "100" и "110" сказать, что не совпадает серия цифр) |
![]() |
![]() |
#16 |
Форумчанин
Регистрация: 30.01.2008
Сообщений: 314
|
![]()
вообще-то все это является частью алгоритмов поисковых машин..
может просто погуглить по этой базе? ![]() но определенность тематики базы может играть существенную роль - упрощать поиск.. выложите хотябы пример что ли |
![]() |
![]() |
#17 | |
Форумчанин
Регистрация: 30.01.2008
Сообщений: 314
|
![]() Цитата:
|
|
![]() |
![]() |
#18 |
Форумчанин
Регистрация: 06.03.2008
Сообщений: 352
|
![]() |
![]() |
![]() |
#19 | |
Форумчанин
Регистрация: 25.08.2008
Сообщений: 159
|
![]() Цитата:
можно придумать что-то вроде маски определяющей блок, для некоторых случаев(например: для выше приведенной сравниваемой пары - EEENNN или E*N* и т.д., где E -англ. символы, а N - цифры), перед этим тестом удалить все ковырки, пробелы и т.д., и попытаться найти похожие блоки по этим маскам. а для быстрой обработки такого кода, грамтоно продумать его структуру, помоему лучше больше задать параметров(+optional), не поленясь тыкать по клавишам, и хотябы else'м думать что обрабатывать, а что нет. в любом случае будет быстрее чем ручками по тысячам строк. А иногда, если машина будет сомневаться, можно и спросить у user'а как лучше, ничего страшного не случится, грамотнее будут в будущем. |
|
![]() |
![]() |
#20 |
Пользователь
Регистрация: 22.08.2008
Сообщений: 65
|
![]()
Спасибо всем, все в тему...
Только я забыл сказать, что для того, чтобы сравнивать пары нужно сначала сделать так, чтобы список был отсортированном по формульному коду, который должен показывать какая запись сколько "весит" (я это пока так называю). Иначе сравнивать пары (если они не рядом) просто невозможно... |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вычислить коэффициент сопротивления ξ движущейся в воздушной среде сферической частиц | Noor | Общие вопросы C/C++ | 1 | 27.05.2007 00:34 |