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

1,305 views
1,166 views

Published on

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

No Downloads
Views
Total views
1,305
On SlideShare
0
From Embeds
0
Number of Embeds
119
Actions
Shares
0
Downloads
35
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

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

×