Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как проверить текст на полтора-два-три десятка слов-ключей? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Как проверить текст на полтора-два-три десятка слов-ключей?
Pran Дата: Пятница, 01.04.2011, 02:37 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Здравствуйте. Искал ответ на мой вопрос на форуме, но пока не нашел. Возможно, его и не было вовсе wink
Задача достаточно общая, поэтому файл не прикладываю...

Итак, условия: есть файл на пару тысяч ячеек. В каждой из них находится текст объявления о преподавании языков, из которого нужно вытащить данные по принципу: если в объявлении указан один язык, то в соседнюю ячейку записать соответствующее ему название, если же указаны несколько языков, то дать на выход "Разные", к примеру. В объявлении слова-ключи находятся в разных регистрах и могут повторяться в пределах одной ячейки. Если возможно, пожалуйста давайте варианты с английскими формулами (эксель 2003).
Можно сделать, конечно, по-тупому, методом сравнения-перебора в нескольких десятках ячеек, но это грустно wink
Надо делать или через массивы, или VBA, а я не знаю как и хочу заодно научиться.
Если я прав, то надо вначале определить массив с неизменямыми значениями слов-ключей: "английск", "испанск" и т.д., и второй массив - для выходных значений: "английский", "испанский"...

На всякий случай вот пример:
"Опытная преподавательница английского языка за разумную плату подготовит вашего ребёнка к вступительным экзаменам по английскому языку. Также преподаю французский начального уровня. Тел."

Должно выдавать в результате - "Разные". Если бы в тексте не было французского, то результат - "английский".
Поможете?

 
Ответить
СообщениеЗдравствуйте. Искал ответ на мой вопрос на форуме, но пока не нашел. Возможно, его и не было вовсе wink
Задача достаточно общая, поэтому файл не прикладываю...

Итак, условия: есть файл на пару тысяч ячеек. В каждой из них находится текст объявления о преподавании языков, из которого нужно вытащить данные по принципу: если в объявлении указан один язык, то в соседнюю ячейку записать соответствующее ему название, если же указаны несколько языков, то дать на выход "Разные", к примеру. В объявлении слова-ключи находятся в разных регистрах и могут повторяться в пределах одной ячейки. Если возможно, пожалуйста давайте варианты с английскими формулами (эксель 2003).
Можно сделать, конечно, по-тупому, методом сравнения-перебора в нескольких десятках ячеек, но это грустно wink
Надо делать или через массивы, или VBA, а я не знаю как и хочу заодно научиться.
Если я прав, то надо вначале определить массив с неизменямыми значениями слов-ключей: "английск", "испанск" и т.д., и второй массив - для выходных значений: "английский", "испанский"...

На всякий случай вот пример:
"Опытная преподавательница английского языка за разумную плату подготовит вашего ребёнка к вступительным экзаменам по английскому языку. Также преподаю французский начального уровня. Тел."

Должно выдавать в результате - "Разные". Если бы в тексте не было французского, то результат - "английский".
Поможете?


Автор - Pran
Дата добавления - 01.04.2011 в 02:37
Serge_007 Дата: Пятница, 01.04.2011, 08:34 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Pran)
Поможете?

Здравствуйте.
Формулами - да. Нужен файл - пример (потому как это не общий вопрос) и справочник возможных языков.


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Pran)
Поможете?

Здравствуйте.
Формулами - да. Нужен файл - пример (потому как это не общий вопрос) и справочник возможных языков.

Автор - Serge_007
Дата добавления - 01.04.2011 в 08:34
Hugo Дата: Пятница, 01.04.2011, 11:51 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3535
Репутация: 767 ±
Замечаний: 0% ±

365
Пока Pran готовится, сделал на своём примере макросом, два варианта.
К сообщению приложен файл: CheckLanguage.zip (16.5 Kb)


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеПока Pran готовится, сделал на своём примере макросом, два варианта.

Автор - Hugo
Дата добавления - 01.04.2011 в 11:51
Pran Дата: Пятница, 01.04.2011, 13:12 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Hugo - спасибо, через пару часов буду на месте, тогда и погоняю Ваши макросы. Вы молодец, дополнили вариантом "не найдено". 255 языков - этого должно хватить wink , ведь не надо же искать варианты вроде тимбукту и малонезийского biggrin

Quote (Serge_007)
Формулами - да. Нужен файл - пример (потому как это не общий вопрос) и справочник возможных языков.

Спасибо. Прилагаю файл с примером (справочник языков во второй вкладке).
К сообщению приложен файл: Primer_for_Lang.xls (19.5 Kb)


Сообщение отредактировал Pran - Пятница, 01.04.2011, 13:22
 
Ответить
СообщениеHugo - спасибо, через пару часов буду на месте, тогда и погоняю Ваши макросы. Вы молодец, дополнили вариантом "не найдено". 255 языков - этого должно хватить wink , ведь не надо же искать варианты вроде тимбукту и малонезийского biggrin

Quote (Serge_007)
Формулами - да. Нужен файл - пример (потому как это не общий вопрос) и справочник возможных языков.

Спасибо. Прилагаю файл с примером (справочник языков во второй вкладке).

Автор - Pran
Дата добавления - 01.04.2011 в 13:12
Hugo Дата: Пятница, 01.04.2011, 13:32 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3535
Репутация: 767 ±
Замечаний: 0% ±

365
Ограничение в 255 - это ограничения типа переменной Byte. Если нужно больше - можно сразу Long поставить, должно хватить smile
Проверил на Вашем примере.
Счёт 1:1 - одна ошибка у меня, одна у Вас smile
У меня - забыл регистр учесть. Две первые строки должны быть
Option Explicit
Option Compare Text

У Вас - 2 раза в списке испанский, поэтому на испанский пишет "разные".



webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеОграничение в 255 - это ограничения типа переменной Byte. Если нужно больше - можно сразу Long поставить, должно хватить smile
Проверил на Вашем примере.
Счёт 1:1 - одна ошибка у меня, одна у Вас smile
У меня - забыл регистр учесть. Две первые строки должны быть
Option Explicit
Option Compare Text

У Вас - 2 раза в списке испанский, поэтому на испанский пишет "разные".


Автор - Hugo
Дата добавления - 01.04.2011 в 13:32
Serge_007 Дата: Пятница, 01.04.2011, 13:47 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Pran)
Прилагаю файл с примером (справочник языков во второй вкладке).

Прилагаю файл с решением smile

Формула массива:

Code
=ЕСЛИ(СУММ(--НЕ(ЕОШ(ПОИСК(Sheet2!$A$1:$A$12;A2))))>1;"Разные";ЕСЛИ(СУММ(--НЕ(ЕОШ(ПОИСК(Sheet2!$A$1:$A$12;A2))));ИНДЕКС(Sheet2!$B$1:$B$12;МАКС(ЕСЛИ(ЕОШ(ПОИСК(Sheet2!$A$1:$A$12;A2));;СТРОКА($A$1:$A$12))));"Нет"))
К сообщению приложен файл: Pran.xls (25.5 Kb)


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Pran)
Прилагаю файл с примером (справочник языков во второй вкладке).

Прилагаю файл с решением smile

Формула массива:

Code
=ЕСЛИ(СУММ(--НЕ(ЕОШ(ПОИСК(Sheet2!$A$1:$A$12;A2))))>1;"Разные";ЕСЛИ(СУММ(--НЕ(ЕОШ(ПОИСК(Sheet2!$A$1:$A$12;A2))));ИНДЕКС(Sheet2!$B$1:$B$12;МАКС(ЕСЛИ(ЕОШ(ПОИСК(Sheet2!$A$1:$A$12;A2));;СТРОКА($A$1:$A$12))));"Нет"))

Автор - Serge_007
Дата добавления - 01.04.2011 в 13:47
Pran Дата: Пятница, 01.04.2011, 14:20 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Какие вы молодцы! Спасибо за два чудесных решения! Скоро прогоню на реальной бд, но вроде должно всё сработать smile
А потом буду сидеть разбираться-учиться.
Ещё раз спасибо!

P.S.

Quote (Hugo)
Счёт 1:1 - одна ошибка у меня, одна у Вас

И точно biggrin - я поторопился smile


Сообщение отредактировал Pran - Пятница, 01.04.2011, 14:33
 
Ответить
СообщениеКакие вы молодцы! Спасибо за два чудесных решения! Скоро прогоню на реальной бд, но вроде должно всё сработать smile
А потом буду сидеть разбираться-учиться.
Ещё раз спасибо!

P.S.

Quote (Hugo)
Счёт 1:1 - одна ошибка у меня, одна у Вас

И точно biggrin - я поторопился smile

Автор - Pran
Дата добавления - 01.04.2011 в 14:20
Pran Дата: Пятница, 01.04.2011, 20:30 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Проверил на реальной задаче - работает!!!
Единственно, что приходится через попу делать - это предварительно убирать ударения в тексте объявлений (там греческий язык), т.к. иначе не получается. У них символы под ударением выписаны отдельно от остальных в кодовой таблице sad
Всем спасибо ещё раз smile
Ещё буду сидеть разбираться с механизмом действия макроса и формул. Подскажете, если попаду в непонятный тупик?
 
Ответить
СообщениеПроверил на реальной задаче - работает!!!
Единственно, что приходится через попу делать - это предварительно убирать ударения в тексте объявлений (там греческий язык), т.к. иначе не получается. У них символы под ударением выписаны отдельно от остальных в кодовой таблице sad
Всем спасибо ещё раз smile
Ещё буду сидеть разбираться с механизмом действия макроса и формул. Подскажете, если попаду в непонятный тупик?

Автор - Pran
Дата добавления - 01.04.2011 в 20:30
Hugo Дата: Пятница, 01.04.2011, 21:41 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3535
Репутация: 767 ±
Замечаний: 0% ±

365
Можно посмотреть примеры этого греческого - что там мешает сравнивать?
Лучше в файле, и может быть скриншот небольшой тоже, если у нас может что-либо не отобразиться правильно.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеМожно посмотреть примеры этого греческого - что там мешает сравнивать?
Лучше в файле, и может быть скриншот небольшой тоже, если у нас может что-либо не отобразиться правильно.

Автор - Hugo
Дата добавления - 01.04.2011 в 21:41
Pran Дата: Пятница, 01.04.2011, 23:44 | Сообщение № 10
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Этих ударных гласных там мало, всего 10, я их уже прогнал в ворде (а можно было и прямо в экселе) с заменой на безударные - невелика морока smile
Так что всё работает, за исключением одной фигни, но это уже похоже нерешаемо... Суть вот в чём: если в тексте объявления одновременно указан язык и другое слово из нашего списка, которое распознаётся как второй язык, то результат = "Разные" sad

Вот какие монстрики встречаются:
Профессор английского языка греческо-австралийского гражданства преподаёт английский язык детям...
или
Французский преподаётся выпускницей греческо-французской школы "Урсула"...

Неминуемо засекаются ключи "англ" и "греч" ("франц" и "греч" во втором случае), и результат получается предсказуемый smile

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

Разные: ключ1, ключ2, ...

Несколько таких случаев положил в табличку, которую и выкладываю smile Отобразиться должно всё нормально smile

К сообщению приложен файл: Pran_2.xls (25.0 Kb)


Сообщение отредактировал Pran - Пятница, 01.04.2011, 23:47
 
Ответить
СообщениеЭтих ударных гласных там мало, всего 10, я их уже прогнал в ворде (а можно было и прямо в экселе) с заменой на безударные - невелика морока smile
Так что всё работает, за исключением одной фигни, но это уже похоже нерешаемо... Суть вот в чём: если в тексте объявления одновременно указан язык и другое слово из нашего списка, которое распознаётся как второй язык, то результат = "Разные" sad

Вот какие монстрики встречаются:
Профессор английского языка греческо-австралийского гражданства преподаёт английский язык детям...
или
Французский преподаётся выпускницей греческо-французской школы "Урсула"...

Неминуемо засекаются ключи "англ" и "греч" ("франц" и "греч" во втором случае), и результат получается предсказуемый smile

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

Разные: ключ1, ключ2, ...

Несколько таких случаев положил в табличку, которую и выкладываю smile Отобразиться должно всё нормально smile


Автор - Pran
Дата добавления - 01.04.2011 в 23:44
kim Дата: Суббота, 02.04.2011, 00:23 | Сообщение № 11
Группа: Друзья
Ранг: Обитатель
Сообщений: 371
Репутация: 160 ±
Замечаний: 0% ±

Excel 2010
Немного попаразитировал на файле от Сержа, надеюсь он не будет против smile
В синих ячейках...
К сообщению приложен файл: Pran111.xls (36.5 Kb)


Сцяна - гэта тая ж прыступка. Проста трэба дарасьці да яе.
 
Ответить
СообщениеНемного попаразитировал на файле от Сержа, надеюсь он не будет против smile
В синих ячейках...

Автор - kim
Дата добавления - 02.04.2011 в 00:23
Pran Дата: Суббота, 02.04.2011, 00:38 | Сообщение № 12
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Забавно получилось! Конечно, применимо только к русскому языку smile И то падежи могут так вывернуть наизнанку товарищи объявлениядающие wink , что мало не покажется!
И каюсь, вовсе не понял - зачем в формуле вот этот кусочек: LOOKUP("яяя" ?
 
Ответить
СообщениеЗабавно получилось! Конечно, применимо только к русскому языку smile И то падежи могут так вывернуть наизнанку товарищи объявлениядающие wink , что мало не покажется!
И каюсь, вовсе не понял - зачем в формуле вот этот кусочек: LOOKUP("яяя" ?

Автор - Pran
Дата добавления - 02.04.2011 в 00:38
kim Дата: Суббота, 02.04.2011, 00:51 | Сообщение № 13
Группа: Друзья
Ранг: Обитатель
Сообщений: 371
Репутация: 160 ±
Замечаний: 0% ±

Excel 2010
Ну раз непонятен только этот кусочек - отвечу:
Эта часть отвечает за возврат из массива последнего текстового значения.
Quote (Pran)
И то падежи могут так вывернуть наизнанку товарищи объявлениядающие , что мало не покажется!

Тем не менее обрабатываются предложенные ранее монстрики...

Quote (Pran)
Вот какие монстрики встречаются: Профессор английского языка греческо-австралийского гражданства преподаёт английский язык детям... или Французский преподаётся выпускницей греческо-французской школы "Урсула"


Сцяна - гэта тая ж прыступка. Проста трэба дарасьці да яе.
 
Ответить
СообщениеНу раз непонятен только этот кусочек - отвечу:
Эта часть отвечает за возврат из массива последнего текстового значения.
Quote (Pran)
И то падежи могут так вывернуть наизнанку товарищи объявлениядающие , что мало не покажется!

Тем не менее обрабатываются предложенные ранее монстрики...

Quote (Pran)
Вот какие монстрики встречаются: Профессор английского языка греческо-австралийского гражданства преподаёт английский язык детям... или Французский преподаётся выпускницей греческо-французской школы "Урсула"

Автор - kim
Дата добавления - 02.04.2011 в 00:51
Pran Дата: Суббота, 02.04.2011, 01:00 | Сообщение № 14
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Спасибо, дошло smile
Непонятного куча, конечно же, поэтому разгребаю формулу по кусочкам smile Даже не знал про то, что существуют формулы массивов sad Решение на макросе мне попонятнее выглядит (лет 20 назад программировал, грешен).
Думаю теперь, как бы применить эту красоту к греческому biggrin


Сообщение отредактировал Pran - Суббота, 02.04.2011, 01:27
 
Ответить
СообщениеСпасибо, дошло smile
Непонятного куча, конечно же, поэтому разгребаю формулу по кусочкам smile Даже не знал про то, что существуют формулы массивов sad Решение на макросе мне попонятнее выглядит (лет 20 назад программировал, грешен).
Думаю теперь, как бы применить эту красоту к греческому biggrin

Автор - Pran
Дата добавления - 02.04.2011 в 01:00
Hugo Дата: Суббота, 02.04.2011, 12:31 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3535
Репутация: 767 ±
Замечаний: 0% ±

365
Нет, макрос всё же проще было бы написать, чем такую формулу (автор - kim):
Code
=ВЫБОР(СУММ(--(СУММ(--(МУМНОЖ(--ЕЧИСЛО(ПОИСК(Sheet2!A$1:A$12&{"ий";"ого"};A2));{1:1})>0))>{0:1}))+1;"нет";ПРОСМОТР("яяя";ЕСЛИ(МУМНОЖ(--ЕЧИСЛО(ПОИСК(Sheet2!A$1:A$12&{"ий";"ого"};A2));{1:1})>0;Sheet2!B$1:B$12));"Разные")

И даже она соврёт на такой чисто теоретической фразе:
Профессор немецкого языка греческо-австралийского гражданства преподаёт английский язык детям...
Но тут уже нужно имхо программу искусственного интеллекта писать smile
А макросом вероятно можно по такому алгоритму написать - разбить строку по пробелам в массив, затем каждое слово (элемент массива) проверить на частичное совпадение списку, и если совпало, то проверить его окончание по списку окончаний (именно окончание слова).
Но на выше приведённой фразе такой алгоритм тоже соврёт. А как быть например с "Немецко-французские занятия каждое воскресенье"? smile Тут мой первый макрос и формула Сергея только правильно сработает, т.к. окончания нехарактерные.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНет, макрос всё же проще было бы написать, чем такую формулу (автор - kim):
Code
=ВЫБОР(СУММ(--(СУММ(--(МУМНОЖ(--ЕЧИСЛО(ПОИСК(Sheet2!A$1:A$12&{"ий";"ого"};A2));{1:1})>0))>{0:1}))+1;"нет";ПРОСМОТР("яяя";ЕСЛИ(МУМНОЖ(--ЕЧИСЛО(ПОИСК(Sheet2!A$1:A$12&{"ий";"ого"};A2));{1:1})>0;Sheet2!B$1:B$12));"Разные")

И даже она соврёт на такой чисто теоретической фразе:
Профессор немецкого языка греческо-австралийского гражданства преподаёт английский язык детям...
Но тут уже нужно имхо программу искусственного интеллекта писать smile
А макросом вероятно можно по такому алгоритму написать - разбить строку по пробелам в массив, затем каждое слово (элемент массива) проверить на частичное совпадение списку, и если совпало, то проверить его окончание по списку окончаний (именно окончание слова).
Но на выше приведённой фразе такой алгоритм тоже соврёт. А как быть например с "Немецко-французские занятия каждое воскресенье"? smile Тут мой первый макрос и формула Сергея только правильно сработает, т.к. окончания нехарактерные.

Автор - Hugo
Дата добавления - 02.04.2011 в 12:31
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!