Результаты конкурса МИНОА «Сделай это лучше»: Очистка текста от html-тегов, и задание раунда III
Сегодня мы подводим итоги II конкурса МИНОА «Сделай это лучше», выполняя необычную работу, предложенную 15 мая 2017 нашим читателям: «Найдите самый быстрый способ избавиться от всех html-тегов сразу во множестве html-документов».
В этот раз мы получили много совсем бессмысленных и малоосмысленных ответов, в большей части которых прослеживался рефрен: «Какова практическая ценность данной процедуры?»
Вопрос, на наш взгляд, звучит риторически.
В алгоритме МИНОА подготовка собранных материалов, которые в дальнейшем подлежат обработке (т.е. изучению), должна проводиться с максимально возможной эффективностью, поскольку неоптимизированный («сырой») массив исходных данных легко может привести к таким задержкам на этапе «обработки», что сорвёт все сроки, отпущенные на выполнение проекта.
С другой стороны, при составлении личного информационного архива следует всегда стремиться к унификации форматов, и многие пользователи предпочитают именно Plain ASCII Text — простой текст, который лучше всего поддаётся индексированию и быстрее всего применим потом в исследовательской работе.
Наконец, есть и ещё одна причина, по которой мы бы хотели вмешаться в html-код и провести его чистку. В 99 случаев из 100 при копировании материалов из современного веба вы заносите на свой жёсткий диск множество скриптов, рекламных движков и скрытых маркеров, которыми в изобилии кишат современные веб-страницы. Оно вам надо?
Короче говоря, разговор о практичности задания II конкурса предлагаем оставить за рамками обсуждения и сосредоточиться на ответе. Проиллюстрируем его на живом примере.
Так выглядит код HTML одной из статей Сергея Голубицкого, размещённых на портале Флибуста.
Предположим, мы хотим избавиться от всего этого тегового мусора, а заодно убить все скрипты и шапку <HEAD> с её метатегами и стилями.
Самый быстрый способ добиться желаемого — использовать Regular Expressions, регулярные выражения, которые давным-давно задействованы едва ли не во всех языках программирования (Perl, PHP, Java, Python, Ruby, MySQL, VB.NET, C# и т.д.).
Разумеется, мы не призываем нормальных людей насиловать себя командной строкой, а лишь указываем на место, из которого растут ноги нужной нам технологии.
Всё, что вам потребуется, это любой текстовый редактор с поддержкой grep в запросах. Изначально grep был отдельной *nix утилитой для поиска из командной строки текстовой информации с помощью регулярных выражений. Сегодня существуют десятки, если не сотни простых редакторов и под Windows, и под Mac OS, в которые функционал grep встроен в модуль поиска.
Мы предпочитаем использовать программу BBEdit (на Mac OS).
Отправляемся в меню Search-Find (Ctrl+F) и в окне Find вписываем короткое регулярное выражение </?[^>]*>
Ставим галочку на Grep, чтобы программа поняла, что речь идёт о регулярном выражении, а не о простом тексте, кликаем на Replace All («заменить всё»), и в следующую секунду перед нами девственно чистый текст без следа html-кода. Что и требовалось получить.
Навскидку аналогичный функционал под Windows предоставляют не только редакторы вроде PowerGREP (в плане поисковых возможностей он даже на порядок мощнее, чем BBEdit), но и утилиты для группового поиска и замены текста: TextSoap, TextCrawler, TextSpresso, MultiFind и т.д.
Простого, быстрого и эффективного решения этой задачи в этот раз не предложил, к сожалению, никто из читателей, и призы останутся дожидаться своих адресатов.
Задание конкурса «Сделай это лучше» на следующие две недели лишь косвенно связано с алгоритмом МИНОА, но касается обработки текстовой информации, а при этом предельно практично!
Вопрос III конкурса МИНОА «Сделай это лучше»: «Как быстро извлечь все адреса электронной почты из архива переписки или множества документов? Предложите свой вариант и продемонстрируйте его работу на скриншоте».
Ждём ваших ответов до 8 июня 2017 по адресу: entertainment@minoa.biz
Напоминаем, что призом за первое место (самый удобный и быстрый вариант решения, по мнению специалистов МИНОА во главе с Сергеем Голубицким) является учебный курс Методики изыскания, накопления, обработки и анализа информации (8,5 часов видеолекций + онлайн-консультация), а также вручаются поощрительные призы за наиболее оригинальные и творческие предложения.
Всем участникам, так или иначе выполнившим задание, будут высланы скидочные купоны на курс МИНОА!
По итогам двух месяцев мы выбираем несколько наиболее активных участников, которых с удовольствием приглашаем на встречу с Сергеем Голубицким в Москве в июле 2017 (а в случае их физической невозможности присутствовать, встретимся с ними по Скайпу и ответим на любые вопросы по программе МИНОА и творческому опыту Сергея Голубицкого).