Здравствуйте. Искал ответ на мой вопрос на форуме, но пока не нашел. Возможно, его и не было вовсе Задача достаточно общая, поэтому файл не прикладываю...
Итак, условия: есть файл на пару тысяч ячеек. В каждой из них находится текст объявления о преподавании языков, из которого нужно вытащить данные по принципу: если в объявлении указан один язык, то в соседнюю ячейку записать соответствующее ему название, если же указаны несколько языков, то дать на выход "Разные", к примеру. В объявлении слова-ключи находятся в разных регистрах и могут повторяться в пределах одной ячейки. Если возможно, пожалуйста давайте варианты с английскими формулами (эксель 2003). Можно сделать, конечно, по-тупому, методом сравнения-перебора в нескольких десятках ячеек, но это грустно Надо делать или через массивы, или VBA, а я не знаю как и хочу заодно научиться. Если я прав, то надо вначале определить массив с неизменямыми значениями слов-ключей: "английск", "испанск" и т.д., и второй массив - для выходных значений: "английский", "испанский"...
На всякий случай вот пример: "Опытная преподавательница английского языка за разумную плату подготовит вашего ребёнка к вступительным экзаменам по английскому языку. Также преподаю французский начального уровня. Тел."
Должно выдавать в результате - "Разные". Если бы в тексте не было французского, то результат - "английский". Поможете?
Здравствуйте. Искал ответ на мой вопрос на форуме, но пока не нашел. Возможно, его и не было вовсе Задача достаточно общая, поэтому файл не прикладываю...
Итак, условия: есть файл на пару тысяч ячеек. В каждой из них находится текст объявления о преподавании языков, из которого нужно вытащить данные по принципу: если в объявлении указан один язык, то в соседнюю ячейку записать соответствующее ему название, если же указаны несколько языков, то дать на выход "Разные", к примеру. В объявлении слова-ключи находятся в разных регистрах и могут повторяться в пределах одной ячейки. Если возможно, пожалуйста давайте варианты с английскими формулами (эксель 2003). Можно сделать, конечно, по-тупому, методом сравнения-перебора в нескольких десятках ячеек, но это грустно Надо делать или через массивы, или VBA, а я не знаю как и хочу заодно научиться. Если я прав, то надо вначале определить массив с неизменямыми значениями слов-ключей: "английск", "испанск" и т.д., и второй массив - для выходных значений: "английский", "испанский"...
На всякий случай вот пример: "Опытная преподавательница английского языка за разумную плату подготовит вашего ребёнка к вступительным экзаменам по английскому языку. Также преподаю французский начального уровня. Тел."
Должно выдавать в результате - "Разные". Если бы в тексте не было французского, то результат - "английский". Поможете?
Hugo - спасибо, через пару часов буду на месте, тогда и погоняю Ваши макросы. Вы молодец, дополнили вариантом "не найдено". 255 языков - этого должно хватить , ведь не надо же искать варианты вроде тимбукту и малонезийского
Quote (Serge_007)
Формулами - да. Нужен файл - пример (потому как это не общий вопрос) и справочник возможных языков.
Спасибо. Прилагаю файл с примером (справочник языков во второй вкладке).
Hugo - спасибо, через пару часов буду на месте, тогда и погоняю Ваши макросы. Вы молодец, дополнили вариантом "не найдено". 255 языков - этого должно хватить , ведь не надо же искать варианты вроде тимбукту и малонезийского
Quote (Serge_007)
Формулами - да. Нужен файл - пример (потому как это не общий вопрос) и справочник возможных языков.
Спасибо. Прилагаю файл с примером (справочник языков во второй вкладке).Pran
Ограничение в 255 - это ограничения типа переменной Byte. Если нужно больше - можно сразу Long поставить, должно хватить Проверил на Вашем примере. Счёт 1:1 - одна ошибка у меня, одна у Вас У меня - забыл регистр учесть. Две первые строки должны быть Option Explicit Option Compare Text
У Вас - 2 раза в списке испанский, поэтому на испанский пишет "разные".
Ограничение в 255 - это ограничения типа переменной Byte. Если нужно больше - можно сразу Long поставить, должно хватить Проверил на Вашем примере. Счёт 1:1 - одна ошибка у меня, одна у Вас У меня - забыл регистр учесть. Две первые строки должны быть Option Explicit Option Compare Text
У Вас - 2 раза в списке испанский, поэтому на испанский пишет "разные".
Какие вы молодцы! Спасибо за два чудесных решения! Скоро прогоню на реальной бд, но вроде должно всё сработать А потом буду сидеть разбираться-учиться. Ещё раз спасибо!
P.S.
Quote (Hugo)
Счёт 1:1 - одна ошибка у меня, одна у Вас
И точно - я поторопился
Какие вы молодцы! Спасибо за два чудесных решения! Скоро прогоню на реальной бд, но вроде должно всё сработать А потом буду сидеть разбираться-учиться. Ещё раз спасибо!
Проверил на реальной задаче - работает!!! Единственно, что приходится через попу делать - это предварительно убирать ударения в тексте объявлений (там греческий язык), т.к. иначе не получается. У них символы под ударением выписаны отдельно от остальных в кодовой таблице Всем спасибо ещё раз Ещё буду сидеть разбираться с механизмом действия макроса и формул. Подскажете, если попаду в непонятный тупик?
Проверил на реальной задаче - работает!!! Единственно, что приходится через попу делать - это предварительно убирать ударения в тексте объявлений (там греческий язык), т.к. иначе не получается. У них символы под ударением выписаны отдельно от остальных в кодовой таблице Всем спасибо ещё раз Ещё буду сидеть разбираться с механизмом действия макроса и формул. Подскажете, если попаду в непонятный тупик?Pran
Можно посмотреть примеры этого греческого - что там мешает сравнивать? Лучше в файле, и может быть скриншот небольшой тоже, если у нас может что-либо не отобразиться правильно.
Можно посмотреть примеры этого греческого - что там мешает сравнивать? Лучше в файле, и может быть скриншот небольшой тоже, если у нас может что-либо не отобразиться правильно.Hugo
Этих ударных гласных там мало, всего 10, я их уже прогнал в ворде (а можно было и прямо в экселе) с заменой на безударные - невелика морока Так что всё работает, за исключением одной фигни, но это уже похоже нерешаемо... Суть вот в чём: если в тексте объявления одновременно указан язык и другое слово из нашего списка, которое распознаётся как второй язык, то результат = "Разные"
Вот какие монстрики встречаются: Профессор английского языка греческо-австралийского гражданства преподаёт английский язык детям... или Французский преподаётся выпускницей греческо-французской школы "Урсула"...
Неминуемо засекаются ключи "англ" и "греч" ("франц" и "греч" во втором случае), и результат получается предсказуемый
Частично можно облегчить решение задачи, если прогнать в отдельной таблице такие спорные случаи, собирая в соседний столбец текстовую конструкцию вида:
Разные: ключ1, ключ2, ...
Несколько таких случаев положил в табличку, которую и выкладываю Отобразиться должно всё нормально
Этих ударных гласных там мало, всего 10, я их уже прогнал в ворде (а можно было и прямо в экселе) с заменой на безударные - невелика морока Так что всё работает, за исключением одной фигни, но это уже похоже нерешаемо... Суть вот в чём: если в тексте объявления одновременно указан язык и другое слово из нашего списка, которое распознаётся как второй язык, то результат = "Разные"
Вот какие монстрики встречаются: Профессор английского языка греческо-австралийского гражданства преподаёт английский язык детям... или Французский преподаётся выпускницей греческо-французской школы "Урсула"...
Неминуемо засекаются ключи "англ" и "греч" ("франц" и "греч" во втором случае), и результат получается предсказуемый
Частично можно облегчить решение задачи, если прогнать в отдельной таблице такие спорные случаи, собирая в соседний столбец текстовую конструкцию вида:
Разные: ключ1, ключ2, ...
Несколько таких случаев положил в табличку, которую и выкладываю Отобразиться должно всё нормально
Забавно получилось! Конечно, применимо только к русскому языку И то падежи могут так вывернуть наизнанку товарищи объявлениядающие , что мало не покажется! И каюсь, вовсе не понял - зачем в формуле вот этот кусочек: LOOKUP("яяя" ?
Забавно получилось! Конечно, применимо только к русскому языку И то падежи могут так вывернуть наизнанку товарищи объявлениядающие , что мало не покажется! И каюсь, вовсе не понял - зачем в формуле вот этот кусочек: LOOKUP("яяя" ?Pran
Ну раз непонятен только этот кусочек - отвечу: Эта часть отвечает за возврат из массива последнего текстового значения.
Quote (Pran)
И то падежи могут так вывернуть наизнанку товарищи объявлениядающие , что мало не покажется!
Тем не менее обрабатываются предложенные ранее монстрики...
Quote (Pran)
Вот какие монстрики встречаются: Профессор английского языка греческо-австралийского гражданства преподаёт английский язык детям... или Французский преподаётся выпускницей греческо-французской школы "Урсула"
Ну раз непонятен только этот кусочек - отвечу: Эта часть отвечает за возврат из массива последнего текстового значения.
Quote (Pran)
И то падежи могут так вывернуть наизнанку товарищи объявлениядающие , что мало не покажется!
Тем не менее обрабатываются предложенные ранее монстрики...
Quote (Pran)
Вот какие монстрики встречаются: Профессор английского языка греческо-австралийского гражданства преподаёт английский язык детям... или Французский преподаётся выпускницей греческо-французской школы "Урсула"
Спасибо, дошло Непонятного куча, конечно же, поэтому разгребаю формулу по кусочкам Даже не знал про то, что существуют формулы массивов Решение на макросе мне попонятнее выглядит (лет 20 назад программировал, грешен). Думаю теперь, как бы применить эту красоту к греческому
Спасибо, дошло Непонятного куча, конечно же, поэтому разгребаю формулу по кусочкам Даже не знал про то, что существуют формулы массивов Решение на макросе мне попонятнее выглядит (лет 20 назад программировал, грешен). Думаю теперь, как бы применить эту красоту к греческому Pran
Сообщение отредактировал Pran - Суббота, 02.04.2011, 01:27
И даже она соврёт на такой чисто теоретической фразе: Профессор немецкого языка греческо-австралийского гражданства преподаёт английский язык детям... Но тут уже нужно имхо программу искусственного интеллекта писать А макросом вероятно можно по такому алгоритму написать - разбить строку по пробелам в массив, затем каждое слово (элемент массива) проверить на частичное совпадение списку, и если совпало, то проверить его окончание по списку окончаний (именно окончание слова). Но на выше приведённой фразе такой алгоритм тоже соврёт. А как быть например с "Немецко-французские занятия каждое воскресенье"? Тут мой первый макрос и формула Сергея только правильно сработает, т.к. окончания нехарактерные.
Нет, макрос всё же проще было бы написать, чем такую формулу (автор - kim):
И даже она соврёт на такой чисто теоретической фразе: Профессор немецкого языка греческо-австралийского гражданства преподаёт английский язык детям... Но тут уже нужно имхо программу искусственного интеллекта писать А макросом вероятно можно по такому алгоритму написать - разбить строку по пробелам в массив, затем каждое слово (элемент массива) проверить на частичное совпадение списку, и если совпало, то проверить его окончание по списку окончаний (именно окончание слова). Но на выше приведённой фразе такой алгоритм тоже соврёт. А как быть например с "Немецко-французские занятия каждое воскресенье"? Тут мой первый макрос и формула Сергея только правильно сработает, т.к. окончания нехарактерные.Hugo