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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 18.04.2008, 12:26   #1
Zorg
Пользователь
 
Регистрация: 18.04.2008
Сообщений: 41
По умолчанию Помогите разобраться с текстом в ячейке!!!

Подскажите, пожалуйста, как с помощью формул (или макроса) описать содержание текста, содержащегося в ячейке, в нескольких других ячейках. Речь идет об описании товара в БД, а нужно вычленить его характеристики...
Пример есть в прикрепленном файле. Первая строка прокодирована вручную. Остальные нужно прокодировать также, но автоматически (всего таких ячеек - 60 тысяч. (
P.S. Проблема еще в том, что описание одной характеристики товара может быть написано разными вариантами (например слово "полусладкое" может быть написано как "полусладкое", как "п/сладкое", как "п/слад." или как "п/сл")... И можно ли это как-то совместить с каталогом возможных вариантов написания???
Очень большая просьба помочь!!!
Вложения
Тип файла: rar пример.rar (2.3 Кб, 20 просмотров)

Последний раз редактировалось Zorg; 18.04.2008 в 12:38.
Zorg вне форума
Старый 18.04.2008, 13:13   #2
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
По умолчанию

Ну, это голая эвристика. За один проход такое не обрабатывается.

Не похоже, чтобы таблица формировалась из базы данных: в одних ячейках перечисление типа "НАТУРАЛЬНОЕ СТОЛОВОЕ ОРДИНАРНОЕ ТИХОЕ П/СЛАДКОЕ БЕЛОЕ" через запятые после каждого слова, в других - без запятых вообще, в третьих - где есть, где нет...

Так что - только методом последовательных приближений.
Выдвигается серия гипотез:
1) в каждой ячейке есть название;
2) название ограничено кавычками;
3) в каждой ячейке только две кавычки.
Далее на всём объёме проверяется, так ли это.
Если так, то уже каждая ячейка распадается на три строки: до названия, название, после названия.

Теперь выдвигаются гипотезы для "до названия" - что там и только там (или не только?) содержатся такие-то характеристики в такой-то последовательности (или вперемешку?); причём такая-то характеристика может (не может?) отсутствовать. Разделители между некоторыми (но не всеми?) характеристиками, как мы уже видим, хаотичны, следовательно заменяются унифицированным etc.

Гипотезы проверяются, уточняются, после этого строка делится.

И так далее.

При поступлении новых исходных данных накопленный "опыт" перед использованием обязательно проверяется с индикацией всего, что ему противоречит, и уточняется.

Характеристик не так много, словари синонимов допустимых значений для них не так уж многочисленны и не так уж объёмны
дмидми вне форума
Старый 18.04.2008, 13:35   #3
Zorg
Пользователь
 
Регистрация: 18.04.2008
Сообщений: 41
По умолчанию

Дмидми, спасибо за оперативный ответ...

Наверное разделить структуру текста на три части не получится, так как проблема еще и в том, что в ряде названий вообще нет кавычек...

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

То есть задать ряд условий и получить исходя из этого ряд ответов

Вручную это делается отфильтровкой, а автоматически как?
Zorg вне форума
Старый 18.04.2008, 14:01   #4
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
По умолчанию Таскать вам не перетаскать! (с)

Вот же я и говорю: только методом последовательных приближений, многопроходной обработки. Главное - не пропустить момент нарушения какой-либо гипотезы. Вычленили то, что вроде бы несомненно, убедились в том, что нигде не ошиблись, - новый проход, по оставшемуся.

Автоматически? Только после того, как в таком полуавтоматическом режиме обработали данную таблицу до конца, накапливая гипотезы, автоматически обработается - но только именно эта таблица, с этими данными. При поступлении новых данных автомат должен немедленно указывать на все подозрительные моменты, чтобы можно было уточнить гипотезы, пополнить словари etc.

Для сомнительных и принципиально неразрешимых ситуаций должен быть предусмотрен запрос к оператору.

P.S. На всякий случай: учтите, что, например, в слове "BСЕГО" первая буква - латинская (b).
дмидми вне форума
Старый 18.04.2008, 14:23   #5
Zorg
Пользователь
 
Регистрация: 18.04.2008
Сообщений: 41
По умолчанию

Дмидми,
а как в прикладном варианте проверить такую гипотезу?
Желательно алгоритмом...
Zorg вне форума
Старый 18.04.2008, 14:56   #6
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
По умолчанию

Вот ты сам себе и ответил
дмидми вне форума
Старый 18.04.2008, 15:10   #7
Zorg
Пользователь
 
Регистрация: 18.04.2008
Сообщений: 41
По умолчанию

Понятней, увы, не стало...
Особенно как конкретно пошагово должен выглядеть этот алгоритм...
Zorg вне форума
Старый 18.04.2008, 18:37   #8
ZORRO2005
Форумчанин
 
Аватар для ZORRO2005
 
Регистрация: 26.11.2006
Сообщений: 584
По умолчанию

Zorg,
дмидми прав
Цитата:
методом последовательных приближений, многопроходной обработки
Посмотрите файл и еще здесь:
http://www.programmersforum.ru/showthread.php?t=16871
Вложения
Тип файла: rar пример.rar (3.0 Кб, 34 просмотров)

Последний раз редактировалось ZORRO2005; 18.04.2008 в 18:57.
ZORRO2005 вне форума
Старый 18.04.2008, 22:44   #9
Zorg
Пользователь
 
Регистрация: 18.04.2008
Сообщений: 41
По умолчанию

Спасибо, ZORRO2005!
Вот это значительно понятней.
Zorg вне форума
Старый 21.04.2008, 14:12   #10
Zorg
Пользователь
 
Регистрация: 18.04.2008
Сообщений: 41
По умолчанию

Кстати, если кто столкнется - добрые люди подсказали макрос на эту тему. С ним еще проще...

Sub tomanyrow()
Cells(1, 1).Select
For r = 1 To 20
Cells(r, 1).Select
StrValue = LCase(ActiveCell.Value)
'Ищем тип вина
col = 2
strsearch = "натур"
f = InStrRev(StrValue, strsearch, , vbTextCompare)
If f > 0 Then
Cells(r, col).Select
ActiveCell.Value = "нат"
End If
Next
End Sub

Ну и так далее по всем вариантам
Zorg вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с текстом Кронос Общие вопросы Delphi 2 07.05.2008 22:18
Помогите с текстом прграммы. anuego Помощь студентам 1 25.04.2008 14:02
при пустой ячейке выскакивает "is not a valid floating point value" ПОМОГИТЕ serserser Помощь студентам 17 14.11.2007 07:46
помогите с текстом radiobutton! KlErik Общие вопросы Delphi 3 22.05.2007 08:27