Принцип работы HTML-конвертора




 

Рассмотрим в качестве примера следующее подмножество HTML-языка, которое может быть задано следующими определениями:

 

HTML-text:: = <HTML> HEAD BODY </HTML>

HEAD:: = TITLE{HEAD}| META{HEAD}| LINK{HEAD}…

TITLE:: = <TITLE> строка </TITLE>

META:: = <META name="KEYWORDS" content="строка">

KEYWORDS:: = …

BODY:: = <BODY> HTML-BODY </BODY>

HTML-BODY:: = PARAGRAPH{HTML-BODY} | TABLE {HTML-BODY} | LIST{HTML-BODY} | ANCHOR{HTML-BODY} | …

PARAGRAPH:: = <P> текст </P>

TABLE:: = <TABLE> TABLE-CELLS </TABLE>

TABLE-CELLS:: = STROKA{TABLE-CELLS} | …

STROKA:: = <TR> CELL </TR>

CELL:: = <TD> текст </TD>

LIST:: = <UL> LIST-ATOM </UL>

LIST-ATOM:: = …

ANCHOR:: = <A HREF=LINK> TEXT </A>

TEXT:: = …

LINK: = …

 

Синтаксическая диаграмма, соответствующая этим правилам выглядит следующим образом:

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

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

- каждому концепту из левой части BNF-определения ставим в соответствие имя фрейма-прототипа;

- альтернативам из правой части BNF-определения при этом должны соответствовать имена слотов этого фрейма;

- для концептов-нетерминалов соответствующий слот должен иметь тип frame;

- для концептов-терминалов соответствующие слоты будут, как правило, иметь тип numb или string;

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

После применения данных правил к BNF-определениям языка HTML получим следующее множество фреймов-прототипов:

 

[html is_aprototype, if_added HTML();

HEADframe, restr_by head;

BODYframe, restr_by body ];

[head is_aprototype, if_added HEAD();

BODY{frame}, restr_by one_of {title, meta, …}];

[title is_aprototype, if_added TITLE();

BODYstring ];

[meta is_aprototype, if_added META();

BODYstring ];

………………….

[body is_aprototype, if_added BODY();

SENT{frame}, restr_by one_of {header, paragraph, table, …}];

[paragraph is_aprototype, if_added PARAGRAPH();

[LIST is_aprototype; ATOM{frame}, if_added LI() ];

BODYframe, restr_by text];

[table is_aprototype; if_added TABLE();

TAB{frame}, restr_by one_of {stroka,…};]

[stroka is_aprototype, if_added TR();

CELLS{frame}, restr_by one_of{cell,…}];

[cell is_aprototype, if_added TD();];

……………………

[anchor is_aprototype;

BODYframe, restr_by text];

……………………

[link is_aprototype;

URLframe, restr_by one_of {http,ftp,…}];

MAILframe, restr_by mail];

[url is_alink; without_slot MAIL];

[http is_aurl, if_added HTTP();

SERVERstring;

DIR{string};

FILEstring];

[ftp is_aurl, if_added FTP();

SERVERstring;

DIR{string};

FILEstring];

…………………………

 

В соответствии с приведенными фреймами-прототипами и синтаксическими диаграммами, можно специфицировать процедурную часть конвертора как систему демонов, присоединенных к фреймам или к их слотам.

Спецификация одного из таких демонов представлена ниже на языке Java:

 

public class HTML extends FramePrototype {

HEAD head=null;

BODY body-null;

………….

String keyword;

 

Public void HTML (String name) {

Super (name);

keyword=getToken();

if (keyword.compareTo (“<HTML>”) = =0 {

head = new HEAD (getNewName());

body = new BODY (getNewName());

};

keyword = getToken ();

if (keyword.compareTo (“</HTML>”)= =0) return;

}

…………………

Public void (String nam) {

Super (name);

Keword=getToken();

If (keyword compareTo (“<BODY>”) = = 0 {

paragraph = new PARAGRAPH (getNewName());

header = new HEADER (getNewName());

table = new TABLE (getNewName());

};

keyword = getToken ();

if (keyword compareTo (“</BODY>”) = = 0) return;

}

…………………………..

}

 

По существу, такой демон является конструктором класса HTML, а запуск конвертора осуществляется с помощью оператора создания нового объекта этого класса:

HTML currPage = new HTML (get_new_name());

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

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


Список использованных источников:

 

1) Т.А. Гаврилова, В.Ф. Хорошевский «Базы знаний интеллектуальных систем», учебник, Санкт-Петербург, «Питер», 2001

2) www.citforum.ru

3) www.bur.oivta.ru

4) www.analyst.ru



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-06-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: