Смекни!
smekni.com

Изобретание, проектирование, разработка и сопровождение) Том Интеллектуальные системы (Системы решения проблем)  Альберт Александрович Красилов (стр. 31 из 85)

Словари используются в качестве справочных таблиц пользователем для ручного контроля терминов, извлечения элементов словаря при составлении текстов знаний или запросов, интерпретации операций, печати результатов и для статистической оценки различных текстов. Инструментарий Интеллсист предусматривает выдачу в окне интерфейса словарей целиком или фрагментарно для реализации указанных приемов их использования. В процессе ввода знаний в БЗ или запросов словари пополняются, что отражается в показе словарей. Стандартные части словарей составляются при инициализации Интеллсист. Они возникают либо для учета особенностей СеГ, либо связаны с зарезервированными терминами понятий языка Лейбниц. Использование слов из состава зарезервированных терминов допустимо при формировании новых терминов.

7.2. Выделение терминов

Из лексем строятся термины и только термины, поскольку в соответствии с СеГ весь текст знаний или запроса состоит из стандартных или пользовательских терминов. Выделение или идентификация терминов относится к синтаксическому анализу. В связи с этим проблема выделения или идентификации терминов выступает отдельно от алгоритмов синтаксического анализа. Сущность проблемы состоит в следующем. Последовательность лексем расчленяется на термины по принципу максимума. Можно представить дерево «и-или», в котором «и» моделирует операцию катенации лексем, «или» моделирует альтернативу частям терминов. При рассмотрении последовательности лексем вначале выбирается альтернатива по первой лексеме, а затем используется операция катенации лексем до конца некоторой ветви дерева. При этом учитываются альтернативы для каждой лексемы и продолжение применения операции катенации, а также завершения операции идентификации по признаку конца некоторого термина. Наличие признака конца запоминается всегда, когда он встречается в процессе идентификации. Последнее запоминание является результатом процесса идентификации. Если признак конца не был заполнен, то объявляется ошибка о неопределенном термине. Такая процедура реализует быстрый поиск или быструю идентификацию и выполняет принцип максимума.

Только что описанный алгоритм идентификации терминов может привести к коллизии. Самым простым является следующий пример. Пусть определены термины Т такого вида: Т1 = А, Т2 = АА, Т3 = ААА. Тогда последовательность лексем А вида ААААААА будет идентифицирована как Т3 Т3 Т1. Этот вариант идентификации может быть неправильным, поскольку имеются альтернативные результата идентификации: Т1 Т1 Т1 Т1 Т1 Т1 Т1, Т2 Т2 Т2 Т1, Т2 Т1 Т2 Т2 и т.п. Здесь приведен академический пример, демонстрирующий коллизии. Пример назван академическим только в силу того, что он формален и весьма трудно осмысливаем. Вполне возможно, что и не существует подходящего смысла у таких текстов. Практика составления текстов знаний (например, в книгах) показала, что вероятность появления таких примеров весьма и весьма мала. Действительно, человеку трудно выделить вручную термины из аналогичной последовательности лексем и распознать смысл исходного текста. Однако, теоретически такие примеры возможны, например, при рассмотрении текстов ФЯ. Тем не менее, такой алгоритм с принципом максимума заложен в программы Интеллсист, что необходимо иметь в виду при разработке текстов знаний и запросов. Можно надеяться на то, что, если человек будет находиться в затруднительном положении при осмысливании текстов знаний или запросов с примерными особенностями, то он никогда не составит таких текстов для Интеллсист с такими особенностями.

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

Рассмотрение алгоритмов идентификации для большинства пользователей не имеет никакого значения. Они представляют интерес только для тех пользователей, которые по своей профессиональной деятельности связаны с различными словарями самых разнообразных лексем. К таким пользователям можно отнести программистов, лингвистов, статистиков и т.п. Для них важно использовать те БЗ, которые включают эффективные алгоритмы составления и использования различных словарей. Они могут сами вводить структурные объекты, моделирующие словари с различными свойствами, и строить алгоритмы идентификации с помощью словарей. Пример использования деревьев (специальных графов) в программах Интеллсист может оказаться полезным.

7.3. Перевод на ФЯ, синтаксический и семантический анализы

Второй этап трансляции текстов состоит из реализации алгоритмов синтаксического анализа. Если транслятор выполняет функцию проверки орфографии, то второго этапа достаточно. Если транслятор выполняет функции проверки грамматики или перевода текстов, то помимо синтаксического анализа необходимо выполнять и семантический анализ. Здесь рассматриваются особенности реализации таких видов анализа текстов в предположении, что лексический анализ и выделение терминов уже выполнены. При этом напомним, что указанные два алгоритма (лексический анализ и идентификация терминов) можно объединить программно или поэтапно в один алгоритм, если указанные трудности будут устранены или преодолены.

Смысл перехода от ЯПП или ФЯ к ФЯ обсуждался многократно. Будем считать, что трансляция текстов на ФЯ является обычным делом. Важно при этом еще раз подчеркнуть, что при том или ином переходе нельзя терять смысла, передаваемого текстом. Также частично обсуждались вопросы обнаружения синтаксических или семантических ошибок в текстах. Поэтому здесь рассматриваются только алгоритмические и организационные проблемы.

Грамматика ФЯ диктует метод реализации синтаксического анализа текстов. Для любого ФЯ можно составить граф языка, с помощью которого для данного текста можно проложить маршрут в графе, полностью соответствующий тексту. Если прокладка маршрута не удается, то обнаруживается синтаксическая ошибка. Эта мысль (см. гл.2) послужила основанием для применения интерпретатора МГР в реализации полного синтаксического анализа. Следует заметить, что размер (число вершин) графа языка определяет окончательный вывод по вопросу выбора алгоритма анализа. Например, граф языка Лейбниц (без учета подграфов грамматического разбора лексем) имеет около сотни вершин. В связи с этим альтернатива выбора МГР или прямого алгоритма анализа не возникает. При разработке Интеллсист испытывался и МГР, и прямой метод анализа (с помощью применения условных операторов ветвления в процессах грамматического разбора). Несколько предпочтительнее оказался метод МГР. При построении графа языка Лейбниц достаточно было рассматривать только одно понятие, а именно понятие логического выражения. Примерно такой же была ситуация выбора МГР или прямого метода в реализации лексического анализа. Там метод применения МГР оказался эффективнее прямого из-за символьного представления лексем, которые имеют значительный по объему граф языка всех лексем.

Для формализации семантики ЯПП или ФЯ к настоящему времени нет подходящих универсальных алгоритмов за исключением отдельных подалгоритмов, или частных алгоритмов. При наличии формализации синтаксический граф языка расширяется алгоритмами семантики, и используется МГР для формирования выходного или объектного текста. Поэтому во многих разработках трансляторов (транслятор ЯПП не является исключением) используется метод семантических подпрограмм для контроля контекстных условий и формирования фрагментов выходного текста на объектном языке. Всего для ЯПП построено около 150 семантических подпрограмм, включая общие для многих подпрограмм процедуры.

Семантический анализ тесно связан с синтаксическим анализом, он является составной частью семантических подпрограмм. Главной работой семантического анализа является проверка контекстных условий использования понятий синтаксиса. Проверка условий реализуется как составная часть семантических подпрограмм. Например, программы чтения текстов, записи атрибутов или формирования выходных текстов.

В процессе синтаксического анализа обнаруживаются синтаксические и семантические ошибки. Их число примерно равно числу семантических подпрограмм. Синтаксические ошибки обнаруживаются по тем же принципам, какие использовались в лексическом анализе. Если маршрут в графе языка, вершины которого связаны с грамматическими понятиями синтаксиса, укладывается «текст» из лексем, то ошибок не возникает, иначе идентифицируется синтаксическая ошибка. Среди этих ошибок имеются и концептуальные ошибки, которые связаны с правильностью построения или использования понятий. Некоторые смысловые ошибки также возникают и обнаруживаются семантическими подпрограммами.

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