Your SlideShare is downloading. ×
0
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014

892

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
892
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
35
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Извлечение информации из веб-страниц Михаил Коробов, ScrapingHub PyCon RU 2014
  • 2. План • Скачать страницу • Вытащить информацию
  • 3. Скачать страницу • wget / curl • urllib • requests • twisted / tornado / gevent / ... • scrapy / ...
  • 4. HTML <html> <head></head> <body> <div>TEXT-1</div> <div> TEXT-2 <b>TEXT-3</b> </div> <b>TEXT-4</b> </body> </html>
  • 5. HTML
  • 6. XPath //b
  • 7. XPath //div/b
  • 8. XPath //div[2]/text()
  • 9. XPath //div[2]//text()
  • 10. Получение информации из HTML • re (регулярные выражения) • XPath селекторы • CSS3 селекторы • jquery селекторы • parsley селекторы • ...
  • 11. Не пишем селекторы • Scrapely (https://github.com/scrapy/scrapely) • Portia (https://github.com/scrapinghub/portia)
  • 12. Portia: демо
  • 13. Сложные случаи: много сайтов, все разные; структура сайта неизвестна заранее.
  • 14. Задачи • Обход сайта • Извлечение информации
  • 15. Обход сайта: обычно - правила • Переходить по ссылкам /contact, /about и т.д. (в зависимости от задачи); • переходить по ссылкам, ведущим на тот же домен; • ограничения на глубину переходов; • ограничения на общее количество переходов; • ... • паджинация? • формы поиска?
  • 16. Извлечение информации • Правила / регекспы работают неплохо для телефонов, факсов и т.д. • Правила работают хуже для более сложных задач: имена людей, названия организаций и т.д. • В науке задача известна как Named Entity Recognition (NER).
  • 17. Named Entity Recognition Для английского языка часто решается с помощью машинного обучения 1. Определяем, что именно хотим найти. 2. Размечаем веб-страницы вручную. 3. Тренируем модель на размеченных данных. 4. Извлекаем информацию из новых веб-страниц.
  • 18. Named Entity Recognition Для английского языка часто решается с помощью машинного обучения 1. Определяем, что именно хотим найти.1 2. Размечаем веб-страницы вручную. 3. Тренируем модель на размеченных данных. 4. Извлекаем информацию из новых веб-страниц.
  • 19. 1. Примеры именованных сущностей • название организации • имя человека • должность человека • адрес (дом, улица и т.д.) • город • штат, провинция, область • страна • телефон • факс • время работы
  • 20. 1. Примеры именованных сущностей • название организации - ORG • имя человека - PER • должность человека - FUNC • адрес (дом, улица и т.д.) - STREET • город - CITY • штат, провинция, область - STATE • страна - COUNTRY • телефон - TEL • факс - FAX • время работы - HOURS
  • 21. Named Entity Recognition Для английского языка часто решается с помощью машинного обучения 1. Определяем, что именно хотим найти. 2. Размечаем веб-страницы вручную.1 3. Тренируем модель на размеченных данных. 4. Извлекаем информацию из новых веб-страниц.
  • 22. 2. Инструменты для ручной разметки • https://github.com/xtannier/WebAnnotator • https://gate.ac.uk/ • http://brat.nlplab.org/
  • 23. Разметка с помощью WebAnnotator (расширение для Firefox)
  • 24. Named Entity Recognition Для английского языка часто решается с помощью машинного обучения 1. Определяем, что именно хотим найти. 2. Размечаем веб-страницы вручную. 3. Тренируем модель на размеченных данных.1 4. Извлекаем информацию из новых веб-страниц.
  • 25. 3. Приводим задачу к виду, удобному для машинного обучения • Веб-страница => последовательность токенов; • для каждого токена сохраняем информацию о том, где он расположен в HTML; • каждому токену присваиваем метку. Инструмент: https://github.com/scrapinghub/webstruct
  • 26. Одна именованная сущность - это один или несколько токенов ORG © Old Tea Cafe All Rights Reserved Для машинного обучения - сложно и неудобно
  • 27. IOB-кодирование • Токенам "вне" именованных сущностей - тег O1 • Первому токену сущности - тег B-ENTITY1 • Всем остальным токенам сущности - тег I-ENTITY I-ORGB-ORG © Old Tea Cafe All Rights Reserved O O OOI-ORG
  • 28. Свели задачу к "стандартной" задаче классификации • Входные данные - информация о токене (фичи) • Предсказание - метка, закодированная IOB • ... + одна тонкость - чтоб улучшить качество предсказания, используют классификаторы, учитывающие последовательность меток (обычно это Conditional Random Fields)
  • 29. Примеры фич • токен == "Cafe"? • первая буква - заглавная? • токен - это название месяца? • предыдущие два токена - "© 2014"? • токен - внутри html-элемента <title>? • токен - последний в своем html-элементе?
  • 30. Собираем все вместе (один из вариантов) • Размечаем веб-странички с помощью WebAnnotator • Используем WebStruct, чтобы загрузить тренировочные данные, закодировать сущности в IOB • Пишем функции извлечения фич (и/или используем готовые из WebStruct) • Тренируем CRF-модель с помощью python-crfsuite • С помощью WebStruct соединяем все вместе
  • 31. Недостатки • Нужно достаточно много тренировочных данных (хорошо бы несколько сотен страниц) • 100% точности достичь невозможно • Если фичи извлекаются питоньими функциями, и их много, то это не очень быстро (5-20 страниц в секунду)
  • 32. Достоинства • Работает; • понятно, как улучшать; • понятно, как адаптировать к новой предметной области; • часть работы (разметка тренировочных данных) может быть выполнена непрограммистом.
  • 33. Советы • Понимать, что происходит внутри; • не действовать "вслепую", не воспринимать все как черный ящик • пройти курсы на Coursera / ... • почитать книжки.

×