Докладчик:
Юра Бабуров aka buriy
Описание:
Мы рассмотрим python-библиотеку под названием readability-lxml (https://github.com/buriy/python-readability) , её применение и механизм работы для задачи извлечения текстов новостных страниц.
Slides from seminar devoted to improve proficiency of web designers, developers, QAs in the area of building seo-frienldy websites. The seminar took place at Zfort Group's office in Kharkov, Ukraine.
Slides from seminar devoted to improve proficiency of web designers, developers, QAs in the area of building seo-frienldy websites. The seminar took place at Zfort Group's office in Kharkov, Ukraine.
NoSQL - что это? Новомодное словечко или современных подход, который позволяет обслуживать сотни миллионов запросов в день без использования супер-компьютеров? Почему все крупнейшие интернет-проекты используют базы данных, которые не поддерживают операций по связыванию данных, не гарантируют ACID при проведении транзакций и не имеют фиксированных схем хранения данных? В данном докладе будут проанализированы области применения NoSQL, раскрыты основные принципы, которые используются для хранения записей в неряционных БД, а также приведены характеристики по которым можно классифицировать сотни существующих на данный момент NoSQL базы данных.
Open source субд глазами обычного программистаSlach
Попытался "быстренько" пробежаться по всем СУБД с которыми работал за 20 лет и постараться вложить слушателям мысль что СУБД надо выбирать под нагрузку
и что для СУБД надо знать "алгоритмы" и "эксплуатацию"
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...Ontico
Когда в зоне ответственности находятся несколько "похожих" по реализации и/или функционалу технических решений (сайтов, систем, проектов), волей-неволей возникает желание их унифицировать. Плюсы от такого подхода очевидны: это и экономия ресурсов разработки/тестирования/администрирования, и удобство поддержки, и полноценное общее владение кодом для всей команды разработки. Очевидно, что подобная реформа потребует значительных ресурсов и времени, но мы верим, что это "один раз", и принимаемся отстраивать сложную архитектурную конструкцию, призванную удовлетворить требования всех "объединяемых" продуктов.
Если эти продукты не подвержены изменениям, то рано или поздно все закончится хорошо, и у нас получится чудо-фреймворк. Но обычно все совсем не так. Пока мы прорабатываем классы и строим безупречные схемы взаимосвязей, мир меняется: меняются требования к продукту, новые вызовы рынка и видение менеджмента влекут за собой постоянные изменения функционала. То что было сделано вчера уже не соответствует тому, что хотят сегодня.
Это похоже на возведение песочного замка у самой кромки прибоя. В результате трудный путь превращается в изнуряющее топтание на месте, а имеющееся техническое наследие потихоньку ветшает, разрастается казуальным кодом и забирает все больше сил на поддержку.
Но проблема даже не в этом. Основная проблема в том, что мы видим причину неудач в ошибках проектирования или в несговорчивости менеджмента, не желающего пойти на уступки относительно реализации того или иного функционала. Все проще: я убежден, что ошибка была допущена при выборе пути! Но я не призываю смириться и "тащить" на себе кучу сто раз продублированного кода. Истина, как всегда, где-то посередине.
Мы не будем больше собирать все проекты в один кластер, мы попробуем построить конгломерат!
* оценим перспективы унификации и рассмотрим альтернативы;
* рассмотрим типовые препятствия, и откуда они берутся;
* поговорим о сути изменений, и какие они бывают;
* познакомимся с реальностью на основе моего личного опыта;
* обсудим, что есть "похожесть" проектов и что с этим делать.
Юрий Буянов | (Одноклассники)Нюансы разработки мобильного мессенджера RIF-Technology
1. Зачем Одноклассникам мессенджер
2. Неочевидные требования
- Устойчивая работа в ненадёжных сетях и на слабых устройствах
- Полная совместимость с существующим сервисом сообщений в Одноклассниках
3. Общая концепция проекта
- Целевая аудитория
- Платформы
- Скоуп (что точно должно было войти, и что осталось за бортом)
4. Сетевое взаимодействие
- Протокол (общее описание и обоснование, почему сделали именно так)
- Особенности API
4. Архитектура iOS-клиента
- Адаптации под изменчивость требований
- MVVM
- Навигация
- Service Layer
- Dependency Injection
- Кеширование, офлайн-режим, YapDatabase
- Оптимизации и хаки
5. Статистика и аналитика
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
Лекция Александра Смирнова в Школе вебмастеров: «Основные принципы индексирования сайта».
https://academy.yandex.ru/events/webmasters_school/yawebm2015/
Как поиск находит страницу, её путь до появления в поиске
Поисковые системы постоянно собирают информацию о страницах в интернете. Как же это происходит и как добавить страницы своего сайта в поиск? Проверка индексирования сайта.
Как управлять роботом (зеркала, sitemap, robots.txt)
Множество сайтов в интернете доступны сразу по нескольким адресам. Как указать поисковому роботу на основной и как скорректировать индексирование?
Особенности индексирования
Современные сайты используют различные технологии в своей работе. Рассмотрим, как настроить их правильно и сделать контент доступным для робота.
Как улучшить индексирование (дубли, HTTP-ответ, удаление из поиска)
В поиск попадают различные страницы, которые известны роботу. Какие нужны, а какие нет? Как повлиять на их индексирование?
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...Ontico
Проблема мониторинга целостности технологических процессов на индустриальных объектах связана с обработкой большого объема показаний различных датчиков (температура, давление, управляющие сигналы и т.д.). Каждый из таких сенсоров порождает временной ряд, который может быть использован как для потоковой обработки, так и для проведения исторического анализа и расследования инцидентов. Здесь возникает задача хранения показаний за некоторый период времени. При этом потоки данных могут достигать десятков тысяч показаний в секунду, а период хранения достигать нескольких месяцев или даже лет. При таких условиях необходимо предельно аккуратно выбирать СУБД для хранения временных рядов, которая правильно впишется в нефункциональные требования.
В качестве конкурсантов выступят: OpenTSDB, InfluxDB, MongoDB, PostgreSQL и еще несколько "чёрных лошадок".
В докладе будет рассмотрен многокритериальный подход к выбору с учетом таких показателей как:
* зависимость пропускной способности на запись от различных параметров;
* время исполнения запроса на чтение;
* степень сжатия данных;
* пропускная способность при нагрузочном тестировании.
В докладе предлагается не только привести получившиеся числа, но и обсудить почему они получились именно такими.
Презентация с технической секции #BitByte - фестиваля профессионального развития, который прошел 19 мая в Санкт-Петербурге.
Дмитрий Смирнов, Ведущий разработчик компании «Фотострана»: «30 млн. пользователей - как правильно строить архитектуру?»
Веб-приложения бывают разные: от сайтов-визиток небольших компаний или персональных блогов, до известных социальных сетей и популярных интернет-магазинов, обслуживающих миллионы пользователей по всему миру. Как устроены сложные веб-приложения «под капотом», за счет чего они выдерживают высокие нагрузки и как строится взаимодействие пользователя с такими нетривиальными веб-приложениеми, мы рассмотрим в докладе.
Докладчик:
Александр Сапронов
Описание:
Мы вместе пройдем по популярным задачам — от парсинга сайтов до научных вычислений и рассмотрим мощь языка Python
Докладчик:
Александр Сапронов
Описание:
Мы рассмотрим популярные библиотеки для функционального программирования на Python — fn.py, functools, itertools, funcy, hask, Toolz. Узнаем возможности каждой из библиотеки, а также как в динамическом язык имитировать мощную систему типов. Затронем характеристики функционального программирования и проверим помогают ли библиотеки выполнить.
NoSQL - что это? Новомодное словечко или современных подход, который позволяет обслуживать сотни миллионов запросов в день без использования супер-компьютеров? Почему все крупнейшие интернет-проекты используют базы данных, которые не поддерживают операций по связыванию данных, не гарантируют ACID при проведении транзакций и не имеют фиксированных схем хранения данных? В данном докладе будут проанализированы области применения NoSQL, раскрыты основные принципы, которые используются для хранения записей в неряционных БД, а также приведены характеристики по которым можно классифицировать сотни существующих на данный момент NoSQL базы данных.
Open source субд глазами обычного программистаSlach
Попытался "быстренько" пробежаться по всем СУБД с которыми работал за 20 лет и постараться вложить слушателям мысль что СУБД надо выбирать под нагрузку
и что для СУБД надо знать "алгоритмы" и "эксплуатацию"
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...Ontico
Когда в зоне ответственности находятся несколько "похожих" по реализации и/или функционалу технических решений (сайтов, систем, проектов), волей-неволей возникает желание их унифицировать. Плюсы от такого подхода очевидны: это и экономия ресурсов разработки/тестирования/администрирования, и удобство поддержки, и полноценное общее владение кодом для всей команды разработки. Очевидно, что подобная реформа потребует значительных ресурсов и времени, но мы верим, что это "один раз", и принимаемся отстраивать сложную архитектурную конструкцию, призванную удовлетворить требования всех "объединяемых" продуктов.
Если эти продукты не подвержены изменениям, то рано или поздно все закончится хорошо, и у нас получится чудо-фреймворк. Но обычно все совсем не так. Пока мы прорабатываем классы и строим безупречные схемы взаимосвязей, мир меняется: меняются требования к продукту, новые вызовы рынка и видение менеджмента влекут за собой постоянные изменения функционала. То что было сделано вчера уже не соответствует тому, что хотят сегодня.
Это похоже на возведение песочного замка у самой кромки прибоя. В результате трудный путь превращается в изнуряющее топтание на месте, а имеющееся техническое наследие потихоньку ветшает, разрастается казуальным кодом и забирает все больше сил на поддержку.
Но проблема даже не в этом. Основная проблема в том, что мы видим причину неудач в ошибках проектирования или в несговорчивости менеджмента, не желающего пойти на уступки относительно реализации того или иного функционала. Все проще: я убежден, что ошибка была допущена при выборе пути! Но я не призываю смириться и "тащить" на себе кучу сто раз продублированного кода. Истина, как всегда, где-то посередине.
Мы не будем больше собирать все проекты в один кластер, мы попробуем построить конгломерат!
* оценим перспективы унификации и рассмотрим альтернативы;
* рассмотрим типовые препятствия, и откуда они берутся;
* поговорим о сути изменений, и какие они бывают;
* познакомимся с реальностью на основе моего личного опыта;
* обсудим, что есть "похожесть" проектов и что с этим делать.
Юрий Буянов | (Одноклассники)Нюансы разработки мобильного мессенджера RIF-Technology
1. Зачем Одноклассникам мессенджер
2. Неочевидные требования
- Устойчивая работа в ненадёжных сетях и на слабых устройствах
- Полная совместимость с существующим сервисом сообщений в Одноклассниках
3. Общая концепция проекта
- Целевая аудитория
- Платформы
- Скоуп (что точно должно было войти, и что осталось за бортом)
4. Сетевое взаимодействие
- Протокол (общее описание и обоснование, почему сделали именно так)
- Особенности API
4. Архитектура iOS-клиента
- Адаптации под изменчивость требований
- MVVM
- Навигация
- Service Layer
- Dependency Injection
- Кеширование, офлайн-режим, YapDatabase
- Оптимизации и хаки
5. Статистика и аналитика
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
Лекция Александра Смирнова в Школе вебмастеров: «Основные принципы индексирования сайта».
https://academy.yandex.ru/events/webmasters_school/yawebm2015/
Как поиск находит страницу, её путь до появления в поиске
Поисковые системы постоянно собирают информацию о страницах в интернете. Как же это происходит и как добавить страницы своего сайта в поиск? Проверка индексирования сайта.
Как управлять роботом (зеркала, sitemap, robots.txt)
Множество сайтов в интернете доступны сразу по нескольким адресам. Как указать поисковому роботу на основной и как скорректировать индексирование?
Особенности индексирования
Современные сайты используют различные технологии в своей работе. Рассмотрим, как настроить их правильно и сделать контент доступным для робота.
Как улучшить индексирование (дубли, HTTP-ответ, удаление из поиска)
В поиск попадают различные страницы, которые известны роботу. Какие нужны, а какие нет? Как повлиять на их индексирование?
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...Ontico
Проблема мониторинга целостности технологических процессов на индустриальных объектах связана с обработкой большого объема показаний различных датчиков (температура, давление, управляющие сигналы и т.д.). Каждый из таких сенсоров порождает временной ряд, который может быть использован как для потоковой обработки, так и для проведения исторического анализа и расследования инцидентов. Здесь возникает задача хранения показаний за некоторый период времени. При этом потоки данных могут достигать десятков тысяч показаний в секунду, а период хранения достигать нескольких месяцев или даже лет. При таких условиях необходимо предельно аккуратно выбирать СУБД для хранения временных рядов, которая правильно впишется в нефункциональные требования.
В качестве конкурсантов выступят: OpenTSDB, InfluxDB, MongoDB, PostgreSQL и еще несколько "чёрных лошадок".
В докладе будет рассмотрен многокритериальный подход к выбору с учетом таких показателей как:
* зависимость пропускной способности на запись от различных параметров;
* время исполнения запроса на чтение;
* степень сжатия данных;
* пропускная способность при нагрузочном тестировании.
В докладе предлагается не только привести получившиеся числа, но и обсудить почему они получились именно такими.
Презентация с технической секции #BitByte - фестиваля профессионального развития, который прошел 19 мая в Санкт-Петербурге.
Дмитрий Смирнов, Ведущий разработчик компании «Фотострана»: «30 млн. пользователей - как правильно строить архитектуру?»
Веб-приложения бывают разные: от сайтов-визиток небольших компаний или персональных блогов, до известных социальных сетей и популярных интернет-магазинов, обслуживающих миллионы пользователей по всему миру. Как устроены сложные веб-приложения «под капотом», за счет чего они выдерживают высокие нагрузки и как строится взаимодействие пользователя с такими нетривиальными веб-приложениеми, мы рассмотрим в докладе.
Докладчик:
Александр Сапронов
Описание:
Мы вместе пройдем по популярным задачам — от парсинга сайтов до научных вычислений и рассмотрим мощь языка Python
Докладчик:
Александр Сапронов
Описание:
Мы рассмотрим популярные библиотеки для функционального программирования на Python — fn.py, functools, itertools, funcy, hask, Toolz. Узнаем возможности каждой из библиотеки, а также как в динамическом язык имитировать мощную систему типов. Затронем характеристики функционального программирования и проверим помогают ли библиотеки выполнить.
Commit ускоривший python 2.7.11 на 30% и новое в python 3.5PyNSK
Автор доклада: Александр Сапронов.
Обзорный мини-доклад. В докладе вы найдете причину релиза 2.7.11 и новинки Python 3.5
Доклад сделан на 2 встрече сообщества PyNSK
This document discusses various Python interfaces and design patterns including duck typing, abstract base classes (ABC), collections.abc, inheritance, and the Zope interface system. Duck typing allows objects to be used if they have the required attributes and methods without needing to inherit from a base class. ABCs allow defining abstract methods that must be implemented in subclasses. Collections provide common interfaces for types like mappings, sequences, sets, etc. The Zope interface system uses explicit interfaces that classes can declare they implement.
Докладчик:
Александр Сапронов
Описание:
Язык Python отлично подходит для прототипирования: простой синтаксис, множество батареек, много готовых решений. Это отлично для бизнеса и для разработчика.
Но давайте снимем розовые очки и озвучим негатив, который вас ждет, когда вы возьмете Python для проекта.
Видео:
https://www.youtube.com/watch?v=YE9Q78QlZiE
принципы написания и разметки новостей в интернетOleg Khomenok
Презентация Илоны Фанты из модуля "Правила написания и разметки текстов новостей в сети" Школы Новых медиа Института Развития Региональной Прессы в Киеве, июль 2012 года
Использование тегов и мета-тегов на веб-страницахNetpeak
16 сентября Игорь Митюшев, SEO-специалист агентства интернет-маркетинга Netpeak, провёл бесплатный вебинар на тему «Использование тегов и мета-тегов на веб-страницах».
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyleYandex
Препроцессором сейчас уже никого не удивишь. С их помощью упрощается синтаксис css, добавляются переменные, условия и циклы. Все это хорошо и замечательно, но часто — не достаточно. Препроцессоры не дадут изменить уже существующий css, который вы получаете из внешних источников, не перепишут ссылки на картинки и шрифты при перемещении файлов в новую папку, не отсортируют css-свойства в нужном вам порядке и не удалят из файлов лишние правила. Во всех этих случаях, а также во многих других вам помогут постпроцессоры.
В своем докладе я расскажу, что такое постпроцессоры, какие они бывают и чем отличаются друг от друга. Объясню почему использовать их лучше, чем править css вручную и с помощью регулярных выражений, а также приведу примеры их использования в ежедневной работе.
Последовательная и параллельная загрузка, преимущества и недостатки. Разбираемся с основами сетей. Померим размер js файлов. Посмотрим на паттерны использования. Обратимся к основам программирования и базовым структурам данных. Разберёмся с механизмом пошаговой загрузки изображений. Напишем queue/sliding-buffer, посмотрим на девственно-чистый js/es2015.
Докладчик: Данил Руденко
О докладе:
По некоторым оценкам, больше половины профессий будет автоматизировано – это и есть максимальный объём, на который может быть увеличен рынок алгоритмов машинного обучения, ярчайшем представителем которого являются нейронные сети.
В докладе мы поговорим об общей концепции нейронных сетей, рассмотрим основные Python - фреймворки для машинного обучения, а также реализуем решение задачи классификации изображений с применением Keras.
Докладчик: Данил Руденко
О докладе:
У нашего зоопарка опять проблемы, которые необходимо решить максимально технологично!
На первом докладе мы поговорили о сверточных нейронных сетях, в этот раз рассмотрим такие виды нейронных сетей как автоэнкодеры и GAN’ы( генеративные состязательные сети). Также углубимся немного в Keras, напишем кастомный загрузчик данных и немного посмотрим на Jupyter Notebook.
Видео: https://youtu.be/tu-ee_4uAGY
Asyncio для процессинга распределенной базы данныхPyNSK
Докладчик: Никита Семенов
О докладе:
Появление asyncio стало новой вехой в истории питона. По-настоящему удобный и эффективный способ запускать асинхронный код.
В своем докладе я познакомлю слушателя с базовым синтаксисом, парадигмами и примитивами, чтобы можно было начать использовать всю мощь asyncio уже сегодня.
Для этого я возьму децентрализованные базы данных с web-интерфейсом, раскиданные по нескольким серверам, и покажу как их можно эффективно запроцесить только при помощи стандартных методов питона 3.4+ и aiohttp.
Видео: https://youtu.be/rpiHVA6vRTY
Докладчик: Станислав Каблуков
О докладе:
Расскажу о своём опыте использования Python для разработки игр. В каких игровых движках и программах для моделирования используется Python.
Как и почему стоит использовать python для создания игр, и в каких случаях лучше отказаться от данной идеи. О плюсах и минусах использования Python.
В докладе будет про: python, blender, Ren'py, KivEnt, Boo, UE4 и д.р.
Видео: https://youtu.be/2RrZx_J5twU
Python инструменты для нагрузочного тестированияPyNSK
В докладе я расскажу об использовании yandex.tank с BFG и locustio для нагрузочного тестирования.
Докладчик: Иван Гребенщиков
Видео: https://youtu.be/-kWm5V9pyCY
Python, Django и корпоративные информационные системыPyNSK
Софт для автоматизации бизнеса составляет значительную часть всего существующего на планете программного обеспечения. Рассмотрим требования к нему и особенности его разработки. Оценим, насколько Python для этого подходит, и облегчают ли фреймворки жизнь в кровавом энтерпрайзе.
Докладчик: Анатолий Щербаков
Видео: https://youtu.be/G_ks3sO1Mbs
Как показать релевантный текст для пользователя? Собрать данные, написать разные тексты, а потом написать кучу IF'ов?
В докладе я расскажу, как мы, в Welltory, делаем настройку контента под пользователя.
Поведаю о том, как content writer'ы могут писать 100 вариантов текстов на одно событие в системе.
И конечно, расскажу с чего начать вам.
Докладчик: Александр Сапронов
Видео: https://youtu.be/sG6kUxq6gDY
В докладе я расскажу об устройстве одноплатного компьютера и его периферии на примере raspbery pi.
Установку на него дистрибутива операционной системы, python 3 и управление с помощью него периферией (i2c spi uart и отдельными pin). А ещё я это покажу в живую
Докладчик: Иван Бакланов
Видео: https://www.youtube.com/watch?v=1WiIMeWHMY8
В докладе мы рассмотрим создание переносимого дистрибутива Python для любых нужд и операционных систем (Windows & Linux). Познакомимся с существующими и альтернативными решениями. Сравним их достоинства и недостатки.
Докладчик: Григорий Кареев (Odin)
Видео: https://www.youtube.com/watch?v=fvBJG_IKvaQ
Рассмотрю с практической стороны создание своего предметно-ориентированного языка. Продемонстрирую почти готовое решение возникшей задачи и расскажу, в каких случаях может потребоваться внедрение DSL.
Докладчик: Михаил Воротынцев (AgoraDoxa)
Видео: https://www.youtube.com/watch?v=Qf0TjcBG1oI
Как Python Дайджест работает с внешней статикойPyNSK
Докладчик:
Александр Сапронов
Описание:
В мини-докладе я рассмотрю простой велосипед (django-remdow), который позволяет в автоматическом режиме скачивать внешнюю статику. А также приведу простые инструменты для автоматической оптимизации вашего сайта.
Применение behave+webdriver для тестирования Web-проектовPyNSK
Докладчик:
Иван Гребенщиков
Описание:
Современные веб-проекты представляют из себя совсем не набор статических страниц, что повышает сложность их функционального тестирования.
В докладе будет рассмотрена связка инструментов behave+webdriver, способе их применения, возможные проблемы и пути их решения.
Докладчик:
Игорь Стариков
Описание:
Не секрет, что Питон, благодаря своим свойствам, имеет широчайшую область применения. Не являются исключением и мультимедийные (в том числе игровые) приложения.
В ходе этого выступления:
1. вы узнаете о некоторых средствах и принципах их построения, а также о том, как упомянутые средства могут использовать функции внешних библиотек, написанных на других языках программирования;
2. а я получу, наконец, достижение из одной известной игры, не запуская её.
Докладчик:
Александр Кацко
Описание:
Как только речь заходит про создание API, особенно для веб или мобильных приложений, то многие, не задумываясь, выбирают принцип REST. Но всегда ли это правильный выбор?
В докладе рассмотрим случаи, для которых хорошо подходит JSON-RPC, посмотрим примеры реализации на Django.
Докладчик:
Антон Голов
Описание:
Поговорим о некоторых функциях для интеграции TestRail c внешними системами и автоматизации деятельности QA. Будет немного про Google Docs, и некоторый набор методов работы с Testrail, рассмотрим возможности работы с системами автоматизированного тестирования.
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"PyNSK
Докладчик:
Александр Маршалов (ЦФТ)
Описание: Мы узнаем, что из себя представляет дерево синтаксического разбора (AST / Abstract Syntax Tree) в языке Python
и какие магические возможности можно получить с помощью модификации AST.
Докладчик:
Богомолов Иван
Описание:
Краткий обзор разных вариантов использования gDrive API, так же вы узнаете как получить доступ к gDrive API, конечно же с примерами подключения, авторизации и выполнения различных запросов на питоне.
Получаем текст веб-страниц из Python и как это работает
1. Юрий Бабуров (buriy)
Webdev, AI, HighLoad
Получаем текст веб-страниц из Python и как
это работает, или применение эвристик для
решения сложных задач
(На примере библиотеки readability-lxml)
2. План действий
Формулируем задачу
Из чего состоят новостные веб-страницы?
Придумываем алгоритм сами
Обобщим наш опыт
Пара историй для размышления
Рассматриваем альтернативные идеи
3. Зачем нужны новостные статьи
Сайты-агрегаторы новостей
Сниппеты новостей
Текстовые корпуса для лингвистов
Анализ потока новостной информации
Reading list в Safari
Поговорим не только про конкретную задачу,
но и про используемые технологии, обобщив
наш опыт
4. Формулируем задачу
Задачу можно формулировать и решать по-
разному, мы рассмотрим лишь одно из
возможных решений.
Сайтов нужно обработать много, статей –
ещё больше.
− Поэтому алгоритм должен работать быстро
− Но, по возможности, качественно
− У нас не так много времени на разработку
− Но надо иметь возможность настройки для
важных сайтов
− Мы можем ограничиться HTML-версиями
5. Получаем результат
$ sudo pip install readability-lxml
$ python -m readability.readability -b -u
http://lenta.ru/news/2015/08/26/nishtiak_the_cat/
конечно, то же самое можно сделать и из
программы на python, пример будет позднее
6. Как это может работать для
самых разных сайтов?
Даю 15 секунд на размышления
(только молча)
7. Из чего, из чего сделаны
новостные статьи...
Хорошая новостная
статья
8. Из чего, из чего сделаны
новостные статьи...
Хорошая новостная
статья:
Категория
Дата и время
Заголовок
Иллюстрация
Текст
9. Из чего, из чего сделаны
новостные статьи...
Что нас интересует в
первую очередь:
Заголовок
Иллюстрация
Текст
10. Из чего, из чего сделаны
новостные статьи...
Плохая новостная
статья:
11. Из чего, из чего сделаны
новостные статьи...
Плохая новостная
статья:
Социальные иконки
Вставки
Текстовая и
графическая
реклама
12. Из чего, из чего сделаны
новостные статьи...
Всё, кроме статьи:
13. Из чего, из чего сделаны
новостные статьи...
Всё, кроме статьи:
Подзаголовки
Блоки ссылок
Рекламные блоки
15. Как искать текст статьи
Чего хотим:
− Текст!
− Много текста рядом!
Не хотим:
− Ссылочных блоков
− Блоков с картинками
− Подзаголовков
− Маленьких картинок
Текст: Длинные законченные предложения
Заголовки: Короткие предложения без точки в конце
Мы нашли набор критериев, как отличить текст от всего остального.
16. Наше кольцо всевластья: основы
Получаем “веса”, оценивая “текстовость”
каждого блока на странице, штрафуя за
высокий процент текста ссылок и мелкие
иллюстрации.
Используем древовидность HTML: узлам-
родителям даём бонус за хороших
“детей” и “внуков” (50% от веса).
Удаляем нетекстовые блоки (с весом
меньше нуля)
Находим блок текста с наибольшим
весом – часто это наибольший блок
Надеемся на адекватность авторов веб-
странички!
<BODY>
− <DIV>
В Новосибирске
выбрали кота...
Помимо
торжественной
прогулки...
Блок с иконками
− <DIV>
ПОСЛЕДНИЕ
НОВОСТИ
Много ссылок
17. Увы, не всё так просто
Некоторые комментарии бывают
длиннее и лучше, чем текст статьи
Настоящим жадинам нужно
несколько страниц для одной новости
21. Как искать иллюстрации
Положительные факторы:
Одна или несколько иллюстраций
Большого размера
Располагаются посреди текста или рядом
Отрицательные факторы:
Много иллюстраций
Маленького размера
Находятся далеко от текстовых блоков
22. Обобщение – мать учения
Использованный приём называется
“эвристика” или “эвристический алгоритм”
(heuristic)
В библиотеке readability-lxml используется
порядка 50 эвристик.
Эвристика позволяет дать достаточно
хорошое решение в большинстве случаев,
но ошибается временами
Позволяет хоть как-то решать задачи, с
которыми не справиться другими методами
Или сократить скорость работы других
23. Примеры эвристик и других
вероятностных методов
Определить формат файла в большинстве
случаев можно по первым байтам
“Email – любая строка, содержащая @ и
точку после знака @”
“Email – строка, удовлетворяющая этому
длинному регулярному выражению”.
Выделение наиболее информативных
предложений из текста (text summarization)
Примеры: Шагомер, Kinect, поиск лиц на
24. Другие идеи
для задачи поиска текста
Использовать информацию из class=”...” и id=”...”, а также
название тега для улучшения критерия хороших и плохих тегов в
HTML
Использовать CSS-стили, например display:none
Загружать страницу в браузер:
− ждать выполнения Javascript
− определять и использовать координаты текстовых блоков
(текст статьи обычно выше комментариев, посторонние блоки
узкие и находятся сбоку)
При поиске заголовка использовать URL (nishtiak_the_cat/).
25. Дополнительные эвристики для
readability-lxml
Проблема: получили длинный комментарий
вместо короткого текста статьи
Предлагаемая эвристика: Использовать
страницу со списком статей или RSS-фид,
получить оттуда текст начала статьи или
описание, и сравнивать его с текстовыми
блоками (аналогия с заголовком)
Ещё одна эвристика. Если есть много статей
с одного источника:
− Можно классифицировать статьи по качеству:
например, полученные одинаковые статьи по
26. Жизненный цикл эвристики
Помните, кому-то придётся поддерживать ваш код, поэтому
обязательно комментируйте эвристики.
Выбор способа за вами, скажем
#Hack: … , docstring, ссылка на сайт-источник регулярного
выражения или ссылка на баг, из-за которого эвристика
появилась в вашем коде.
27. Определение похожести двух
текстов
def calc_quality(feed_text, article_text):
"""
Returns a number between 0 and 100
"""
feed_words = set(feed_text.split())
article_words = set(article_text.split())
if not article_words: return 20
intersection = len(article_words & feed_words)
return int(10 * min(10, max(5 + intersection - 0.6 * len(feed_words),
0)))
-------------------------------------------------------
from readability.readability import Document
import urllib
html = urllib.urlopen(url).read()
readable_article = Document(html).summary()
readable_title = Document(html).short_title()
28. Сортируем тексты по похожести
class MyDocument(Document):
def select_best_candidate(self, candidates):
if not candidates: return None
feed_text = html2text(self.article.feed_snippet)
if not feed_text:
feed_text = self.article.title
sorted_candidates = sorted(candidates.values(), reverse=True,
key=lambda x: x['content_score'])
for candidate in sorted_candidates[:50]:
elem_text = html2text(tounicode(candidate['elem']))
quality = calc_quality(feed_text, elem_text)
if quality > 50:
candidate['content_score'] += 10
elif quality > 0:
candidate['content_score'] += 1
sorted_candidates = sorted(candidates.values(), reverse=True,
key=lambda x: x['content_score'])
return sorted_candidates[0]