Система сбора, размещения и анализа данных web-страниц (часть 2)

Принципы создания синтаксического анализатора

Объектная модель документа (англ. Document Object Model, DOM) — спецификация прикладного программного интерфейса для работы со структурированными документами. С точки зрения объектно-ориентированного программирования, DOM определяет классы, методы и атрибуты этих методов для анализа структуры документов и работы с представлением документов в виде дерева. Все это предназначено для того, чтобы предоставить возможность компьютерные программе выполнять доступ и динамическую модификацию структуры, содержания и оформления документа.

Синтаксический анализатор (парсер) — это программа или часть программы, которая выполняет синтаксический анализ. Во время парсинга текст оформляется в структуру данных, обычно — в DOM-дерево, которое отражает синтаксическую структуру входной последовательности, и удобнее для дальнейшей обработки.

Обычно парсеры работают в два этапа: на первом идентифицируются осмысленные токены (выполняется лексический анализ), на втором создается дерево разбора.

Из-за того, что структура документа представляется в виде дерева, полный текст документа анализируется и хранится в памяти компьютера. Поэтому, DOM подходит для применений в приложениях, требующих многократного доступа к элементам документа в произвольном порядке.

Поскольку в этой работе необходимо структурировать табличную информацию с web-страниц, рассмотрим табличные элементы HTML. Среди табличных элементов TR определяет число строк, тогда как TH и TD определяют число столбцов в HTML таблицы.

Элемент TH используется для задания одного или более заголовков.

Элемент TD используется для внесения данных в ячейки таблицы. Будем в дальнейшем называть данные в элементах TD табличными данными в отличие от данных, находящихся в элементах TH, которые будем называть заголовками.

Типичная HTML таблица имеет, как минимум, один столбец — заголовок в верхней части таблицы, и как минимум, одну строку заголовка в левой части. Такой тип таблиц назовем срочной-стовпцевим.

Другой тип таблицы содержит, как минимум, один столбец заголовок или одну строку заголовка и называется в этом случае стовпцевим или строчным типом таблицы.

Заголовки в строчных и стовпцевих таблицах задают схему таблицы. Для любых таблиц, которые не имеют элементов TH, в ходе анализа было выявлено, что первая строка используется как заголовок.

Среди табличных элементов TH и TD два атрибута — ROWSPAN и COLSPAN — играют существенную роль в определении иерархии HTML таблиц. Когда TH или TD включает ROWSPAN = «n» (или COLSPAN = «n»), связывание ячеек таблицы распространяется на n столбцов вниз (или n строк вправо).

Для определения семантической иерархии и синтаксическое дерево любой HTML таблицы, в первую очередь определим иерархические зависимости данных. Когда они определены, остаются только данные, и все теги из таблицы исключаются. Семантическая иерархия HTML таблицы определяется согласно нотации псевдотаблицы, так как свойства псевдотаблицы легкие для восприятия. Псевдотаблица может рассматриваться как особый тип HTML таблицы и может быть использована для выражения срочной-стовпцевих, строчных и стовпцевих таблиц. Общий подход к построению семантической иерархии — это, в первую очередь, отражение таблицы T в псевдотаблицу и затем получение из нее иерархии.

Как уже упоминалось, HTML таблица может иметь разное количество столбцов в строках соответственно использование атрибутов COLSPAN и ROWSPAN. Если элемент TH или TD содержит COLSPAN = «n», то соответствующая ячейка TH или TD расширяется на n столбцов и занимает, таким образом, n ячеек, включая текущую ячейку в текущей строке. Итак, можно считать, что установлена ​​n-1 ячеек вправо от текущей ячейки, и в них находятся данные текущей ячейки. ROWSPAN функционирует иначе. Если элемент TH содержит ROWSPAN = «n», то конкретная ячейка расширяется на следующие n-1 строк и занимает n ячеек. В этом случае вставляются n-1 ячеек ниже текущей ячейки, содержимое текущей ячейки h не занимает все ячейки, а размещает только в установленную n-1 ячейку записано h. Итак, h появляется только в ячейке n-1, все остальные вставленные ячейки остаются пустыми. Это необходимо для сохранения корректных взаимосвязей табличных данных во всех строках в столбцах и избежания повторения самого заголовка, потому что об Объединенные заголовки в столбце HTML таблицы преобразуются в заголовок столбца псевдотаблицы. Однако если TD содержит ROWSPAN, то добавляются n-1 новых ячеек ниже текущей ячейки TD, и в них размещаются данные текущей ячейки для того, чтобы данные в каждом из n разных строк того же столбца были одинаковыми. После того, как обработка COLSPAN и ROWSPAN прошла успешно, необходимо убедиться, что результирующая таблица удовлетворяет определению псевдотаблицы.

Псевдотаблиця — это таблица, которая имеет правильную структуру и доступна для считывания данных. Семантическая иерархия HTML таблицы определяется согласно нотации псевдотаблицы. Псевдотаблиця может рассматриваться как особый тип HTML таблицы и может быть использована для выражения строчной-стовпцевих, строчных и стовпцевих таблиц. К псевдотаблицы можно обращаться по индексам. С каждой таблице может быть связан заголовок. Строки таблицы могут группироваться в разделы заголовков, нижних заголовков и тела. При отражении длинных таблиц информация из заголовков может повторяться на каждой странице таблицы.

Модель таблиц HTML позволяет упорядочивать данные и текст. С каждой таблице может быть связан заголовок. Строки таблицы могут группироваться в разделы заголовков, нижних заголовков и тела. Группы строк несут дополнительную структурную информацию и могут генерироваться агентами пользователей различными способами, отражающие эту структуру. Агенты пользователей могут разбить подразделение на заголовки / тело / нижние заголовки для поддержки прокрутки тела таблицы независимо от заголовков. При отражении длинных таблиц информация из заголовков может повторяться на каждой странице таблицы.

Для начала парсинга нужно получить доступ к документу и получить корневой элемент дерева тегов — в данном случае это тег <html>. Затем, по алгоритму нужно узнать, какие элементы содержатся в структуре под корневым элементом. Если они есть, то считываем их сверяем ли тот элемент нужной таблице, если так, то выбираем из нее все необходимые данные, иначе проверяем ли текущий элемент дочерние, если так, то делаем его текущим элементом и запускаем функцию рекурсивно. Этот процесс повторяется, пока не будет найдено нужную таблицу или элемент, который не имеет дочерних элементов. После этого возвращаемся к тому элементу, где началось расслоение. Процесс, алгоритм которого показан на рис. 1 продолжается, пока не будет найдена таблица с необходимыми данными.

Алгоритм считывания данных

Рис. 1. Алгоритм считывания данных

Когда парсер находит нужную таблицу для считывания, он передает управление следующей функции, которая анализирует структуру таблицы и создает псевдотаблицу. Из псевдотаблицы можно обращаться к элементам по индексу строки и столбца.

При создании псевдотаблицы парсер учитывает атрибут тега <TD> COLSPAN = n, который объединяет n ячеек в одну по горизонтали, и ROWSPAN = n, который объединяет n ячеек в одну по вертикали. Также парсер учитывает ситуацию, когда таблица вставлена ​​в другую таблицу. При этом данные передаются на более высокий уровень в основную ячейку псевдотаблицы. Алгоритм работы парсера по организации псевдотаблицы приведен на рис. 2.

Алгоритм работы парсера при создании псевдотаблици

Рис. 2. Алгоритм работы парсера при создании псевдотаблицы

* * *

Современному дизайнеру, создающему для Интернета разнообразные изображения, требуются разнообразные иконки и векторная графика для веб-дизайна. Только обширное разнообразие материалов позволит реализовать задачи различной степени сложности.

Читайте также:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.