Upload
alexey-golubovich
View
99
Download
0
Embed Size (px)
Citation preview
неструктурированный данные = web-страница
список = упорядоченные однотипные объекты
2
Что это значит?
структуризация знаний об обработке web-а
выделение контента на странице
нахождение списков на странице
3
Зачем это всё?
Что у нас есть?
4
желание упростить пользователю поиск важной для него информации
упрощение должно заключаться в структуризации ответа
И что дальше?
<root> <parent /> <parent> <child /> <child foo=“bar” /> <child foo=“zoo” /> </parent> </root>
8
The Document Object Model (DOM) is a cross-platform and language-independent convention for representing and interacting with objects in HTML, XHTML, and XML documents.
9
Всем DOM
14
XPath: example
<root> <parent /> <parent> <child /> <child foo=“bar” />
<child foo=“zoo” /> </parent> </root>
15
<root> <parent /> <parent> <child /> <child foo=“bar” />
<child foo=“zoo” /> </parent> </root>
XPath: example
16
<root> <parent /> <parent> <child /> <child foo=“bar” />
<child foo=“zoo” /> </parent> </root>
Xpath :
/root
XPath: example
17
<root> <parent /> <parent> <child /> <child foo=“bar” />
<child foo=“zoo” /> </parent> </root>
XPath: example
Xpath :
/root/parent
18
<root> <parent /> <parent> <child /> <child foo=“bar” />
<child foo=“zoo” /> </parent> </root>
XPath: example
Xpath :
/root/parent[child]
19
<root> <parent /> <parent> <child /> <child foo=“bar” />
<child foo=“zoo” /> </parent> </root>
XPath: example
Xpath :
/root/parent[child]/child
20
<root> <parent /> <parent> <child /> <child foo=“bar” />
<child foo=“zoo” /> </parent> </root>
XPath: example
Xpath :
/root/parent[child]/child[@foo]
21
<root> <parent /> <parent> <child /> <child foo=“bar” />
<child foo=“zoo” /> </parent> </root>
XPath: example
Xpath :
/root/parent[child]/child[@foo][1]
22
<root> <parent /> <parent> <child /> <child foo=“bar” />
<child foo=“zoo” /> </parent> </root>
XPath: example
Xpath :
/root/parent[child]/child[@foo][1]/@foo
стоит искать в том блоке, где больше всего текста
〉комментарии к посту
〉рейтинг в одном блоке, описание – в другом
предварительная обработка страницы
〉выделение значимого контента
какая-нибудь магия
25
В каком месте на странице искать?
ходим по узлам
плотность узла -> кол-во токенов / кол-во строк
объединяем узлы с похожими плотностями
30
Block fusion algorithm
по какому признаку объединять узлы?
сколько сегментов нам надо?
не знаем, какой из сегментов основной
32
Недостатки block fusion
33
Оптимизация функционала
<root> <parent/> <p>покупайте плюшки</p> <parent> <child/> <child foo=“bar”/>
<p> Hатpиевые атомы предварительно были замечены близко с центром других комет, но гелиоцентрическое расстояние жизненно дает поперечник. Узел на следующий год, когда было лунное затмение и сгорел древний храм Афины в Афинах (при эфоре Питии и афинском архонте Каллии), притягивает экваториальный лимб.</p>
<child foo=“zoo”/> </parent> <p>покупайте наших слонов</p> </root>
34
<root> <parent/> <p>покупайте плюшки</p> <parent> <child /> <child foo=“bar”/>
<p> Hатpиевые атомы предварительно были замечены близко с центром других комет, но гелиоцентрическое расстояние жизненно дает поперечник. Узел на следующий год, когда было лунное затмение и сгорел древний храм Афины в Афинах (при эфоре Питии и афинском архонте Каллии), притягивает экваториальный лимб.</p>
<child foo=“zoo”/> </parent> <p>покупайте наших слонов</p> </root>
Оптимизация функционала
заменим в коде страницы каждый тег на -1 , каждое слово в текстовой части на 1
<div><p>Бубен</p></div>
35
Пляска с
-1 -1 +1 -1 -1
плюсы
и вправду мало тегов в итоговом блоке
выделен самый весомый текстовый блок
минусы
упущены таблицы
39
Результаты оптимизации функционал
Об ошибках
41
Тут могла быть ваша реклама
Экспертная оценка
Положительная Отрицательная
Оценка системы
Положительная TP FP
Отрицательная FN TN
42
О страшных ошибках
И тут могла быть ваша реклама
Экспертная оценка
Положительная Отрицательная
Оценка системы
Положительная TP FP
Отрицательная FN TN
делаем предположение о количестве ( 8<N<25 )
ищем нумерацию на странице
пробуем искать регулярными выражениями
53
Если количество не указано в заголовке
54
Как выбрать направление списка?
с начала или с конца ?
1.
2.
3.
4.
5.
6.
10.
9.
8.
7.
6.
5.
4.
3.
2.
1.
55
Используем регулярные выражения
http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags
56
Пример использования regExp
Хойан, Вьетнам
Человек, ни разу не занимавшийся планированием самостоятельного путешествия во Вьетнам, скорее всего, никогда не слышал о Хойане, а услышав, спутал бы с Ханоем.
Гоа, Индия
Это правда, цены на отдых в Гоа в последние годы растут чересчур быстро, но того, кто туда доберётся, ожидает щедрое вознаграждение.
Каир, Египет
Каир сегодня следует отнести к категории «в зависимости от новостей», на самом деле, ситуация в городе только стимулирует снижение цен на перелеты и неплохие отели в туристической зоне.
Хойан, Вьетнам
Человек, ни разу не занимавшийся планированием самостоятельного путешествия во Вьетнам, скорее всего, никогда не слышал о Хойане, а услышав, спутал бы с Ханоем.
Гоа, Индия
Это правда, цены на отдых в Гоа в последние годы растут чересчур быстро, но того, кто туда доберётся, ожидает щедрое вознаграждение.
Каир, Египет
Каир сегодня следует отнести к категории «в зависимости от новостей», на самом деле, ситуация в городе только стимулирует снижение цен на перелеты и неплохие отели в туристической зоне.
57
Пример использования regExp
что хотим находить?
последовательно идущие несколько слов
каждое с заглавной буквы
разделены запятой
58
Место, Страна
плюсы
понятно, как работает
перечисления обычно ведутся одинаковым способом
минусы
трудно перебрать все варианты
могут выделить лишнее
60
Итоги использования regExp
64
Аккуратность при выборе стоп-слов
Страны Авиабилеты Отели Туры Виза Контакты …
Искусство Финансы Новости Наука Идеи Техника …
Египет Испания Колумбия Перу Индия Польша …
плюсы :
простота в реализации
легкость в отладке
минусы:
неконтролируемый рост их количества
не все стоп-слова принесут только пользу
необходимо постоянное вмешательство человека
65
Итоги использования стоп-слов
<a @href=“”/>
url.startsWith(“/“)- внутренний переход
url.startsWith(“http://site-name“)- тоже
68
Нахождение ссылок на странице
ходим по childnodes
выбираем уровень вложенности (оптимально 7)
отбрасываем теги <!script> , <!comment>
69
Генерируем xpath-ы
70
для url1 : $x(‘/a/b/text()’) = ‘Египет Турция Тунис …’
для url2 : $x(‘/a/b/text()’) = ‘Египет Турция Тунис …’
Ищем совпадающие блоки
для url1 : $x(‘/div/a/text()’) = ‘Авиабилеты Отели …’
для url2 : $x(‘/div/a/text()’) = ‘Авиабилеты Отели …’
Удаляем со страницы те элементы dom дерева, что являются результатом выполнения найденых xpath
71
Чистим нашу страницу
плюсы:
уверенность в том, что ничего нужного не пропадёт
совместимость с алгоритмами сегментации
минусы
требуется больше времени, чем стоп-словам
необходимо подбирать глубину xpath
и еще плюсы
все минусы - разовая задача
72
Итоги вырезания боковых блоков
найти [иглоку] в стоге сена
параметрический поиск
Яндекс.Опечатки
«усреднённое расстояние Левенштейна»
74
Валидация
Алексей Голубович
младший разработчик в группе медиасервисов
Контакты
agolubovich94