Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 29.09.2008, 14:42   #11
slan
Форумчанин
 
Аватар для slan
 
Регистрация: 30.01.2008
Сообщений: 314
По умолчанию попробовать различные параметры(функции)

посчитать корреляцию

допустим, наличие цифробуквенного кода - полное совпадение,
совпадение начальных символов отдельных слов - отношение количества совпадений к минимальному количеству слов

и т.п. ..
slan вне форума
Старый 29.09.2008, 18:11   #12
Konstantin_Z
Пользователь
 
Регистрация: 22.08.2008
Сообщений: 65
По умолчанию

вот в том то все и дело
какие именно отношения лучше всего взять?
Konstantin_Z вне форума
Старый 29.09.2008, 19:27   #13
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 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.
IgorGO вне форума
Старый 29.09.2008, 20:52   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

добавлю ещё немножечко...
очень много зависит от конкретной решаемой задачи.
например, "казнить нельзя, помиловать" и "казнить, нельзя помиловать" одно и то же? ;-)

или совпадения ИНН/Банковских счетов, номеров паспортов и прочей идентифицируещей информации...
никаких корреляций - или совпало, или нет...
хотя тот же советский паспорт (где была серия из римских циферок - как только не кодировали ;-)

хотя, подход IgorGO мне кажется вполне работоспобным и перспективным. респект!
Serge_Bliznykov вне форума
Старый 30.09.2008, 01:02   #15
tolikman
Форумчанин
 
Регистрация: 25.08.2008
Сообщений: 159
По умолчанию

+++ IgorGO
а что если еще и использовать подход правописания WORD'а.
Часто бывают проблемы когда в названии продукта, например, дописывают, сокращают или ошибаются в словах. брать блок, кторый представляет слово (причем если написано "телефонSGH100" разделить на "телефон SGH 100"), по символьно сравнивать с блоками из строки2, каждый символ должен находиться за предидущими и до следующих. создать два массива в одном отмечать положения каждого символа строки1 в строке2, во втором отмечать просмотренные символы в строке2, чтобы не зарегистровать один и тот же символ несколько раз(дальше развить). и, например, при 85% совпадении считать, что эти блоки идентичны.

+ к этому, возвращать не 0 или 1, а объект со значениями(или передавать параметры):
-сколько блоков лишних в обоих строках или в одной, и/или совпавших;
-каков минимальный процент похожести одного из совпавших блоков;
-каков общий процент похожести совпавших блоков;
-каков общий процент похожести строк;
+к списку
присваивать блокам типы(слово рус., слово англ., цифры или что-то подобное)
-и выдавать тип блока не совпавшего с другой строкой (например если в паре "телефонSGH100" и "телефонSGH110" не совпадет только "100" и "110" сказать, что не совпадает серия цифр)
tolikman вне форума
Старый 30.09.2008, 13:06   #16
slan
Форумчанин
 
Аватар для slan
 
Регистрация: 30.01.2008
Сообщений: 314
По умолчанию

вообще-то все это является частью алгоритмов поисковых машин..

может просто погуглить по этой базе?

но определенность тематики базы может играть существенную роль - упрощать поиск..


выложите хотябы пример что ли
slan вне форума
Старый 30.09.2008, 13:10   #17
slan
Форумчанин
 
Аватар для slan
 
Регистрация: 30.01.2008
Сообщений: 314
По умолчанию

Цитата:
Сообщение от tolikman Посмотреть сообщение
+++ IgorGO
а что если еще и использовать подход правописания WORD'а.
Часто бывают проблемы когда в названии продукта, например, дописывают, сокращают или ошибаются в словах. брать блок, кторый представляет слово (причем если написано "телефонSGH100" разделить на "телефон SGH 100"), по символьно сравнивать с блоками из строки2, каждый символ должен находиться за предидущими и до следующих. создать два массива в одном отмечать положения каждого символа строки1 в строке2, во втором отмечать просмотренные символы в строке2, чтобы не зарегистровать один и тот же символ несколько раз(дальше развить). и, например, при 85% совпадении считать, что эти блоки идентичны.

+ к этому, возвращать не 0 или 1, а объект со значениями(или передавать параметры):
-сколько блоков лишних в обоих строках или в одной, и/или совпавших;
-каков минимальный процент похожести одного из совпавших блоков;
-каков общий процент похожести совпавших блоков;
-каков общий процент похожести строк;
+к списку
присваивать блокам типы(слово рус., слово англ., цифры или что-то подобное)
-и выдавать тип блока не совпавшего с другой строкой (например если в паре "телефонSGH100" и "телефонSGH110" не совпадет только "100" и "110" сказать, что не совпадает серия цифр)
вот я бы сказал, что если встречается буквенно цифровой код, то он и идентифицирует предмет.. если в двух выражениях такие коды совпадают, то это 100% одно и то же
slan вне форума
Старый 30.09.2008, 16:26   #18
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
Смех Ох, как бы было хорошо!

Цитата:
Сообщение от slan Посмотреть сообщение
если встречается буквенно цифровой код, то он и идентифицирует предмет.. если в двух выражениях такие коды совпадают, то это 100% одно и то же
Если бы... Не буду называть фабрику, но она регулярно перебрасывает артикулы с одного товара на совершенно другой.
дмидми вне форума
Старый 30.09.2008, 20:36   #19
tolikman
Форумчанин
 
Регистрация: 25.08.2008
Сообщений: 159
По умолчанию

Цитата:
Сообщение от slan Посмотреть сообщение
вот я бы сказал, что если встречается буквенно цифровой код, то он и идентифицирует предмет.. если в двух выражениях такие коды совпадают, то это 100% одно и то же
"телефонSGH100" и "телефон SGH100" - два разных буквенных кода в итоге, а на практике - хуже.
можно придумать что-то вроде маски определяющей блок, для некоторых случаев(например: для выше приведенной сравниваемой пары - EEENNN или E*N* и т.д., где E -англ. символы, а N - цифры), перед этим тестом удалить все ковырки, пробелы и т.д., и попытаться найти похожие блоки по этим маскам.

а для быстрой обработки такого кода, грамтоно продумать его структуру, помоему лучше больше задать параметров(+optional), не поленясь тыкать по клавишам, и хотябы else'м думать что обрабатывать, а что нет. в любом случае будет быстрее чем ручками по тысячам строк. А иногда, если машина будет сомневаться, можно и спросить у user'а как лучше, ничего страшного не случится, грамотнее будут в будущем.
tolikman вне форума
Старый 02.10.2008, 11:23   #20
Konstantin_Z
Пользователь
 
Регистрация: 22.08.2008
Сообщений: 65
По умолчанию

Спасибо всем, все в тему...
Только я забыл сказать, что для того, чтобы сравнивать пары нужно сначала сделать так, чтобы список был отсортированном по формульному коду, который должен показывать какая запись сколько "весит" (я это пока так называю).
Иначе сравнивать пары (если они не рядом) просто невозможно...
Konstantin_Z вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить коэффициент сопротивления ξ движущейся в воздушной среде сферической частиц Noor Общие вопросы C/C++ 1 27.05.2007 00:34