УДК 004
А. А. чеснавский
Московский инженерно-физический институт (государственный университет]
Каширское шоссе, 31, Москва, 115409, Россия E-mail: [email protected]
семантическое отслеживание изменений на веб-сайтах
Данные на многих сайтах изменяются с высокой скоростью. Это дни, а иногда минуты и даже секунды. В ряде случаев необходимо обеспечить обнаружение изменений на веб-страницах. Например, биржевому брокеру необходима информация об изменении цены на определенные акции. Ручной поиск изменений может быть времяемким и неэффективным, тогда как автоматический поиск изменений предоставит всю необходимую информацию. Еще одним примером может быть поиск информации о новых предложениях по лоту на аукционе.
В настоящее время существует довольно большое количество алгоритмов обнаружения изменений (в том числе и для иерархических данных), таких как MMDiff, XMDiff, HtmlDiff и ряд алгоритмов для поиска изменения в плоских данных, которые обычно отображают изменения в терминах строках и столбцов исходного документа. Другими словами, обычно результатом работы подобных алгоритмов является сообщение вида: «Строка N в документе A отличается от строки N в документе B», что на самом деле не является интуитивно понятным результатом в контексте иерархических данных и документов HTML.
Такие алгоритмы, как MMDiff генерируют более значимые результаты для иерархических данных нежели, их аналоги для анализа изменений в плоских документах, и могут выглядеть следующим образом: «Значение узла A было изменено на B». Однако эти алгоритмы, к сожалению, не применимы для HTML-документов из-за того, что данные и отображение данных являются частями одного и того же документа.
Рассмотрим пример HTML-документа [Ragget et al., 1998]:
<TABLE BORDER>
<CAPTION>A test table with merged cells.<CREDIT>(T.Berners Lee/WWWC,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>
Введение
File Edit View Favorites Tools Help
A test table with merged cells.(T.Berners Lee/WWWC,1995.)
Average Red height weght eyes
females 1.7 10.002 43%
jfc Computer I Protected Mode: Ofl ^ 100%
Рис. 1. Пример таблицы
15Б1\| 1818-7900. Вестник НГУ. Серия: Информационные технологии. 2007. Том 5, выпуск 2 © А. А. Чеснавский, 2007
Предположим, что значение 40 % в последней колонке изменяется на 50 %. Это означает, что значение процента красных глаз у мужчин изменилось с 40 % на 50 %. Для того чтобы технически осуществить данное изменение, нужно в HTML-коде в пятой строке 40 % заменить на 50 %. Как уже говорилось выше, при анализе изменений сообщение об изменении в пятой строке было совсем неинформативным. Даже структурированное описание изменения в HTML коде, основанное на HTML-грамматике, такое как «TABLE.TR.TD.40%» изменено на «TABLE.TR.TD.50%» не является достаточно информативным, и с его помощью тяжело отследить реальное изменение процента красных глаз у мужчин. Подобные проблемы могут быть успешно разрешены с помощью алгоритма семантического отслеживания изменений (АСОИ).
АСОИ отслеживает изменения, которые мы назовем семантическими изменениями, в HTML-документах. Используя описанный выше пример, АСОИ определил бы изменения, как «Males.‘Red eyes’ изменен с 40 % на 50 %». Особенность АСОИ состоит в адаптации понятия семантических изменений для отслеживания изменений в HTML-документах. В противоположность другим хорошо спроектированным полуструктурированным данным или XML-документам, путь между корневой вершиной и листовым узлом в дереве анализа HTML документа (например, «TABLE.TR.TD.40%») не обязательно описывает значение самого узла. так как HTML определяет к тому же и представление данных. В отличие от HTML в хорошо структурированных документах путь между вершиной и листовым узлом в основном информативен и значим. Более того, XML требует, чтобы каждый элемент был закрытым, в то время как закрывающие теги у некоторых HTML-элементов могут отсутствовать или быть необязательными, что приводит к сложностям в разборе (parsing) HTML-документов. В результате из-за этих отличий получение информации из HTML-документов требует дополнительных знаний о внутренней структуре или предобработки исходных документов [Atzeni, Mecca, 1997] (что в реальной практике может быть недоступно), чего не нужно для работы АСОИ.
Обзор альтернативных подходов
На данный момент автору этой статьи не известны алгоритмы семантического анализа изменений HTML-страниц. Существующие алгоритмы ориентированы либо на анализ изменений в «плоских» документах, в XML-документах, либо на синтаксический анализ изменений в HTML-документах.
Так, одним из наиболее популярных инструментов для анализа изменений в «плоских» файлах является GNU утилита diff Эта программа выводит построчно изменения, сделанные в файле (для текстовых файлов). Работа diff основана на нахождении наибольшей общей подпоследовательности (англ. longest common subsequence , LCS) [Bergoth, 2005]. В целом задача нахождения наибольшей общей подпоследовательности является одной из классических задач информатики и применяется не только в таких утилитах, как diff, но и в биоинформатике. Если вкратце описать суть алгоритма, то последовательность Z является общей подпоследовательностью последовательностей X и Y, если Z является подпоследовательностью как X, так и Y. Требуется для двух последовательностей X и Y найти общую подпоследовательность наибольшей длины. Очевидно, что данный алгоритм не подходит для анализа иерархических, а тем более HTML-документов. Конечно, иерархические документы можно сериализовать и затем применить к ним утилиту diff, но это будет неэффективно. Вторую группу составляют алгоритмы, ориентированные на анализ изменений в иерархических документах, в частности в XML-файлах. Эти алгоритмы в большинстве случаев основываются на сравнении деревьев (благодаря тому, что иерархические документы представимы в древовидной форме). В 1979 г. Kuo-Chung Tai представил первый неэкспоненциальный алгоритм сравнения двух деревьев на основе расстояния редактирования [Tai, 1979]. До этого, в 1977 г. S. Selkow [1977] предложил довольно близкий к XML алгоритм преобразования деревьев - рекурсивный алгоритм поиска наибольшей общей подпоследовательности. Позже S. Chawathe [Chawathe et al., 1996; 1998; Chawathe, Garcia-Molina, 1997; Chawathe, 1999] предложил два алгоритма MMDiff и XMDiff (для основной и внешней памяти соответственно) для анализа изменений в упорядоченных деревьях, основанных на алгоритме Selkow. Если рассматривать неупорядоченные деревья, то задача становится NP-сложной и необходимы дополнительные ограничения для
сравнения двух деревьев. Так, можно выделить алгоритмы K. Zhang [1996] и X-Diff \ созданные для решения этой задачи. Еще одной утилитой, достойной внимания является DeltaXML (по мнению ряда аналитиков - одна из лучших утилит для анализа изменений в XML-документах [Cobena et al., 2002]). Эта утилита использует алгоритм, основанный на поиске наибольшей общей подпоследовательности и обладает линейной сложность. Если говорить про анализ изменений на HTML-страницах, то практически единственной на сегодняшний день утилитой является HtmlDiff. HtmlDiff рассматривает HTML-документ как последовательность токенов, которые формируются на основе разметки и текста. В основе HtmlDiff лежит взвешенный алгоритм поиска наибольшей общей подпоследовательности. Результатом работы этой утилиты является синтаксический анализ отличия между двумя HTML-документами. На основе HtmlDiff создан ряд других утилит для анализа изменений: AT&T Internet Difference Engine, CS-HTMLDiff.
В целом существует довольно ограниченное число утилит и соответствующих алгоритмов, подходящих для анализа изменений в иерархических документах. Если же рассматривать класс алгоритмов для анализа изменений в HTML-документах, то все известные автору алгоритмы ориентированы на синтаксический анализ изменений, что имеет невысокую применимость в более общей задаче веб-клиппинга из-за того, что необходимо прежде всего анализировать значимые изменения на веб-страницах.
Описание алгоритма семантического отслеживания изменений на веб-страницах
Итак, иерархически структурированные данные - это набор данных D, в котором каждый неделимый элемент формирует узел в соответствующем дереве T, где T представляет данные иерархии D. Полуструктурированные данные, представленные в HTML / XML-доку ментах, и такие логические сущности, как файлы и папки, являются типичными примерами иерархических данных. Мы представляем иерархические данные как ориентированное дерево, где есть дуга от узла v2 к узлу vl, если vl - это прямой контейнер v2 в иерархии данных. Этот тип отношений может быть легко найден в любом элементе контейнерного типа в HTML/ XML или структуре папка - подпапка / файл в файловой системе. Рассмотрим понятие ветви в иерархии данных.
Определение 1. Допустим, задано ориентированное дерево T. Ветвью T называется путь от листового узла vn к корневой вершине vl дерева T, обозначаемый v,v2,...,vn (n $ l), где каждый узел отделен точкой от смежного узла и vt является предком vi +1 (l # i # n — l). Любой связный подпуть ветви, который включает листовую вершину, т. е. v,v,. + 1,...,vn (l # i # n) называется частичной ветвью в дереве T и обозначается без начальной точки. Кроме того, для данной ветви v1,...,vn, v1,...,vt — 1 называется контекстомvt (l # i # n).
Запись A.(Al,A2,...,An), называемую составной ветвью, обозначим (A.A1, .AA2,....A An), где каждая .AAt. (l # i # n) является ветвью. Более того, если существует более одного узла от одного родительского узла о («братья») , мы будем каждый узел отделять один от другого суффиксом, т. е. о[1], о[2] и т.д., согласно порядку их появления сверху вниз и слева направо в исходном документе.
АСОИ состоит из трех шагов:
- конструирование семантических иерархий (деревьев) любой пары данных HTML документов;
- идентификация ветвей в результирующих деревьях и удаление идентичных;
- определение изменений одного дерева относительно другого на основе сравнения каждой из оставшихся ветвей.
HTML-документ состоит из одной или более логических секций, которые:
- являются равными друг другу, например Section 1, Section 2, и т. д.;
- одна секция структурно включает другую, например Section 1 и Section 1.2;
- две секции не являются равными друг другу, и одна из них не включает другую, например Section 1.3 и Section 4.
1 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.
Наша задача - определить семантическую иерархию секций в HTML-документе, используя различные HTML-теги. Как уже было сказано выше, HTML был создан не только для определения, но и для отображения данных и, таким образом, большинство HTML-документов не способствуют организации компонентов HTML в секции или блоки согласно иерархии. Таким образом, более детально, наша первая задача заключается в идентификации, какие HTML-теги могут быть использованы для конструирования иерархической структуры HTML-документов (тип 1), а которые служат для представления данных (тип 2). Список тегов с разделением по типам можно найти в таблице:
группы HTML тегов
Конструирование семантической иерархии для нетабличных данных состоит из двух шагов. На первом шаге все теги типа 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.
- Создать корневой узел V иерархии S из #PCDATA из элемента TITLE. Элемент TITLE, который является обязательным для любого HTML документа и, согласно спецификации HTML, содержит описание документа
- Создать иерархию KEYWORDS ^ «список ключевых слов» из любого тега META в виде <META NAME=”keywords” VALUE=”list_of_keywords”>. Присоединить иерархию к Vr и получить V ^ KEYWORDS ^ “список ключевых слов”. Вообще, META является опциональным и предоставляет произвольное количество ключевых слов, каждое из которых релевантно исходному документу.
- Создать иерархию ADDRESS ^ text1 text2 text3 ^ HREF= “link”, если элемент ADDRESS в форме <ADDRESS>text 1<A HREF= “link”> text2 </a> text3</address>, где text1 и text3 может быть пустым. Создать иерархию ADDRESS ^ text вместо предыдущего варианта, если элемент ADDRESS в форме <ADDRESS> text </ADDRESS> и присоединить к иерархии V. Отметим, что элемент ADDRESS является опциональным и если он существует, он должен быть потомком элемента BODY.
- Для всех оставшихся элементов HTML-документа применять следующее: для HTML-элемента в форме <t1> #PCDATA <t2> .. ..</t2></t1>, где t1 (t2 соответственно) - название элемента HTML, создать иерархию #PCDATA ^ sh, где sh - семантическая иерархия, полученная из <t2>.</t2>. Когда после #PCDATA идут другие HTML-теги, это обычно свидетельствует о том, что данные включены в теги. Отсюда мы полагаем, что #PCDATA содержит данные. Данные ветви в составном виде: ...I0 (I1 ..dl, I2 ...d2,..., In ...dn), если dl...dn являются #PCDATA ...I0 (Ifd, I fd2,In ...dn,...), если dn - единственная таблица в In ...dn, где I (0 < i < n)
- элемент HTML. Создаем иерархию d ! dn (t < I < N) если I & In и Ik ! In, для любого k (i + 1 < k < n). Присоединить дугу от корня для каждой сконструированной иерархии к V Vr.
Это правило говорит о том, что для данных (d), заключенных в dn, мы создаем иерархическую связь между ними. Если dn является таблицей, то используется заглушка TABLE in d ^ TABLE, которая затем будет заменена на корневой элемент семантической иерархии соответствующей таблицы. Условие, что dn является единственной таблицей в In ...dn, подразумевает, что эта таблица есть внешняя таблица в этой ветви.
Рассмотрим табличные элементы HTML. Среди табличных элементов TR определяет число строк, тогда как TH и TD определяют число столбцов в HTML-таблице. Элемент TH используется для задания одного или более заголовков. Элемент TD используется для внесения данных в ячейки таблицы. Будем в дальнейшем называть данные в элементах TD-табличными данными в отличие от данных, содержащихся в элементах TH, которые будем называть заголовками.
Типовая HTML-таблица имеет как минимум один столбец-заголовок в верхней части таблицы и как минимум одну строку-заголовок в левой части. Такой тип таблиц мы назовем строчно-столбцовым. Другой тип таблицы содержит как минимум один столбец-заголовок (одну строку-заголовок) и называется в этом случае столбцовым (строчным соответственно) типом таблицы. Заголовки в строчных и столбцовых таблицах задают схему таблицы. Для любых таблиц, которые не имеют элементов TH, в ходе анализа было выявлено, что первая строка или столбец используется как заголовок.
Среди табличных элементов два атрибута TH и TD, ROWSPAN и COLSPAN играют существенную роль в определении иерархии HTML-таблиц. Для иллюстрации рассмотрим пример, приведенный выше (см. рис. 2). В данном примере наблюдается различное число строк и столбцов, что затрудняет процесс корреляции строк и столбцов. Когда TH или TD включает ROWSPAN = «n» (COLSPAN = «n» соответственно), связанная ячейка распространяется на N столбцов вниз (N строк вправо соответственно)
Для определения семантической иерархии (SH), расширяющей синтаксическое дерево любой HTML-таблицы T, мы в первую очередь определяем иерархические зависимости данных в T. Как только иерархические зависимости определены, SH содержит только данные, и все теги исключены из T.
Семантическая иарархия HTML-таблицы определяется согласно нотации псевдотаблицы, так как свойства псевдотаблицы легки для восприятия. Псевдотаблица может рассматриваться как особый тип HTML-таблицы и может быть использован для выражения строчностолбцовых, строчных и столбцовых таблиц. Общая схема построения семантической иерархии - это в первую очередь отображение таблицы T на псевдотаблицу и затем получение из нее семантической иерархии.
Определение 2. Псевдотаблицей T = $(а11,...,aln),(a2l,...,a2n),...,(aml, ...,amn)j со столбцами-заголовками С1, ., Cn и заглавием (caption) C является двумерная таблица, где заголовок, каждый столбец-заголовок и данные ячейки a9 (l < i < m, 1 < j < n) могут быть нулевыми. Кроме того, akl ! an если к ! 1 (1 < к, 1 < m).
Согласно спецификации, HTML-таблица содержит по крайней мере один элемент CAPTION. Если CAPTION определен для HTML-таблицы, он становится заголовком C соответствующей псевдотаблицы. В противном случае мы присваиваем заголовку значение «TABLE». Оно служит заглушкой, которая в итоге будет удалена.
HTML-грамматика определяет иерархию HTML-документа отношением контейнер-содержимое между тегами и данными, что отлично от иерархии в псевдотаблице, поскольку в псевдотаблице нет тегов. Поскольку столбцы-заголовки и табличные данные могут быть нулевыми в псевдотаблице, рассмотрим особый тип отношений включения: в отношении контейнер-содержимое о1 ! о2 ! о3, где oi (l < i < 3) является любо заголовком, либо данными, отношение может быть редуцировано до о1 ! о3, если о2 является пустой строкой.
Определение 3. N-арная псевдотаблица T = $(а11, ., aln), (a2l, ., a2n), ., (aml, ., amn). со столбцами-заголовками Cl, ..., Cn и заглавием C, семантическая иерархия SH = (V, E, g) от T, обозначенная SHt, есть ориентированное дерево, где Vr ! V является корневой вершиной SHt, обозначенной C, и каждый узел v ! V, отличный от Vr обозначает непустой ajj (Cjсоответственно) 1 < i < m, 1 < j < n в T и помечен aij (Cj соответственно). E - конечное множес-
тво ориентированных дуг; и g: Е " V * V - функция такая, что v2 ! vl если g(е) = (^, v2) и Vr (с) ! С1 ! ал ! Су ! ау (1 < i < m, 2 < ] < п).
Т.к. заглавие псевдотаблицы Т содержит краткое описание того, для чего создана таблица, заглавие выбрано в качестве корневой вершины соответствующего SHt. В определении семантической иерархии SHI содержит поддеревья, имеющие корневыми вершинами at1 ...а1п (1 < i < m) с ограничением V(с) ! C1 ! a11 (1 < i < m). Это связано с тем, что строка может быть уникально идентифицирована от других строк по первому столбцу (т. е. aj1) в Т (см. определение 2). Рис. 3 иллюстрирует псевдотаблицу и соответствующую семантическую иерархию, сделанную на основе определения 3. Основная задача в конструировании псевдотаблицы - определить каждую строку, т. е. аа ...ап (1 < 1 < т) и столбец, т. е. а1у ...ат] (1 < у < п) из соответствующей HTML-таблицы.
Рис. 3. Семантическая таблица, соответстующая псевдотаблице T
Как уже говорилось выше, HTML-таблица может иметь различное количество столбцов в строках из-за использования атрибутов COLSPAN и ROWSPAN. Если элемент TH или TD содержит COLSPAN=”n”, соответствующая ячейка TH или TD расширяется на n столбцов и занимает, таким образом, n ячеек, включая текущую ячейку в текущей строке. Таким образом, можно считать, что вставляются n — 1 ячеек вправо от текущей ячеек и в них реплицируются данные текущей ячейки. ROWSPAN функционирует иначе. Если элемент TH содержит ROWSPAN=”n”, конкретная ячейка расширяется на следующие n — 1 строк и занимает n ячеек. В этом случае мы вставляем n — 1 ячеек ниже текущей ячейки и не реплицируем содержимое текущей ячейки h в каждую из вставленных ячеек, а только записываем h во вставленную N — 1 ячейку. Таким образом, h появляется только в ячейке n — 1, все остальные вставленные ячейки остаются пустыми. Это необходимо для сохранения корректных взаимосвязей табличных данных по всем строкам в столбцах, избегая повторения одного и того же заголовка, так как конкатенированные заголовки в столбце HTML таблицы преобразуются в заголовок столбца псевдотаблицы. Однако, если ROWSPAN содержится в TD, мы вставляем n — 1 новых ячеек ниже текущей ячейки TD, и реплицируем в них данные текущей ячейки для того, чтобы данные в каждой из n различных строк одного и того же столбца были одинаковыми. После того, как обработка COLSPAN и ROWSPAN прошла успешно результирующая таблица удовлетворяет определению псевдотаблицы.
Рассмотрим случаи вложенных таблиц. Если таблица T2 вложена в другую таблицу T1, T2 находится в элементе TD таблицы T1. Пусть S - семантическая иерархия T2 и пусть td будет элементом в T1, который содержит T2. Тогда, создадим d ! S если dпредшествует #PCDATA в td. В противном случае, S обрабатывается, как #PCDATA в td. Для конструирования семантической иерархии всего HTML-документа H, включающего в себя таблицу T, мы присоединяем дуги семантической иерархии T к семантической иерархии H по следующему правилу.
Дана иерархия d ^ TABLE полученная по правилу 4, и семантическая иерархия S таблицы T, связанной с TABLE. Заменяем d ^ TABLE так, что: d ! S, если S представлена в виде C. (...) или d ! cl,...,d ! cn, если Sпредставлена в виде TABLE(cl...,...,cn...), где C - CAPTION в T и cl ...cn - табличные данные T.
Если HTML-документ в теле BODY не имеет ничего кроме таблицы, исходящая дуга от семантической иерархии таблицы проходит к содержимому элемента TITLE документа H.
СИ
Рис. 4. Дерево 5
СО
,8 с ~ ,________________________________________________________________________________________________________________________
Рис. 5. Дерево S2
Теперь пришло время рассмотреть обнаружение изменений между двумя семантическими иерархиями, т. е. между двумя HTML документами. В качестве примера рассмотрим две семантические иерархии S1 и S2 (рис. 4, 5). За один обход дерева могут быть определены ветви дерева. Таким образом, ветви 51 и S2 идентифицированы 'X(1 < 1 < 5), (1 < у < 7)):
51 = # X = .а.Ъ./, х2 = .а.с.к, х3 = .a.c.g, х4 = .аЛ.к, х5 = .а.е.р};
52 = #у1 = .a.g.Ь,у2 = .а.с.к,у3 = .а.с^.Ь./,у4 = .а.й.с,у5 = .а.И.ё.И,у6 = .а.Н.е,у7 = .а.И.р-.
При определении отличий между двумя семантическими иерархиями 51 и 52 в первую очередь удалить ветви, имеющиеся в обоих иерархиях. После этого основная задача - определить, какие из оставшихся ветвей в 51 «скорее всего» изменились и стали ветвями в 52.
Пусть даны исходные ветви Ь1,...,Ьт и целевая ветвь Ь,. Рассмотрим критерии того, что ветвь Ь{ (1 < 1 < т) ближе других находится в Ь,:
Если для Ь нужно «меньше изменений», чтобы прийти к Ь,, чем другим ветвям. В этом случае мы полагаем Ь источником Ь,.
В случае когда любые две или более ветвей Ь1, Ь2, ., Ьт требуют тех же затрат для модификации в Ь ,, Ь выбирается, если Ь1 и Ь , имеют большее число совпадающих вершин по направлению к вершине, чем другие Ь] (1 < у < т, 1 !у).
Введем понятие взвешенной разницы (8) для измерения величины отличия (т. е. изменений) между двумя ветвями. С использованием 8 фиксируем следующие отличия.
Отличия около корневых вершин в Ь1 и Ь2 более значимы, нежели отличия около листьевых вершин. Это связано с тем, что корень иерархии данных определяет частный класс данных, в то время как листьевые вершины иерархии данных - это элемент данных, который принадлежит классу или подклассу корня
Рассмотрим пример: Ь1 = НазваниеКниги. ’Мертвые души’, Ь2 = НазваниеКниги. ’Война и Мир’, Ь3 = НазваниеФильма. ’Весна на Заречной улице’. Все указанные ветви различны, но мы считаем, что Ь1 «более отлична» от Ь3, нежели от Ь2, так как Ь1 и Ь2 содержат названия книг, а Ь3 название фильма.
Порядок между вершинами в Ь1 и Ь2 является существенным. Если Ь1 и Ь2 имеют идентичный набор вершин, но они по-разному упорядочены, эти ветви считаются различными.
Определение 4. Пусть дана ветвь Ь = .у ...у. Вес вершины vj = (21) — 1 (1 < 1 < п).
Для вычисления взвешенной разницы между любыми двумя ветвями будем рассматривать каждую ветвь как упорядоченное множество с дубликатами, т. е. множество, которое может содержать повторяющиеся элементы и упорядоченность между элементами имеет значение.
К примеру, ветвь .a.b.c.d представляется как "a,b,c,d} и является отличной от "a,b,c,d,b}. Для двух множеств с дубликатами M = {a, ...,am} и M = {b, ...,bn} определим следующие операции:
M + м2 = eb f, en, где каждый принадлежит как M, так и M2 и для любого i, J # i # n, e предшествует e + j в M и M2.
Mj- M2 = {e|e G M,e G M + M2}.
Определение 5 Пусть даны две ветви: b = .ц...um и b = .у...vn. Тогда взвешенная разница 8 для bj и b2 вычисляется следующим образом:
8(bj, 62) = !iWui + !iWvi, при условии, что u G M - Mb) и Vj G {Mb2 - Mb), где Wui (Wvi) -вес ui (vj соответственно) и Mb (Mb) - упорядоченное множество с дубликатами Mb (Mb соответственно).
Пример: Рассмотрим деревья Sj и S2. 8(х,yj) = 0,25, тогда как MXi — Mу = 0, M^ — MXi = {g}
и вес g = (22) - .
На третьей стадии происходит сравнение оставшихся ветвей в Sj с каждой оставшейся ветвью S2 на основе вычисления взвешенной разницы. Если ветвь x в Sj «наименее отлична» от у в S2, тогда считаем ветвь, что ветвь у - есть измененная х. Если несколько ветвей имеют одинаковые характеристики отличия - можно выбрать любой из них.
заключение
В данной статье предложен алгоритм семантического отслеживания изменений (АСОИ), который позволяет выявить изменения данных в теле HTML-документа, а не изменений разметки документа. Особенностью данного алгоритма является то, что не требуется проводить предобработку документа и знать внутреннюю структуру HTML-страницы. АСОИ может быть либо использован как самостоятельный инструмент анализа изменений в больших документах, либо стать компонентом семантического анализа изменений HTML-страниц для подсистемы веб-клиппинга системы интеграции приложений.
список литературы
Atzeni P. , Mecca G. Cut and Paste // In Proc. of the 16th Intl. Symp. on Principles of Database Systems. May, 1997. P. 144-153.
Bergroth L., Hakonen H. A Survey of Longest Common Subsequence Algorithms, 2005.
Chawathe S. Comparing Hierarchical Data in External Memory. VLDB, 1999
Chawathe S., Abiteboul S., Widom J. Representing and querying changes in semistructured data. ICDE, 1998.
Chawathe S., Garcia-Molina H. Meaningful Change Detection in Structured Data. SIGMOD, Tuscon: 1997. P. 26-37.
Chawathe S., Rajaraman A., Garcia-Molina H. etal. Change detection in hierarchically structured information // SIGMOD. 1996. Vol. 25. No. 2. P. 493-504.
Cobena G., Abdessalem T., Hinnach Y. A comparative study for XML change detection, Institut National de Recherche en Informatique et en Automatique. Rocquencourt, France, July 2002.
Raggett D., Hors D., Jacob S. I. HTML 4.0 Specification - W3C Recommendation: http://www. w3.orglTR/REChtml40, April, 1998.
Selkow S. The tree-to-tree editing problem // Information Proc. Let. 1977. P. 184-186.
Tai K. The tree-to-tree correction problem // Journal of the ACM. 1979. Vol. 26 (3). P. 422-433.
Zhang K. A Constrained Edit Distance Between Unordered Labeled Trees // Algorithmica. 1996.
Материал поступил в редколлегию 15.09.2007