SlideShare a Scribd company logo
1 of 76
Download to read offline
Поиск списков
в неструктурированных
данных
Алексей Голубович
неструктурированный данные = web-страница
список = упорядоченные однотипные объекты
2
Что это значит?
структуризация знаний об обработке web-а
выделение контента на странице
нахождение списков на странице
3
Зачем это всё?
Что у нас есть?
4
желание упростить пользователю поиск важной для него
информации
упрощение должно заключаться в структуризации ответа
5
Как-то так
1
2
3
4
5
6
7
8
Структуризация знаний
о неструктурированных
данных
Element
<parent> ABC</parent>
Attribute
<child foo=“bar” />
7
Всем xml
И что дальше?
<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
path = /step_1/step_2/…./step_K
location_step = axis + node test + predicate
10
Всем XPath
11
Axis: где ищем?
Название обозначение
attribute @
child
descendant-or-self //
parent ..
comment()
text()
node()
12
Node test: что ищем?
[@href]
[@href = ‘help.html’]
[1]
13
Predicate: условие выбора
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
inspect element
console
$x
23
В браузере
Вернёмся к главной цели
стоит искать в том блоке, где больше всего текста
〉комментарии к посту
〉рейтинг в одном блоке, описание – в другом
предварительная обработка страницы
〉выделение значимого контента
какая-нибудь магия
25
В каком месте на странице искать?
Сегментация web-страницы
27
HTML5
<header>
<nav> <section id=“content”>
<footer>
<article>
<article>
<article>
к сожалению, мало где html , попытки разобраться самим
28
А если не HTML5?
29
Block fusion algorithm
ходим по узлам
плотность узла -> кол-во токенов / кол-во строк
объединяем узлы с похожими плотностями
30
Block fusion algorithm
31
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
36
Собственно функционал
ищем i, j, которые максимизируют данный функционал
37
Я у мамы верстальщик
38
Я у мамы верстальщик
плюсы
и вправду мало тегов в итоговом блоке
выделен самый весомый текстовый блок

минусы
упущены таблицы
39
Результаты оптимизации функционал
Ошибки. Повсюду ошибки
Об ошибках
41
Тут могла быть
ваша реклама
Экспертная оценка
Положительная Отрицательная
Оценка
системы
Положительная TP FP
Отрицательная FN TN
42
О страшных ошибках
И тут могла быть
ваша реклама
Экспертная оценка
Положительная Отрицательная
Оценка
системы
Положительная TP FP
Отрицательная FN TN
43
Может не будем ничего делать?
Нахождение списков
45
Найдём заголовок
//title/text()
46
Найдём заголовок
47
Если количество указано в заголовке
header: 1
p: 36
h2: 10
div : 4
…
48
Строим словарь
49
Выберем с нужным нам значением
header: 1
p: 36
h2: 10
div : 4
…
<a>…
<a>…
<a>…
…..
<a>…
<a>…
<a>…
50
N(<a>) > N(ожидаемое)
<a></a> a
<a>
<b></b>
<b></b>
<a>
51
Опишем каждую «ноду»
abb
52
Если количество не указано в заголовке
делаем предположение о количестве ( 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
Место, Страна
Место, Страна
Место в Стране
Место (Страна)
Страна: Место
…
59
Еще примеры объектов для поиска
плюсы
понятно, как работает
перечисления обычно ведутся одинаковым способом

минусы
трудно перебрать все варианты
могут выделить лишнее
60
Итоги использования regExp
61
Ложные срабатывания
Стоп-слова
62
63
Стоп-слова
Страны
Авиабилеты
Отели
Туры
Виза
Контакты
…
64
Аккуратность при выборе стоп-слов
Страны
Авиабилеты
Отели
Туры
Виза
Контакты
…
Искусство
Финансы
Новости
Наука
Идеи
Техника
…
Египет
Испания
Колумбия
Перу
Индия
Польша
…
плюсы :
простота в реализации
легкость в отладке
минусы:
неконтролируемый рост их количества
не все стоп-слова принесут только пользу
необходимо постоянное вмешательство человека
65
Итоги использования стоп-слов
66
Страницы одного сайта часто похожи
67
Страницы одного сайта часто похожи
<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
Итоги вырезания боковых блоков
73
Итого:
Чистка
страниц
Выделение
кандидатов
Валидация
найти [иглоку] в стоге сена
параметрический поиск
Яндекс.Опечатки
«усреднённое расстояние Левенштейна»
74
Валидация
Вопросы?
Алексей Голубович
младший разработчик в группе медиасервисов
Контакты
agolubovich94
agolubovich@yandex-team.ru

More Related Content

Viewers also liked

Hikmah Perseteruan BAZNAZ dengan LAZ
Hikmah Perseteruan BAZNAZ dengan LAZHikmah Perseteruan BAZNAZ dengan LAZ
Hikmah Perseteruan BAZNAZ dengan LAZAnas Ferdian
 
Film poster research
Film poster researchFilm poster research
Film poster researchnieevequinn
 
10 More than a Pretty Picture: Visual Thinking in Network Studies
10 More than a Pretty Picture: Visual Thinking in Network Studies10 More than a Pretty Picture: Visual Thinking in Network Studies
10 More than a Pretty Picture: Visual Thinking in Network Studiesdnac
 
Michael Levy. Unarmed - 5
Michael Levy. Unarmed - 5Michael Levy. Unarmed - 5
Michael Levy. Unarmed - 5michael levy
 
Translation , Transcription and Transduction
Translation , Transcription and TransductionTranslation , Transcription and Transduction
Translation , Transcription and TransductionMicrobiology
 

Viewers also liked (8)

O mestre da ciencia
O mestre da cienciaO mestre da ciencia
O mestre da ciencia
 
Hikmah Perseteruan BAZNAZ dengan LAZ
Hikmah Perseteruan BAZNAZ dengan LAZHikmah Perseteruan BAZNAZ dengan LAZ
Hikmah Perseteruan BAZNAZ dengan LAZ
 
Film poster research
Film poster researchFilm poster research
Film poster research
 
10 More than a Pretty Picture: Visual Thinking in Network Studies
10 More than a Pretty Picture: Visual Thinking in Network Studies10 More than a Pretty Picture: Visual Thinking in Network Studies
10 More than a Pretty Picture: Visual Thinking in Network Studies
 
Michael Levy. Unarmed - 5
Michael Levy. Unarmed - 5Michael Levy. Unarmed - 5
Michael Levy. Unarmed - 5
 
Pms
PmsPms
Pms
 
Translation , Transcription and Transduction
Translation , Transcription and TransductionTranslation , Transcription and Transduction
Translation , Transcription and Transduction
 
Personification
PersonificationPersonification
Personification
 

Поиск списков в неструктурированных данных