Принцип работы 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 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (221)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |