Результаты конкурса МИНОА «Сделай это лучше»: Очистка текста от 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 (а в случае их физической невозможности присутствовать, встретимся с ними по Скайпу и ответим на любые вопросы по программе МИНОА и творческому опыту Сергея Голубицкого).