Научная статья на тему 'Семантическое отслеживание изменений на вебсайтах'

Семантическое отслеживание изменений на вебсайтах Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
203
53
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ОТСЛЕЖИВАНИЕ ИЗМЕНЕНИЙ / ВЕБ-КЛИППИНГ / СЕМАНТИЧЕСКИЙ АНАЛИЗ ДАННЫХ / МОНИТОРИНГ ВЕБ-СТРАНИЦ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Чеснавский А. А.

Рассматривается алгоритм семантического отслеживания изменений в документах HTML. Основными преимуществами предлагаемого алгоритма является отслеживание изменений в данных веб-страницы, а не в презентационной части, отсутствие необходимости знать внутреннюю структуру HTML-документа и проводить предобработку. Алгоритм может быть использован при анализе объемных веб-страниц, а также для эффективной веб-интеграции (веб-клиппинга).

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Семантическое отслеживание изменений на вебсайтах»

СЕМАНТИЧЕСКОЕ ОТСЛЕЖИВАНИЕ ИЗМЕНЕНИЙ НА ВЕБ-САЙТАХ

Чеснавский А.А.

(Московский Инженерно-Физический Институт, Москва) Chester2000@inbox.ru

Рассматривается алгоритм семантического отслеживания изменений в документах HTML. Основными преимуществами предлагаемого алгоритма является отслеживание изменений в данных веб-страницы, а не в презентационной части, отсутствие необходимости знать внутреннюю структуру HTML-документа и проводить предобработку. Алгоритм может быть использован при анализе объемных веб-страниц, а также для эффективной веб-интеграции (веб-клиппинга).

Ключевые слова: отслеживание изменений, веб-клиппинг, семантический анализ данных, мониторинг веб-страниц.

Введение

Данные на многих сайтах изменяются с высокой скоростью. Где-то это дни, а иногда минуты и даже секунды. В ряде случаев необходимо обеспечить обнаружение изменений на вебстраницах. Например, биржевому брокеру необходима информация об изменении цены на определенные акции. Ручной поиск изменений может быть времяемким и неэффективным, тогда как автоматический поиск изменений предоставит всю необходимую информацию. Еще одним примером может быть поиск информации о новых предложениях по лоту на аукционе.

В настоящее время существует довольно большое количество алгоритмов обнаружения изменений (в т.ч. и для иерархических данных), таких как MMDiff, XMDiff, HtmlDiff, и ряд алгоритмов для поиска изменения в плоских данных, которые обычно отображают изменения в терминах строк и столбцов

исходного документа. Т.е. обычно результатом работы подобных алгоритмов является сообщение вида: «Строка N в документе A отличается от строки N в документе В», что на самом деле не является интуитивно понятным результатом в контексте иерархических данных и документов HTML.

Такие алгоритмы как MMDiff генерируют более значимые результаты для иерархических данных, нежели их аналоги для анализа изменений в плоских документах, и могут выглядеть следующим образом: «Значение узла A было изменено на B». Однако, эти алгоритмы, к сожалению, слабоприменимы для HTML-документов вследствие того, что данные и отображение данных являются частями одного и того же документа.

Рассмотрим пример HTML-документа (Листинг 1) [8]:

<TABLE BORDER>

<CAPTION>A test table with merged cells. <CREDIT>(T.Bemers Lee/WWW C,1995.)</CREDIT> </CAPTION>

<TR>

<TH ROWSPAN=2>

<TH COLSPAN=2>

Average <th rowspan=2>Red<br>eyes <TR><TH>height<TH>weght

<TR><TH ALIGN=left>males<TD>1.9<TD>0.003<td>40% <TR><TH ALIGN=left>females<TD>1.7<TD>0.002<td>43% </TABLE>

Листинг 1. Пример HTML-страницы

Предположим, что значение 40% в последней колонке изменяется на 50% (рис. 1). Это означает, что значение процента красных глаз у мужчин изменилось с 40% на 50%. Для того, чтобы технически осуществить данное изменение, нужно в HTML-коде в пятой строке 40% заменить на 50%. Как уже говорилось выше, при анализе изменений сообщение об изменении в пятой строке было бы совсем неинформативным. Даже структурированное описание изменения в HTML коде, основан-

ное на HTML-грамматике, такое как “TABLE.TR.TD.40%” изменено на “TABLE.TR.TD.50%” не является достаточно информативным, и с его помощью тяжело отследить реальное изменение процента красных глаз у мужчин. Подобные проблемы могут быть успешно разрешены с помощью алгоритма семантического отслеживания изменений (АСОИ).

]£} C:\Users\aches\Desktop\New Те...

IrniRMaji

l^/, I S C:\Users\aches\De5 ▼ | +t | л | | С File Edit View Favorites lools Help Ü iS? I C:\Users\aches\Desktop... f I 'ft

A test table with merged cells.(T .Berners Lee/WWWС, 1995.)

Average Red eyes

height iveght

males 1.9 0.003 40%

females 1.7 0.002 43%

[■i Computer | Protected Mode: Ofl ^100% т

Рис. 1. Пример таблицы

АСОИ отслеживает изменения, которые мы назовем семантическими изменениями, в HTML документах в рамках иерархии данных, в отличие от иерархии разметки HMTL-документа. Используя описанный выше пример, АСОИ определил бы изменения как “Males.‘Red eyes’ изменен с 40% на 50%”. Особенность АСОИ состоит в адаптации понятия семантических изменений для отслеживания изменений в HTML-документах. В противоположность другим хорошо спроектированным полу-структурированным данным или XML документам, путь между корневой вершиной и листовым узлом в дереве анализа HTML документа (например, TABLE.TR.TD.40%) не обязательно описывает значение самого узла, т.к. HTML определяет к тому же и представление данных. В отличие от HTML, в хорошо структурированных документах путь между вершиной и листовым

узлом в основном информативен и значим. Более того, XML требует, чтобы каждый элемент был закрытым, в то время как закрывающие тэги у некоторых HTML элементов могут отсутствовать или быть необязательными, что приводит к сложностям в разборе (parsing) HTML документов. В результате, из-за этих отличий получение информации из HTML документов требует дополнительных знаний о внутренней структуре или предварительной обработки исходных документов [1] (что в реальной практике может быть недоступно), чего не нужно для работы АСОИ.

1. Обзор альтернативных подходов

На данный момент автору данной статьи неизвестны алгоритмы семантического анализа изменений HTML-страниц. Существующие алгоритмы ориентированы либо на анализ изменений в «плоских» документах, в XML-документах, а также синтаксический анализ изменений в HTML-документах.

Так, одним из наиболее популярных инструментов для анализа изменений в «плоских» файлах является GNU утилита diff. Эта программа выводит построчно изменения, сделанные в файле (для текстовых файлов). Работа diff основана на нахождении наибольшей общей подпоследовательности (англ. longest common subsequence, LCS) [2]. В целом, задача нахождения наибольшей общей подпоследовательности является одной из классических задач информатики и применяется не только в таких утилитах как diff, но и в биоинформатике. Если вкратце описать суть алгоритма, то последовательность Z является общей подпоследовательностью последовательностей X и Y, если Z является подпоследовательностью как X, так и Y. Требуется для двух последовательностей X и Y найти общую подпоследовательность наибольшей длины. Очевидно, что данный алгоритм не подходит для анализа иерархических, а тем более HTML-документов. Конечно, иерархические документы можно сериализовать и затем применить к ним утилиту diff, но это будет неэффективно и практически безрезультатно.

Вторую группу составляют алгоритмы, ориентированные на анализ изменений в иерархических документах, в частности, в XML-файлах. Эти алгоритмы в большинстве случаев основываются на сравнении деревьев (благодаря тому, что иерархические документы представимы в древовидной форме). В 1979 г. Kuo-Chung Tai представил первый неэкспоненциальный алгоритм сравнения двух деревьев на основе расстояния редактирования [10]. До этого в 1977 Selkow [9] предложил довольно близкий к XML алгоритм преобразования деревьев - рекурсивный алгоритм поиска наибольшей общей подпоследовательности. Позже S. Chawathe [3-6] предложил два алгоритма - MMDiff и XMDiff (для основной и внешней памяти соответственно) для анализа изменений в упорядоченных деревьях, основанных на алгоритме Selkow.

Если рассматривать неупорядоченные деревья, то задача становится NP-сложной, и необходимы дополнительные ограничения для сравнения двух деревьев. Так, можно выделить алгоритмы K. Zhang [12] и X-Diff [11], созданные для решения этой задачи. Еще одной достойной внимания утилитой является DeltaXML (по мнению ряда аналитиков - одна из лучших утилит для анализа изменений в XML-документах [7]). Эта утилита использует алгоритм, основанный на поиске наибольшей общей подпоследовательности, и обладает линейной сложностью. Если говорить про анализ изменений на HTML-страницах, то практически единственной на сегодняшний день утилитой является HtmlDiff. HtmlDiff рассматривает HTML-документ как последовательность токенов, которые формируются на основе разметки и текста. В основе HtmlDiff лежит взвешенный алгоритм поиска наибольшей общей подпоследовательности. Результатом работы этой утилиты является синтаксический анализ отличия между двумя HTML-документами. На основе HtmlDiff создан ряд других утилит для анализа изменений: AT&T Internet Difference Engine, CS-HTMLDiff.

В целом, существует довольно ограниченное число утилит и соответствующих алгоритмов, подходящих для анализа изменений в иерархических документах. Если же рассматривать 138

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

2. Описание алгоритма семантического отслеживания изменений на веб-страницах

Итак, иерархически структурированные данные - это набор данных D, в котором каждый неделимый элемент формирует узел в соответствующем дереве T, где T представляет данные иерархии D. Полуструктурированные данные, данные в HTML/XML документах и такие логические сущности, как файлы и папки, являются типичными примерами иерархических данных. Мы представляем иерархические данные как ориентированное дерево, где есть дуга от узла v2 к узлу vb если v1 - это прямой контейнер v2 в иерархии данных. Этот тип отношений может быть легко найден в любом элементе контейнерного типа в HTML/XML или структуре папка - подпапка/файл в файловой системе. Рассмотрим понятие ветви в иерархии данных.

Определение 1. Допустим, задано ориентированное дерево T. Ветвью T называется путь от листового узла vn к корневой

вершине v1 дерева T, обозначаемый .vbv2.......vn (n > 1), где

каждый узел отделен точкой от смежного узла и vi является предком vi + 1 (1 < i < n - 1). Любой связный подпуть ветви, который включает листовую вершину, т.е. vi.vi + 1.vn (1 < i < n),

называется частичной ветвью в дереве T и обозначается без

начальной точки. Кроме того, для данной ветви ,v1.vn, путь

.v1...vi _ 1 называется контекстом vi (1 < i < n).

Запись .A.(Ab A2, ... , An), называемую составной ветвью, обозначим (.AAb AA2, ... , A.An), где каждая AAi (1 < i < n) является ветвью. Более того, если существует более одного узла от одного родительского узла o («братья»), мы будем каждый узел отделять один от другого суффиксом, т.е. o[1], o[2] и т.д.,

согласно порядку их появления сверху вниз и слева направо в исходном документе.

АСОИ состоит из трех шагов:

• Конструирование семантических иерархий (деревьев) любой пары данных HTML документов;

• Идентификация ветвей в результирующих деревьях и удаление идентичных;

• Определение изменений одного дерева относительно другого на основе сравнения каждой из оставшихся ветвей.

HTML-документ состоит из одной или более логических секций, которые:

• Являются равными друг другу, например, Section 1, Section

2, и т.д.;

• Одна секция структурно включает другую, например, Section 1 и Section 1.2;

• Две секции не являются равными друг другу, и одна из них не включает другую, например, Section 1.3 и Section 4.

Наша задача - определить семантическую иерархию секций в HTML документе, используя различные HTML тэги. Как уже было сказано выше, HTML был создан не только для определения, но и для отображения данных, и, таким образом, большинство HTML документов не способствуют организации компонентов HTML в секции или блоки согласно иерархии. Таким образом, более детально наша первая задача заключается в идентификации того, какие HTML тэги могут быть использованы для конструирования иерархической структуры HTML документов (Тип 1), а какие служат для представления данных (Тип 2). Список тегов с разделением по типам можно найти в табл. 1.

Таблица 1. Группы HTML тегов

HTML тэги Tun 1 Tun 2

Head TITLE, META ISINDEX, BASE, LINK, SCRIPT, STYLE, META

Body Заголовки H 1,H2,H3,H4,H5,H 6

Блоки P, CENTER, BLOCKQUOTE, PRE, DIR, MENU, DL, DT, DD, UL, OL, LI, TABLE, CAPTION, THEAD, TBODY, TR, TH, TD ISINDEX, HR, DIV

Текст Шрифт TT, I, B, U, STRIKE, BIG, SMALL, SUB, SUP

Фраза EM, STRONG, DFN, CODE, SAMP, KBD,VAR, CITE

Специ- альный IMG A, APPLET, FONT, BASEFONT, BR, SCRIPT, MAP

Форма FORM, INPUT, SELECT, TEXTAREA

Адрес ADDRESS

Конструирование семантической иерархии для нетабличных данных состоит из двух шагов. На первом шаге все тэги типа 2 удаляются из исходного HTML документа. Отметим, что удаление тэгов типа 2 может привести к конкатенации #PCDATA. Например, <LI><I>text 1</I>text 2</LI> приводит к <LI>text 1 text 2</LI> после удаления тэга <I>. На втором шаге семантическая иерархия конструируется на основе предшествования нетабличных HTML тэгов так, как это изображено на Рис. 2. Предшествование между двумя HTML элементами A и B, обозначаемое A >> B, показывает, что данные, содержащиеся в A, выше в соответствующей иерархии, чем данные, содержащиеся в B.

Рис. 2. Порядок предшествования нетабличных элементов (тип 1)

Определив порядок предшествования среди тэгов типа 1 (за исключением тэгов, предназначенных для создания таблиц) в HTML документе H, мы применяем следующие правила к синтаксической иерархии H для конструирования семантической иерархии S данных в H.

• Создать корневой узел Vr иерархии S из #PCDATA из элемента TITLE. Элемент TITLE, который является обязательным для любого HTML документа и, согласно спецификации HTML, содержит описание документа.

• Создать иерархию KEYWORDS ^ «список ключевых слов» из любого тэга META в виде <META NAME = "keywords” VALUE = ”list_of_keywords”>. Присоединить иерархию к Vr и получить Vr ^ KEYWORDS ^ “список ключевых слов”. Вообще, META является опциональным и предоставляет произвольное количество ключевых слов, каждое из которых релевантно исходному документу.

• Создать иерархию ADDRESS ^ texti text2 text3 ^ HREF = “link”, если элемент ADDRESS в форме <ADDRESS>texti <A HREF = “link”> text2 </a> text3 </address>, где texti и text3 могут быть пустыми. Создать иерархию ADDRESS ^ text вместо предыдущего варианта, если элемент ADDRESS в форме <ADDRESS> text </ADDRESS> и присоединить к иерархии Vr. Отметим, что элемент ADDRESS является опциональным, и, если он существует, он должен быть потомком элемента BODY.

• Для всех оставшихся элементов HTML документа приме-

нять следующее: для HTML элемента в форме <^> #PCDATA <t2> ... </t2> </t1>, где t1 (t2 соответственно) - название элемента HTML, создать иерархию #PCDATA ^ sh, где sh - семантическая иерархия, полученная из <t2> ... </t2>. Если после #PCDATA идут другие HTML тэги, то это обычно свидетельствует о том, что данные включены в тэги. Отсюда мы полагаем, что #PCDATA содержит данные. Данные ветви в составном виде:

... I0.(I1.d1,12....d2, ... , In.dn), если d1 ... dn являются

#PCDATA; ... .I0.(I1...db I2.....d2,... , In.dn ... ), если dn

- единственная таблица в In ... dn, где I (0 < i < n) - элемент HTML. Создаем иерархию di ^ dn (1 < i < n), если Ii >> In и Ik ■» In, для любого к, такого что i + 1 < к < n. Присоединить дугу от корня для каждой сконструированной иерархии к Vr.

Это правило говорит о том, что для данных (d), заключенных в dn, мы создаем иерархическую связь между ними. Если dn

является таблицей, то используется заглушка TABLE in di ^

TABLE, которая затем будет заменена на корневой элемент семантической иерархии соответствующей таблицы. Условие, что dn является единственной таблицей в In....dn, подразумева-

ет, что эта таблица есть внешняя таблица в этой ветви.

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

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

Среди табличных элементов два атрибута TH и TD, ROWSPAN и COLSPAN играют существенную роль в определении иерархии HTML таблиц. Для иллюстрации рассмотрим пример, рассмотренный выше (см. Рис. 1). В данном примере наблюдается различное число строк и столбцов, что затрудняет процесс корреляции строк и столбцов. Когда TH или TD включает ROWSPAN = “n” (COLSPAN = “n” соответственно) связанная ячейка распространяется на n столбцов вниз (n строк вправо соответственно).

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

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

Определение 2. Псевдотаблицей T = {(а1Ь ... ,a1n),

(a21, ..., a2n), ... , (am1, ... ,amn)} со столбцами-заголовками

Cj, ... , Cn и заглавием (caption) C является двумерная таблица, где заголовок, каждый столбец-заголовок и данные ячейки ау (1 < i < m, 1 < j < n) могут быть нулевыми. Кроме того, akI Ф ап, если к Ф l (1 < k, l < m).

Согласно спецификации, HTML-таблица содержит по крайней мере один элемент CAPTION. Если CAPTION определен для HTML-таблицы, он становится заголовком C соответствующей псевдотаблицы. В противном случае мы присваиваем заголовку значение “TABLE”, которое служит заглушкой, которая в итоге будет удалена.

HTML-грамматика определяет иерархию HTML-документа отношением контейнер-содержимое между тэгами и данными, что отлично от иерархии в псевдотаблице, поскольку в псевдотаблице нет тэгов. Поскольку столбцы-заголовки и табличные данные в псевдотаблице могут быть нулевыми, рассмотрим особый тип отношений включения: в отношении контейнер-содержимое o1 ^ o2 ^ o3, где oi (1 < i < 3) является либо заголовком, либо данными, отношение может быть редуцировано до o1 ^ o3, если о2 является пустой строкой.

Определение 3. Пусть дана Л-арная псевдотаблица T = {(ап, ... , a1n), (а21, ... , a2n), ... , (am1, ... , amn)} со столбцами-заголовками C1, ... , Cn и заглавием C. Семантическая иерархия SH = (V, E, g) от T, обозначенная SHt, есть ориентированное дерево, где Vr G V является корневой вершиной SHt, обозначенной C, и каждый узел v G V, отличный от Vr обозначает непус-

той ау (Су соответственно) (1 < 1 < т, 1 < у < п) в Т и помечен ау (Су соответственно). Е - конечное множество ориентированных дуг; и g: Е ^ V * V - функция такая, что v2 ^ V], если g(e) = (уь v2) и Уг(с) ^ С] ^ аг1 ^ Су ^ ау (1 < 1 <т, 2 <у < п).

Так как заглавие псевдотаблицы Т содержит краткое описание того, для чего создана таблица, оно выбрано в качестве корневой вершины соответствующей БЫ. По определению БИ( содержит поддеревья, имеющие корневыми вершинами аг1 ... а1п (1 < 1 < т) с ограничением Vr(c) ^ С! ^ аг1 (1 < 1 < т). Это связано с тем, что строка может быть уникально идентифицирована от других строк по первому столбцу (т.е. аг1) в Т (см. Определение 2). Рис. 3 иллюстрирует псевдотаблицу и соответствующую семантическую иерархию, построенную на основе Определения

3. Основная задача в конструировании псевдотаблицы - это определить каждую строку, т.е. аг1 ... а1п (1 < 1 < т) и столбец, т.е. ау... а ту (1 < У < п) из соответствующей НТМЬ-таблицы.

С

СР В

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

II I I

1^Г^1^ГНГ"Н ПН

[ Дц ] | Кп ][ | ^г, |

Рис. 3. Псевдотаблица Т и соответствующая семантическая иерархия

Рис. 4 иллюстрирует, как можно преобразовать данные в элементах ТН и ТБ в столбцовой таблице НТМЬ в Су и ау псевдотаблицы. Рис. 5 и Рис. 6 показывают преобразование строчной и строчно-столбцовой таблиц НТМЬ соответственно в псевдотаблицы.

Сі Сп

Аі --- Ал,п

...

ДчЛ ---

*1,1 Al, л

Ajt 1 Afc л

«І+1:1 s; +

& + £ dt-к, л

Сі-Ai, і-.йі і Си = АііЯ ... Ajfc, и

и + а и & і із

ík Í и і .3 л - К. л

Рис. 4. Перевод столбцовой таблицы ИТМЬ в соответствующую псевдотаблицу

-¿1,1 = *1, 1 - - *1,1 ^і,2-^і, J-1 Лі,я = ^1,1 - я-1

Лщі — Ьщ 1 ... A«l1 ^м,2 = ¿í)4.1- 1 ^ЛЇ,Л ^и,1-л- 1

Al ,1 Ai,і ^l.J-l ¿1,1 — Л -1

А 1 А«,; d'w.l- 1 — Л -1

Рис. 5. Перевод строчной таблицы HTML в соответствующую

псевдотаблицу

АА1=1 Mi AAi3 Я

AAjti AA¿ 2 AA¿ Л

А V* + 1,1 Av ¿ + l.L 4 + 1,1 + 1 dy-1,1 + И — 1

Av> -М.1 Av *+ m. 1 -4+ ЩІ + 1 dt-mj-л — 1

Ci = AAU AAti C: -A A i,i AAjti Сл = AA1>a ААІЛ

Ai = A v>- i:i ... Av¿-í.i ^1,2 = ¿ír+ 1,J-1 Ал = dt+i.i -п-i

Дщі = Avj - m i ... Avt+ *l1 ^*,2 = 1 -Ащ_п =dt-«,í — Я - 1

Рис. 6. Перевод строчно-столбцовой таблицы ИТМЬ в соответствующую псевдотаблицу

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

Рассмотрим случаи вложенных таблиц. Если таблица Т2 вложена в другую таблицу Ть тогда Т2 находится в элементе TD таблицы Ть Пусть S - семантическая иерархия Т2 и пусть td будет элементом в Ть который содержит Т2. В этом случае создадим ё ^ Б, если ё предшествует #PCDATA в td. В противном случае Б обрабатывается как #PCDATA в td. Для конструирования семантической иерархии всего HTML-документа И, включающего в себя таблицу Т, мы присоединяем дуги семан-

тической иерархии T к семантической иерархии H по следующему правилу:

Дана иерархия d ^ TABLE, полученная по правилу 4, и семантическая иерархия S таблицы T, связанной с TABLE. Заменяем d ^ TABLE так, что: d^ S, если Sпредставлена в виде C. (...) или d ^ c1, ... , d ^ cn, если S представлена в виде TABLE.(c ... , ...

, cn ••• ),

где C - CAPTION в Tи c1 ... cn - табличные данные T.

Щ

CjD ГН

ро<Т] Гф!Г| ро<7] ро<Т|

Рис. 7. Дерево S1

Рис. 8. Дерево S2

Если HTML-документ в теле BODY не имеет ничего кроме таблицы, исходящая дуга от семантической иерархии таблицы проходит к содержимому элемента TITLE документа H.

Теперь пришло время рассмотреть обнаружение изменений между двумя семантическими иерархиями, т.е. между двумя HTML документами. В качестве примера рассмотрим две семантические иерархии S1 и S2 (Рис. 7 и Рис. 8). За один обход дерева могут быть определены ветви S1 и S2 (Xj (1 < i < 5) и y}-

(1 < j < 7))):

51 = {x1 = .a.b.f, x2 = .a.c.k, x3 = .a.c.g, x4 = .a.d.h, x5 = .a.e.p}

52 = {y1 = .a.g.b, y2 = .a.c.k, y3 = .a.c.g.b.f, y4 = .a.d.c, y5 = .a.h.d.h, y6 = .a.h.e, y7 = .a.h.p}

При определении отличий между двумя семантическими иерархиями S1 и S2 в первую очередь необходимо удалить ветви, имеющиеся в обоих иерархиях. После этого основная задача -определить, какие из оставшихся ветвей в S1 «скорее всего» изменились и стали ветвями в S2.

Пусть даны исходные ветви b1, ... , bm и целевая ветвь bt. Рассмотрим критерии того, что ветвь bi (1 < i < m) ближе других находится в bt:

• Если для bi нужно «меньше изменений», чтобы прийти к bt, чем другим ветвям. В этом случае мы считаем bt источником bt.

• В случае, когда любые две или более ветвей b1, b2, ... , bm требуют тех же затрат для модификации в bt, bt выбирается в том случае, если bi и bt имеет большее число совпадающих вершин по направлению к вершине, чем другие bj (1 < j < m, i ф j).

Введем понятие взвешенной разницы (¿) для измерения величины отличия (т.е. изменений) между двумя ветвями. С использованием S фиксируем следующие отличия:

• Отличия около корневых вершин в b1 и b2 более значимы, нежели отличия около листьевых вершин. Это связано с тем, что корень иерархии данных определяет частный класс данных, в то время как листьевые вершины иерархии дан-

ных - это элемент данных, который принадлежит классу или подклассу корня.

Рассмотрим пример: Ь1 = НазваниеКниги.‘Мертвые души’, Ь2 = НазваниеКниги.‘Война и Мир’, Ь3 = НазваниеФиль-ма.‘Весна на Заречной улице’. Все указанные ветви различны, но мы считаем, что Ь1 “более отлична” от Ь3, нежели от Ь2, т.к. Ь1 и Ь2 содержат названия книг, а Ь3 название фильма.

• Порядок между вершинами в Ь1 и Ь2 является существенным. Если Ь1 и Ь2 имеют идентичный набор вершин, но упорядочены по-разному, эти ветви считаются различными. Определение 4. Пусть дана ветвь Ь = .у1........\п. Вес верши-

ны V1 = (2г) - 1 (1 < 1 < п).

Для вычисления взвешенной разницы между любыми двумя ветвями будем рассматривать каждую ветвь как упорядоченное множество с дубликатами, т.е. множество, которое может содержать повторяющиеся элементы, и упорядоченность между элементами имеет значение. К примеру, ветвь .а.Ь.с.ё представляется как {а, Ь, с, ё] и является отличной от {а, Ь, с, ё, Ь}. Для двух множеств с дубликатамиМ1 = {аь ... , ат] иМ2 = {Ьь ... , Ьп] определим следующие операции:

М1 П М2 = е1 , ... , еп, где каждый ег принадлежит какМ1, так и М2 и для любого г, такого что 1 < 1 < п, ег предшествует еI + 1 в М1 и М2.

М1 - М2 = {е | е е М1 и е е М1 П М2].

Определение 5 Пусть даны две ветви: Ь1 = .и.........ит и

Ь1 = .v1...vn. Тогда взвешенная разница 3 для Ь1 и Ь2 вычисля-

ется следующим образом:

5(Ьь Ь2) = Х ™иг+ Ъ™Ш, при условии, что иг е (Мы - Мь2) и V е (МЬ2 - МЬ1), где ^ш- (>уи) - вес иг (V соответственно) и МЬ1 (МЬ2) - упорядоченное множество с дубликатами МЬ1 (МЬ2 соответственно).

Пример: Рассмотрим деревья Б1 и £2. 3(х1, у1) = 0.25, тогда

как Мх1 - Му1 = 0, Му1 - Мх1 = {^} и вес g = (22) - 1.

На третьей стадии происходит сравнение оставшихся ветвей в S1 с каждой оставшейся ветвью S2 на основе вычисления взвешенной разницы. Если ветвь X в S1 «наименее отлична» от y в S2, тогда считаем, что ветвь y есть измененная х. Если несколько ветвей имеют одинаковые характеристики отличия -можно выбрать любую из них.

3. Заключение

В данной статье предложен алгоритм семантического отслеживания изменений (АСОИ), который позволяет выявить изменения данных в теле HTML-документа, а не изменений разметки документа. Особенностью данного алгоритма является то, что не требуется проводить предобработку документа и знать внутреннюю структуру HTML-страницы. АСОИ может быть использован либо как самостоятельный инструмент анализа изменений в больших документах, либо стать компонентом семантического анализа изменений HTML-страниц для подсистемы веб-клиппинга системы интеграции приложений.

Литература

1. ATZENI P., MECCA G. Cut and Paste. In Proceedings of the 16th Intl. Symposium on Principles of Database Systems, p. 144-153, May 1997.

2. BERGROTH L., HAKONEN H. A Survey of Longest Common Subsequence Algorithms, 2005

3. CHAWATHE S., Comparing Hierarchical Data in External Memory, VLDB, 1999.

4. CHAWATHE S., ABITEBOUL S., WIDOM J., Representing and querying changes in semistructured data, ICDE, 1998.

5. CHAWATHE S., GARCIA-MOLINA H., Meaningful Change Detection in Structured Data, SIGMOD, Tuscon, Arizona, p. 26-37, May 1997.

6. CHAWATHE S., RAJARAMAN A., GARCIA-MOLINA H., WIDOM J., Change detection in hierarchically structured information, SIGMOD, vol. 25, num. 2, p. 493-504, 1996.

7. COBENA G., ABDESSALEM T., HINNACH Y., A comparative study for XML change detection, Institut National de Recherche en Informatique et en Automatique, Rocquen-court, France, July 2002.

8. RAGGETT D., HORS D., JACOB S. I. HTML 4.0 Specification- W3C Recommendation. (http://www.w3.orglTR/REChtml40, April 1998).

9. SELKOW S., The tree-to-tree editing problem, Information Processing Letters, p. 184-186, 1977.

10. TAI K., The tree-to-tree correction problem, Journal of the ACM, 26(3), p. 422-433, July 1979.

11. WANG Y., DEWITT D. J., CAI J.-Y., X-Diff: A Fast Change Detection Algorithm for XMLDocuments, http ://www .cs.wisc.edu/ yuanwang/xdiff.html.

12. ZHANG K., A Constrained Edit Distance Between Unordered Labeled Trees, Algorithmica, 1996.

Статья представлена к публикации членом редакционной коллегии Г.Н. Каляновым

i Надоели баннеры? Вы всегда можете отключить рекламу.