Pull to refresh

Фильтрация текстов по списку регулярных выражений

Reading time4 min
Views3.9K
В сборнике скриптов для сайта HabrAjax 0.79 появилась возможность сворачивания аннотаций в ленте для указанных читателем авторов и по совпадению указанных строк (можно назвать, сворачивающих строк). Например, если читатель хочет выделить произведения некоторого автора, показывая только название статьи в любой ленте (главная, избранное, поиск), он вносит имя автора в специальный список и включает настройку сворачивания. Или — сворачивать аннотации, если в названии или в тексте аннотации встречается некоторая последовательность символов (не слов, а символов). Второй фильтр работает на регулярных выражениях, поэтому читатель фактически задаёт не строки, разделённые запятыми, а тела регулярных выражений, с игнорированием размера букв, но с учётом всех символов и пробелов.

На этом факте можно построить фильтры, учитывающие склонения слов. Например, если есть желание сворачивать анонсы с использованием слов из группы «мотивация» (для примера), нужно написать такую строку фильтра: «мотивац, мотивир» (без пробела) или дополнить её похожими по смыслу корнями. Фильтр будет искать в каждом тексте аннотации регулярные выражения /мотивац/im, /мотивир/im (спецификаторы «im» означают: «искать с игнорированием регистра, по всем строкам». Если найдено, то в подписи добавляется тело регулярного выражения (все найденные), поэтому читатель будет знать, по какой причине аннотация свёрнута.

Все сворачивания происодят до размера заголовка. Содержание и теги свёрнуты, заголовок и подпись видны. Полный список настроек сворачивания (всё отключаемо):
1. Искать по авторам из списка авторов.
2. Искать по строкам — регулярным выражениям — в текстах аннотаций и в их заголовках (игнорирование регистра букв).
3. Поиск по названиям блогов, считая их началом аннотации (Использовать символ "^" в начале).
4. Сворачивать блоги компаний.
5. Сворачивать подкасты (включает в себя несколько блогов).
6. Режим неполного сворачивания «Принудительный кат» — сворачивает содержание до высоты 240 пикс и делает ряд других уплотняющих действий.

Пример установки настройки по строкам:

Пример результата указанного фильтра (видно, что найдены слова «Шон» и «Джунио», существующие в фильтре):

Ограничения:

Разумеется, при написании нужно учитывать особые симолы выражений и экранировать их обратной наклонной. Особо следует обращать внимание на точки (писать как "\."), потому что в рег.выражениях они означают «любой символ». И не использовать запятые, потому что они у нас — разделители списка. Полный набор специальных символов: " * /. + $ ^? \ ( ) [ ] { } ". Подробнее о рег.выражениях здесь.

В списке авторов регулярные выражения не используются, регистр учитывается, крайние пробелы игнорируются.

Сейчас существует подобный фильтр HabraTopicFilter, от crea7or, который не имеет поиска по строкам, но сворачивает аннотации по авторам. Кроме того, он работает по названиям блогов (свернуть блоги с указанными названиями и по компаниям вообще (отдельная настройка). Нет возможности просмотра и текстового редактирования списков. Нетрудно было бы написать в HabrAjax третью настройку — сворачивать по названиям блогов. Но, чтобы не плодить число настроек, придумано другое решение — присоединить название блога к началу текста аннотации (поэтому можно искать по "^название_блога"). В скрипте HabrAjax существуют также 2 специальные настройки фильтров — по блогам компаний вообще и по подкастам.

На сайте есть режим просмотра ленты вообще без статей компаний («Тематические»). Но выгодное отличие настройки «Сворачивать блоги компаний» — в том, что она оставляет названия компаний и статей ( в общей ленте) и полный просмотр по клику на названии. Если нужно сворачивание нескольких конкретных компаний — фильтрующую строку по названию компании надо начинать с символа "^". Например, "^Персональные блоги".

Принудительный кат


Наконец, в настройках HabrAjax есть режим неполного сворачивания, так называемый «Принудительный кат». Он решает несколько другие смежные задачи и тоже ограничивает видимое количество информации в ленте.

Полный список стратегий и правил «Принудительного ката»:
1. Ограничивает максимальную высоту аннотации (244 пикселя для стилей ZenComment и 344 для классики).
2. Уменьшает размеры картинок (максимум 240 на 120 или 340 на 170).
3. Заменяет видеоролики уменьшенными ссылками с картинками.
4. Перемещает низко расположенные картинки наверх, чтобы выполнить обтекание текста, отмечая начальные места картинок.
5. Убирает вертикальные пробелы, заменяя маленькими серыми блоками.
6. Уменьшает интерлиньяж на 10%, если это позволяет избежать полосы прокрутки.
7. Решена проблема большого количества тегов, как в примере:

Примеры работы принудительного ката. Классика (уменьшились картинки и видео):
Пример в ZenComment (на другой аннотации: уменьшились картинки, видео, сжаты вертикальные зазоры, картинка 1 перемещена вверх, появилась прокрутка; высота — 244 пикс):
Как выглядит 6-я стратегия? (Стратегия, а не правило — потому что для выполнения каждого пункта может требоваться распределённая во времени последовательность измерений и действий.) Наглядно видна разница по такому скриншоту. Слева — без неё, справа — с применением. Исчезает полоса прокрутки, которая была практически бесполезна и мешала просмотреть последнюю строчку текста. Стоимость — небольшое сжатие текста. Такое практикуется в газетах, когда надо подогнать высоту колонки. Вероятность появления — менее 10%. (Если в коде раскомментировать 'sett-topic2'.wcl, в консоли можно увидеть, к каким топикам применено правило и с какой задержкой.) Исправляет видимость 1-2 последних строчек.


Одна причина применения такого ката — не «светить» странные и развлекательные картинки, бывающие в лентах, на полный экран в офисе в рабочее время. Вид ленты становится более «деловым». Другая — ограничивать тексты авторов, не имеющих чувства меры в размере аннотаций. Числа «120», «240» оптимальны для режима стилей ZenComment и могут быть изменены непосредственно в коде скрипта (переменная strongCutImgMinH). (Нужно ли выносить в настройки — вопрос открытый. Ведь можно случайно изменить и забыть об этом, а потом думать, что это — ошибки скрипта или сайта. Как, впрочем, сейчас бывает с фильтрами по блогам на сайте. При выбранных числах же в принудительный кат попадает относительно небольшая часть аннотаций (5-20%).)

Все эти способы сокращения текстов представляют собой объединение ряда правил обработки и могут быть разобраны в тексте скрипта, поиском по словам «if(h.settings.strongCut.val)» и «h.settings.noAuthor.val».
Tags:
Hubs:
Total votes 10: ↑6 and ↓4+2
Comments0

Articles