Диссертация (1137159), страница 29
Текст из файла (страница 29)
В алгоритме используется флагДоп_Обработка, необходимый для анализа специфической структуры запроса,характерной для вопроса описания функций вида «Какие обязанности восновном возложены на X?», где часть запроса «в основном» не являетсязначимой.Вход:Запрос — массив слов поискового запроса, состоящий из элементов типаРасш_Слово.i — стартовый индекс, с которого начинается проход по массиву Запрос.
Взапросе является индексом следующего после типизирующего слова элемента.188Словарь — словарь терминаторов. Используется для исключения незначащихэлементов массива Запрос.Тип_Запр — тип запроса.Выход:Результат — массив элементов типа Расш_Слово, трактуемый как объектинтереса поискового запроса.Алгоритм «Поиск_ОИ_Справа»начРезультат := пустой_массивДоп_Обработка := истинаz := 0пока Запрос(i) <> nil циклесли ! Вхождение_Слова_В_Словарь(Запрос(i)::Баз_Формы,Словарь)если Тип_Запр == ОП_ФУН И Доп_Обработкаесли Запрос(i)::Содержит_Стем(«возлагать») И Запрос(i+1) <> nilесли Запрос(i+1)::Содержит_Стем(«на»)Результат := пустой_массивДоп_Обработка := ложьz:=0кесликеслииначеРезультат(z) := Запрос(i)z := z+1кеслииначеРезультат := пустой_массивz:=0189кеслиi := i+1кциклконАлгоритм обработки левой части запроса как дополнительного объектаинтересаВнешняя спецификация алгоритма «Поиск_Доп_ОИ_Слева»Назначение:Алгоритм предназначен для обработки части запроса, предшествующейтипизирующему слову, с целью выявления дополнительных объектов интереса.Данная обработка необходима для извлечения значимой дополнительнойинформации из запросов вида «В какой отрасли используется красный лазер?»,где использование лазера уточняется в левой части запроса: «в какой отрасли»,т.
е. важен не столько лазер и его использование, сколько отрасль, в которой ониспользуется. Приведем пример: «Как в металлургии в основном применяетсяХ?», «Как, главным образом, в Европе используется газ?» и т.д.Вход:Запрос — массив слов поискового запроса, состоящий из элементов типаРасш_Слово.f — индекс элемента, которым завершается проход по массиву Запрос. Взапросе является индексом предшествующего типизирующему слову элемента.Словарь — словарь индикаторов, имеющих тип ДОП_ТР. Используется дляисключения незначащих элементов массива Запрос.Тип_Запр — тип запроса.Выход:Результат — массив элементов типа Расш_Слово, трактуемый как объектинтереса поискового запроса.Алгоритм «Поиск_Доп_ОИ_Слева»начРезультат := пустой_массив190z := i := 0пока Запрос(i) <> nil И i < f циклесли Запрос(i)::Содержит_Стем(«в») И Запрос(i+1) <> nilесли Вхождение_Слова_В_Словарь(Запрос(i+1)::Баз_Формы, Словарь)i := i+1кеслииначеесли ! Вхождение_Слова_В_Словарь(Запрос(i)::Баз_Формы,Словарь)Результат(z) := Запрос(i)z := z+1кесликеслиi := i+1кциклконАлгоритм разбора структуры запроса в общем случаеВнешняя спецификация алгоритма «Разбор_Общего_Случая»Назначение:Алгоритм предназначен для разбора большей части запросов, имеющихобщую структуру.
В алгоритме используются обращения к подалгоритмам,описанным выше: «Поиск_ОИ_Справа» и «Поиск_Доп_ОИ_Слева». Передачавходных параметров в данные алгоритмы будет производиться в скобках, посленазвания алгоритма в том же порядке, в котором они описаны в спецификацияхсоответствующих алгоритмов. Рассмотрим алгоритм разбора запросов с общейструктурой.Вход:191Запрос — массив элементов типа Расш_Слово, представляющий входнойзапрос.Тип_Запр — тип запроса.Словарь_Доп_Слов — словарь допустимых слов-индикаторов.Словарь_Запр_Слов—словарьнезначимыхслов-индикаторов,т.
е.продукций пустых цепочек.Выход:Отличит_Слово — слово-индикатор, по которому был определен типзапроса. Имеет тип Расш_Слово.Объект_Интереса — массив элементов типа Расш_Слово, представляющийобъект интереса. Объект интереса может состоять из нескольких слов, поэтомувсе они должны быть возвращены как значимые.Доп_Объект_Интереса — дополнительный значимый объект интереса,влияющий на смысл запроса. Например, в запросе «Как в металлургииприменяют газ?», таким объектом будет являться слово «металлургия», потомучто запрашивается информация о применении газа именно в данной отрасли.Внутренние переменные:Словарь_Доп_Запр_Слов — словарь дополнительных продукций пустыхцепочек, специфичных для запросов типа ОП_ПРИМ.Алгоритм «Разбор_Общего_Случая»начi := 0пока Запрос(i) <> nil циклеслиВхождение_Слова_В_Словарь(Запрос(i)::Баз_Формы,Словарь_Доп_Слов)Отличит_Слово := Запрос(i)Объект_Интереса := Поиск_ОИ_Справа(Запрос, i+1, Словарь_Запр_Слов, Тип_Запр)если Тип_Запр == ОП_ПРИМСловарь_Доп_Запр_Слов := Словарь::Получить_Словарь(192ОП_ПРИМ,ДОП_ТР))Доп_Объект_Интереса :=Поиск_Доп_ОИ_Слева(Запрос,i+1,Словарь_Доп_Запр_Слов,Тип_Запр)кесливыходкеслиi := i+1кциклконАлгоритмразбораианализазапросовстипом«Описаниепринадлежности»Внешняя спецификация алгоритма «Разбор_Запр_ОП_ПРИН»Назначение:Алгоритм предназначен для разбора запросов с типом ОП_ПРИН.
Приразборе учитываются дополнительные объекты интереса для запросов вида «Ккакой группе млекопитающих относится слон?». В алгоритме используетсяфлаг Объект_Найден, сигнализирующий у том, что основной объект интересаобнаружен.Вход:Запрос — массив элементов типа Расш_Слово, представляющий входнойзапрос.Тип_Запр — тип запроса.Словарь_Доп_Слов — словарь допустимых слов-индикаторов.Словарь_Запр_Слов—продукций пустых цепочек.словарьнезначимыхслов-индикаторов,т. е.193Словарь_Доп_Указателей—словарьслов-индикаторов,являющихсядополнительными указателями. Примеры: «относиться», «принадлежать»,«входить».Выход:Отличит_Слово — слово-индикатор, по которому был определен типзапроса. Имеет тип Расш_Слово.Объект_Интереса — массив элементов типа Расш_Слово, представляющийобъект интереса.
Объект интереса может состоять из нескольких слов, поэтомувсе они должны быть возвращены как значимые.Доп_Объект_Интереса — дополнительный значимый объект интереса,дополняющий смысл смысл запроса. Например, в запросе «В какой классвеществ входит серная кислота?», таким объектом будет являться слово«вещество», потому что запрашивается информация о принадлежности сернойкислоты к классу веществ.Алгоритм «Разбор_Запр_ОП_ПРИН»начОбъект_Найден := ложьi := o := a := 0пока Запрос(i) <> nil циклеслиВхождение_Слова_В_Словарь(Запрос(i)::Баз_Формы,Словарь_Доп_Слов)Отличит_Слово := Запрос(i)кеслиj := i+1пока Запрос(j) <> nil циклеслиВхождение_Слова_В_Словарь(Запрос(j)::Баз_Формы,Словарь_Доп_Указателей)Отличит_Слово := Запрос(j)Объект_Найден := истинаиначе194если Объект_Найден == ложьесли ! Вхождение_Слова_В_Словарь(Запрос(j)::Баз_Формы,Словарь_Запр_Слов)Доп_Объект_Интереса(a) := Запрос(j)a := a+1кеслииначеесли ! Вхождение_Слова_В_Словарь(Запрос(j)::Баз_Формы,Словарь_Запр_Слов)Объект_Интереса(o) := Запрос(j)o := o+1кесликесликеслиj := j+1кциклi := i+1кциклконАлгоритм разбора и анализа запросов с двумя объектами интересаВнешняя спецификация алгоритма «Опр_2ОИ»Назначение:Алгоритм предназначен для разбора запросов, имеющих два объектаинтереса.Таковымивопросамиявляютсявопросыописанияобщиххарактеристик и вопросы описания различий.
В алгоритме используется флагПервый_Объект_Найден, для индикации ситуации, когда обнаружен один изобъектов интереса.Вход:195Запрос — массив элементов типа Расш_Слово, представляющий входнойзапрос.Тип_Запр — тип запроса.Словарь_Доп_Слов — словарь допустимых слов-индикаторов.Словарь_Запр_Слов—словарьнезначимыхслов-индикаторов,т. е.продукций пустых цепочек.Словарь_Союзов— словарь слов-индикаторов, являющихся соединяющимидля двух объектов интереса (обычные союзы).Выход:Отличит_Слово — слово-индикатор, по которому был определен типзапроса. Имеет тип Расш_Слово.Объект_Интереса1—массивэлементовтипаРасш_Слово,представляющий первый объект интереса.
Объект интереса может состоять изнескольких слов, поэтому все они должны быть возвращены как значимые.Объект_Интереса2—массивэлементовтипаРасш_Слово,представляющий второй объект интереса.Алгоритм «Опр_2ОИ»начПервый_Объект_Найден := ложьi := f := s : = 0пока Запрос(i) <> nil циклеслиВхождение_Слова_В_Словарь(Запрос(i)::Баз_Формы,Словарь_Доп_Слов)Отличит_Слово := Запрос(i)кеслиj := i+1пока Запрос(j) <> nil циклеслиЗапрос(j-1)::Содержит_Стем(«общий»)Запрос(j)::Содержит_Стем(«черта»)начать цикл с j+1И196кеслиесли Вхождение_Слова_В_Словарь(Запрос(j)::Баз_Формы,Словарь_Союзов)Первый_Объект_Найден := ложьначать цикл с j+1кеслиесли ! Первый_Объект_Найденесли ! Вхождение_Слова_В_Словарь(Запрос(j)::Баз_Формы,Словарь_Запр_Слов)Объект_Интереса1(f) :=Запрос(j)f := f+1иначеОбъект_Интереса1 := пустой_массивf := 0кеслииначеесли ! Вхождение_Слова_В_Словарь(Запрос(j)::Баз_Формы,Словарь_Запр_Слов)Объект_Интереса2(s) :=Запрос(j)s:= s+1иначеОбъект_Интереса2 := пустой_массивs := 0кесликеслиj := j+1кциклi := i+1кцикл197i := 0если Первый_Объект_Найден И f == 0пока Запрос(i) <> nil циклесли ! Вхождение_Слова_В_Словарь(Запрос(j)::Баз_Формы,Словарь_Доп_Слов )если ! Вхождение_Слова_В_Словарь(Запрос(j)::Баз_Формы,Словарь_Запр_Слов)Объект_Интереса1(f) :=Запрос(i)f := f+1кеслииначевыход циклкеслиi := i+1кциклиначеесли ! Первый_Объект_НайденОбъект_Интереса2 := Объект_Интереса1Объект_Интереса1 := пустой_массивf := i := 0пока Запрос(i) <> nil циклесли ! Вхождение_Слова_В_Словарь(Запрос(j)::Баз_Формы,Словарь_Доп_Слов )если!Вхождение_Слова_В_Словарь(Запрос(j)::Баз_Формы,Словарь_Запр_Слов)Объект_Интереса1(f) :=Запрос(i)f := f+1кеслииначе198выход циклкеслиi := i+1кциклкесликесликонАлгоритм разбора и анализа запросов с типом «Описание особенностей»Внешняя спецификация алгоритма «Разбор_Запр_ОП_ОСОБ»Назначение:Алгоритм предназначен для разбора запросов с типом ОП_ОСОБ.
Приразборе учитывается первостепенный, второстепенный и дополнительныйобъекты интереса. Например, для запроса «Как работает Х в обстоятельствахY?»первостепеннымобъектомбудетX,второстепенным—Y,адополнительным слово «работает». Смысл выделения дополнительного объектаинтереса в том, чтобы уточнять о каких именно особенностях идет речь взапросе, а так же для различения запросов такого рода от запросов с типомОП_РАБ. Рассмотрим данный алгоритм.Вход:Запрос — массив элементов типа Расш_Слово, представляющий входнойзапрос.Тип_Запр — тип запроса.Словарь_Доп_Слов — словарь допустимых слов-индикаторов.Словарь_Запр_Слов—словарьнезначимыхслов-индикаторов,т.