Преобразование формы записи выражения
Разработка программы, осуществляющую преобразование постфиксной формы записи в префиксную, в среде логического программирования на языке Turbo Prolog 2.0. Особенности ее проектирования, реализации и тестирования в интеллектуальных диалоговых системах.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 07.12.2017 |
Размер файла | 302,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
"Пензенский государственный университет"
Кафедра "Математическое обеспечение и применение ЭВМ"
Пояснительная записка к курсовой работе
по дисциплине: "Системы искусственного интеллекта"
на тему: "Преобразование формы записи выражения"
Автор работы: Тарасеев А.В.,
группа 13ВИ 1
Руководитель работы: Михалев А.Г.
г. Пенза - 2016 г.
Содержание
Реферат
Введение
1. Использование естественного языка в интеллектуальных системах
1.1 Постановка задачи
1.2 Обучаемые системы представления и распознавания смысла в ЕЯ
1.3 Знания интеллектуальной системы о себе и способы представления этих знаний
1.4 Знания об источниках знания и о структуре правил
1.5 Знания системы о пользователе
1.6 Цели пользователя
1.7 Определение уровня общности/абстрактности (конкретности) ответа
1.8 Определение аспектов, интересующих пользователя
1.9 Общая схема анализа предложения
1.10 Морфологический анализ словоформ
1.11 Синтаксический анализ предложения
1.12 Семантический анализ предложения (СЕАП)
2. Практическая часть
2.1 Постановка задачи
2.2 Описание применения программы
2.2.1 Общая характеристика
2.2.2 Функциональное назначение
2.2.3 Описание логической структуры
2.2.4 Входные данные
2.2.5 Выходные данные
2.2.6 Используемые технические средства
Заключение
Список используемых источников и литературы
Приложения
Реферат
Пояснительная записка содержит 31 лист, 4 рисунка, 4 использованных источника.
Ключевые слова: естественный язык, интеллектуальная система, Turbo prolog, префиксная форма, постфиксная форма.
Объект разработки - программа преобразования формы записи выражения на языке Turbo Prolog 2.0.
Цель работы - разработать программу, осуществляющую преобразование постфиксной формы записи в префиксную.
Технология разработки - логическое программирование.
Результаты работы - готовая программа, осуществляющая преобразование постфиксной формы записи в префиксную.
Введение
Целью данной работы является создание готовой программы на языке Turbo Prolog 2.0, которая будет производить преобразование постфиксной формы записи в префиксную.
Данная работа разделена на две части. В первой части рассматривается использование естественного языка в интеллектуальных системах.
Вторая часть работы заключается в проектировании и реализации программы, а также ее тестирование.
1. Использование естественного языка в интеллектуальных системах
1.1 Постановка задачи
Реализация диалога с компьютером на естественном языке (ЕЯ) является одной из главных проблем, решаемых в разделе информатики, называемой обычно "Искусственный интеллект". Недаром тест Тьюринга, целью которого является оценка "качества" искусственной интеллектуальной системы, базируется на диалоге с компьютером.
Главной же проблемой при создании диалоговых систем с использованием ЕЯ является проблема распознавания смысла (семантики) предложений ЕЯ.
Кроме того, решение этой проблемы актуально и для решения чисто прикладных задач, таких как:
* обработка документов (поиск по смыслу, реферирование, рубрикация);
* разработка поисковых серверов для поиска информации в Internet с использованием запросов на естественном языке;
* разработка средств для обработки запросов на естественном языке к базам данных;
* разработка средств тестирования знаний с использованием вопросов с открытым ответом, в частности, в системах дистанционного образования.
Решением проблемы формализации и распознавания смысла предложений на естественном языке занимаются давно и зарубежные, и отечественные ученые.
Существует два подхода к анализу предложения на ЕЯ.
1. Синтаксически ориентированный или на основе детального синтаксического разбора предложения. Средствами синтаксического анализа вычленяются связанные понятия, которые объединяются в так называемые атомы смысла. Создание АС идет только на основе данного предложения, определение связанных понятий идет только на основе синтаксических правил.
2. Семантически ориентированный, в рамках которого задача анализа предложения ЕЯ рассматривается как задача распознавания смысла предложения на основе использования базы знаний (о языке, об участниках общения, о предметной области и т.п.).
Разбор предложения идет путем вычленения связанных понятий (атомов смысла) с помощью базы знаний. На втором плане стоит синтаксический анализ, с помощью которого вычленяются дополнительные АС, те, которые не были сгенерированы с помощью БЗ.
Таким образом, после анализа предложения на ЕЯ имеется некоторый базовый набор атомов смысла, с помощью которого система начинает / продолжает работать с базой знаний.
Синтаксически ориентированный анализ ЕЯ использует в том или ином виде описание грамматики языка (структуры языковых конструкций). При этом распознавание языковых конструкций и их структуры является основной решаемой задачей, а после ее решения распознается семантика распознанных конструкций. Для структурного описания языка применяются контекстно- независимые и контекстно-зависимые грамматики Холмского, расширенные сети переходов.
Синтаксически ориентированный анализ ЕЯ имеет существенные недостатки, ограничивающие возможности его применения, главными из которых являются следующие:
? в нем трудно отразить неоднозначность понимания смысла языковых конструкций (в зависимости от различных контекстов - предметной области, хода диалога, ролей участников и т.п.);
? в нем трудно отразить "живость" языка, т.е. его терпимость к искажениям и появлению новых словоформ и синтаксических конструкций.
Попытки борьбы с этими недостатками в рамках синтаксически ориентированного анализа приводят к появлению очень громоздких, медленных и не поддающихся сопровождению программ.
Поэтому, наиболее перспективным и развивающимся направлением обработки ЕЯ в настоящее время является семантически ориентированный анализ. В представлении знаний для семантически ориентированного анализа
предложений ЕЯ можно выделить следующие варианты знаний.
1. Набор синонимов. Использование синонимов позволяет при ответе на запрос учитывать не только те термины, которые непосредственно указаны в запросе, но и все другие слова, близкие к ним по значениям. Здесь в качестве АС используются слова и нет иерархии АС.
2. Иерархия терминов и понятий, создаваемая человеком.
3. Лингвистические правила. Разработчик создает систему лингвистических правил, которые используются для анализа или грамматического разбора текстовой базы данных. Этот метод анализа определяет ключевые слова и
понятия, объединяющиеся в базу знаний, которая отражает содержание конкретной базы данных. Затем база знаний используется для поиска и ранжирования групп родственных документов. Процесс грамматического разбора и создания базы знаний должен проводиться для каждой предметной области.
4. Использование ссылочных документов, в том числе обычных словарей и словарей терминов. Этот подход основан на смысловых значениях слов и называется семантической сетью. Как и словарь, семантическая сеть содержит атомы смысла, инкапсулирующие множество определений для каждого хранимого слова. Эти атомы смысла связаны между собой отношениями, при анализе предложения новые АС добавляются в семантическую сеть. Значения слов, наиболее подходящие для данного поиска, могут быть выбраны самим пользователем с целью повышения точности этого поиска. Подход на основе семантических сетей реально объединяет статистический поиск и поиск на основе базы знаний. При этом используются смысловые значения слов для определения и классификации отношений.
1.2 Обучаемые системы представления и распознавания смысла в ЕЯ
В системах для обработки естественного языка, обучаемых с использованием текстов или диалога на том же естественном языке, могут использоваться два подхода:
* Количественный;
* Качественный.
Количественный подход использует частотность появления слов в тексте.
Он часто используется в системах поиска документов по содержимому, в частности, в Internet. Этот подход не использует и не синтезирует представление семантики текста. Поэтому здесь он далее рассматриваться не будет.
Качественный подход предполагает на основе обрабатываемого текста (документа или вводимого в процессе диалога сообщения) формирование базы знаний о смысле текста, которая может затем использоваться для решения каких-либо задач (для поиска документов по смыслу, ответа на вопросы и т.п.).
При этом такие системы могут сильно отличаться друг от друга в зависимости от объема и глубины знаний, заложенных в нее априорно в виде базы знаний и/или алгоритмов обработки предложений естественного языка (его синтаксиса и семантики).
1.3 Знания интеллектуальной системы о себе и способы представления этих знаний
Знания системы о себе можно разделить на активные и пассивные. Под активными знаниями будем понимать знания, которые система использует в своей работе. Под пассивными знаниями подразумеваются сведения, известные системе, сообщаемые ею о себе, но не используемые в работе. Активные знания подразделяются на просто знания и метазнания. Под метазнанием А будем понимать активное знание, которым система "владеет", т. е. система "знает, что она знает А". Другими словами, система способна не только использовать знание А непосредственно, но она способна исследовать А, рассуждать о нем, абстрагировать его.
Пассивные знания включают сведения системы о себе, сообщаемые пользователю, впервые знакомящемуся с системой. Эти сведения целесообразно оформить в виде выдаваемых на дисплей инструкций. В связи с тем, что для систем реальной степени сложности инструкции могут оказаться весьма громоздкими, удобно снабдить инструкции оглавлением и предоставить пользователю возможность вызывать интересующую его страницу. Инструкция должна содержать по крайней мере следующие сведения о системе: 1) назначение системы; 2) описание языка общения системы (с примерами); 3) детальное описание лексики и фактов предметной области; 4) информацию о возможностях системы;
1) информацию о принципах работы системы и ее структуре;
2) параметры системы и т. п. К пассивным знаниям могут быть отнесены любые сообщения, выдаваемые системой и не используемые ею в работе.
1.4 Знания об источниках знания и о структуре правил
Для объяснения своих действий система (= участник) должна понимать семантику всех используемых правил. Задать семантику можно описанием значения каждого правила в виде, понятном метаинтерпретатору. Другим способом задания значения правил является запись правил на языке, операторы которого понятны метаинтерпретатору. Второй подход имеет преимущества при большом количестве правил. При необходимости добавления (модификации) правил в первом случае надо описывать каждое вновь добавляемое правило. Во втором подходе, если значения добавляемых правил выразимы в операторах существующего языка, то никаких исправлений не требуется. Предпочтительнее второй подход, так как он ориентируется на реальную предметную область, т. е. на значительное количество правил.
Знания системы о работе ИЗ представляется в виде правил продукции, описывающих условия активации и предполагаемые {не фактические) действия данного ИЗ в понятных пользователю терминах. Цель данного приема состоит в том, чтобы выразить знания об ИЗ в содержательных (более абстрактных) терминах, которые освобождены от бесконечных конкретных подробностей языков программирования. Данное знание об ИЗ, по сути являющееся метазнанием, приобретает компактность и наглядность. Наглядность обеспечивается тем, что описывается только содержательная сторона действий и предусловий ИЗ, понятная пользователю, не знающему программирования. Наличие метаправил об ИЗ сводит задачу системы по объяснению своих действий к указанию, какие метаправила об ИЗ (или их части) использовались п почему. Компактность данных правил позволяет использовать их при планировании и поиске решения.
1.5 Знания системы о пользователе
Знания о модели пользователя необходимы системе для решения в первую очередь следующих задач: 1) понимания целей пользователя; 2) определения уровня общности/абстрактности (конкретности) ответа; 3) определения аспектов, интересующих пользователя; учета допустимого и обязательного "умолчания" при формировании ответа; 4) определения близости фактов, интересующих пользователя, к точкам разрывов непрерывности; 5) учета речевоздействующего фактора.
Отметим, что знания о пользователе не могут быть в общем случае объединены с моделью окружающей среды, так как система может быть ориентирована на работу с пользователями, интересующимися различными целями, аспектами и степенью конкретности предметной области.
1.6 Цели пользователя
Метод определения целей пользователя отличается от метода определения целей системы. Действительно, система формирует свои действия на основании целей, выделенных из правил, т. е. имеет место цепочка ЦЕЛЬ - ПЛАН ДЕЙСТВИЕ. В случае выделения целей пользователя система видит только его ТЕКСТЫ (ДЕЙСТВИЯ) и по ним должна построить ПЛАН - ЦЕЛЬ. Другими словами, система синтезирует свои действия и анализирует действия пользователя. Указанное обстоятельство приводит к использованию для определения целей пользователя не целенаправленного метода выделения полезных правил, а метода, направляемого данными.
Цели пользователя в значительной степени определяются теми задачами, которые он решает. В настоящее время диалоги с системой изучались при решении пользователем двух основных классов задач: диалог, ориентированный на работу с базой данных (ДОБД - data based-oriented-dialog), и диалог, ориентированный на решение задач (ДОРЗ - task-oriented-dialog. К первому классу относят диалоги, возникающие при общении пользователя с системой, хранящей знания о некоторой предметной области (информационно-поисковые системы, справочные системы и т. д.). Ко второму классу относят диалоги, возникающие у пользователя с системой, решающей некоторую задачу (например, с роботом, осуществляющим сборку деталей). Диалоги второго класса имеют сложную структуру и более сложны для анализа. Разветвленность структуры диалога вытекает из смены целей, преследуемых пользователем в процессе диалога. Перечислим некоторые из этих целей:
1. Получить значение требуемого атрибута.
2. Определить область знаний системы.
3. Понять причину неудачи.
3.1. Определить текущее состояние системы.
3.2. Определить последовательность действий, которая привела к неудаче.
3.3. Определить используемые данные.
3.4. Определить полученные результаты.
4. Скорректировать входной текст.
4.1. Исправить свою ошибку.
4.2. Перифразировать запрос, устранив причину затруднений системы.
4.3. Навязать системе требуемое понимание входного текста.
5. Скорректировать знания системы.
1.7 Определение уровня общности/абстрактности (конкретности) ответа
Полное решение указанной задачи является весьма сложным делом, так как требует детального учета знаний конкретного пользователя, что не представляется выполнимым в настоящее время. Однако частные решения данной задачи возможны. Одним из решений является ответ со степенью конкретности, максимально соответствующей конкретности вопроса. Такой прием широко используется. Однако он в ряде случаев неприменим. Действительно, на вопрос: "Кто не выполнил план?" - могут быть даны совершенно различные ответы (если знания о них есть в системе). Например: "Петров", "Цех № 10", "Фабрика "Прогресс", "Министерство пищевой промышленности" и т. д. В подобных случаях решением проблемы может являться требование идентификации (перед началом диалога) ранга пользователя, определяющего масштаб его интересов. Сведения о ранге используются системой в процессе интерпретации входного запроса для выбора уровня общности ответа. Ранг пользователя может устанавливаться как принудительно по коду пользователя, так и выбираться самим пользователем в процессе диалога. Более общим решением указанной проблемы (однако менее удобным для пользователя) является предоставление пользователю средств для указания системе о повышении (понижении) уровня общности выданного ответа.
1.8 Определение аспектов, интересующих пользователя
Поясним данную проблему на конкретном примере. Пусть система имеет сведения о различных аспектах одного и того же явления. Указанное обстоятельство может быть следствием как различного класса пользователей, общающихся с системой, так и ориентации системы на хранение многоаспектных сведений (например, мотор может быть описан и как механическое устройство и' как электрическая схема). Пусть системе задан вопрос: "В каком столе лежит учебник по физике?" Ответы на данный вопрос могут различаться способами идентификации стола. Например: "В столе у окна", "В столе Алексеевского", "В столе начальника сектора", "В столе с инвентарным номером 205", "В двухтумбовом столе", "В столе, на котором стоит календарь" и т. д. Необходимым условием всех ответов является требование однозначной ориентации стола. Однако это требование для системы и пользования может не совпадать в связи с различными знаниями. Очевидно, что для формирования системой ответа, удовлетворяющего пользователя, система должна иметь представление о знаниях данного пользователя: знает ли данный пользователь, кто такой Алексеевский, что он начальник сектора, где его стол, и т. п. Если пользователю подобная информация неизвестна, то надо предпочесть другие ответы. Заметим, что однозначная идентификация объекта - необходимое условие общения, но его выполнения недостаточно для обеспечения удобного общения. Действительно, ответ "В столе с инвентарным номером 205" может однозначно идентифицировать объект, но оказаться для конкретного пользователя (если он не занимается инвентаризацией имущества) крайне неудобным. программа преобразование запись интеллектуальная
Решение проблемы определения аспектов, интересующих пользователя, требует в модели пользователя (известной системе) указать круг его знаний. При формировании ответа система должна учесть знания пользователя. Способ представления модели пользователя для удобства работы должен совпадать со способом представления знаний системы об окружающей среде.
К проблеме определения аспектов, интересующих пользователя, примыкает и проблема учета обязательного и допустимого умолчания при формировании ответа. Суть проблемы состоит в том, какое "умолчание" обязательно (чтобы не раздражать болтливостью пользователя), а какое "умолчание" допустимо (т. е. не вызовет у пользователя непонимания). Примером разумного использования концепции умолчания, учитывающим модель пользователя, являются различные ответы специалиста ребенку, школьнику, студенту, коллеге о том, что такое "электричество".
1.9 Общая схема анализа предложения
Задачей анализа предложения будем считать построение интенсионального выражения смысла данного предложения, выраженного в терминах внутреннего представления системы. На последующих этапах обработки интенсиональному выражению будет поставлен в соответствие конкретный денотат (если он существует) и определена характеризующая его информация. Традиционно задача анализа (во всяком случае, предложений русского языка) расчленяется на морфологический, синтаксический и семантический анализы. Ниже будут последовательно рассмотрены перечисленные этапы. Необходимо отметить, что порядок описания этапов не всегда соблюдается при работе системы. Действительно, активация того или иного модуля (источника знания) осуществляется на основе ситуации, существующей на экране. Активируются те потенциально уместные ИЗ, для которых выполнены предпосылки. Напомним, что выбор потенциально уместных ИЗ и определение среди активированных того ("тех" - для многопроцессорной системы) ИЗ, который будет работать, осуществляется на основе текущих целей системы. Например, обычный перечень целей, предлагаемых компонентой целеобразования, таков: 1) идентифицировать слова; 2) определить среди них события; 3) выделить и обработать именные группы и т. д. Приведенному перечню целей при отсутствии ошибок соответствует следующая последовательность работы программ, определяемая управляющей компонентой (УК):
1. Применение МА к словоформам входного предложения. Отметим, что МА может осуществлять обработку словоформ до окончания ввода всего предложения, т. е. возможно совместить ввод предложения и его обработку (на этапах морфологии, синтаксиса и частично семантики).
2. На основании установленных целей управляющая компонента анализирует результат работы МА и при наличии событий (т. е. слов с моделью управления) вызывает модуль семантического анализа, обрабатывающий предикаты (СЕА. Рг). При отсутствии в предложении событий вызывается модуль обработки именной группы (СИА. NP).
3. Модуль СEA. Рг определяет роли участников данного события и указывает их возможные характеристики.
4. Далее управляющая компонента вызывает модуль синтаксического анализа, обрабатывающий предикативные, комплетивные и обстоятельственные синтаксические отношения (СИА. КО МП).
5. УК вызывает СИА. NP, т. е. выделение именной группы и проведение синтаксических отношений в именной группе.
6. УК вызывает СЕА. NP для проведения семантических отношений в именной группе.
Далее работа СЕЯ зависит от наличия или отсутствия во входном предложении оборотов и придаточных предложений. Приведенная последовательность не является единственно возможной. Действительно, при возникновении неудач при работе любого из модулей порядок вызова модулей будет меняться. Например, если МА не в состоянии идентифицировать какое- либо слово, УК вызовет модуль синтеза для ведения диалога с пользователем о выборе возможных вариантов продолжения работы в случае ошибки на МА (исправление исходного слова; пропуск слова; перифраз входного предложения с исправлением слова, не определенного в словаре).
1.10 Морфологический анализ словоформ
Под морфологическим анализом (МА) понимается обработка словоформ вне связи с контекстом. Словоформой будем называть отрезок текста между двумя соседними пробелами (при этом знаки препинания считаются отдельными словоформами). Функцией морфологического анализа является идентификация словоформы и приписывание словоформе характеризующего ее комплекса морфологической информации (КМИ). КМИ состоит в общем случае из совокупности МИ-строк (пар: основа - морфологическая информация (МИ)), являющихся морфологическими омонимами. Алгоритм МА в решающей степени зависит от принятого в системе способа хранения информации. Существуют два основных метода реализации МА: декларативный и процедурный. В декларативном методе реализации МА (декларативный МА) в словаре системы хранятся все возможные словоформы каждого слова с приписанной им морфологической информацией (МИ). По сути дела, в декларативном МА нет собственно морфологического анализа, а хранится его результат. Задача декларативного МА состоит только в поиске словоформы в словаре и переписывании из словаря комплекса МИ, соответствующего данной словоформе. Это приводит к тому, что декларативный МА работает быстрее, чем процедурный МА. К недостаткам декларативного МА относится необходимость хранения всех словоформ каждой основы. Количество различных словоформ у одной основы довольно велико (у существительного 12, у прилагательного 36, а у глагола с учетом отглагольных форм до сотни).
1.11 Синтаксический анализ предложения
Задача синтаксического анализа (СИА) состоит в том, чтобы, используя морфологическую информацию о словоформах (полученную на этапе МА) и сведения из словаря, построить синтаксическую структуру входного предложения (=осуществить разбор предложения). Синтаксическая структура отражает синтаксические связи, существующие между словами в предложении. Так как после этапа МА слово в общем случае представлено в виде совокупности МИ-строк, то СИА должен устанавливать синтаксические отношения не между словами (или словосочетаниями), а между конкретными МИ-строками (или последовательностями МИ-строк). В лингвистике наиболее употребительны два способа описания синтаксической структуры предложения:
1) описание с помощью систем составляющих;
2) описание с помощью деревьев зависимостей (= деревьев синтаксического подчинения).
1.12 Семантический анализ предложения (СЕАП)
Процесс построения интенсионального выражения смысла предложения заканчивается этапом СЕАП. Будем называть полученное на этапе СЕАП представление предложения семантическим графом предложения (СГП). СГП можно мыслить, как эксплицитное задание смысла входного предложения. СГП, также, как и знание системы, выражается в языке расширенных семантических сетей (см. гл. 3). На вход СЕАП предложение поступает в виде обобщенной синтаксической структуры обобщенного дерева разбора), содержащей:
1) для каждого слова с МУ однозначно выбранный омоним (т. е. выбрана конкретная групповая МУ) и однозначно установленные предикативные и комплетивные СИО (т. е. подобраны кандидаты под конкретную индивидуальную МУ);
2) альтернативные варианты проведения обстоятельств;
3) альтернативные границы именных групп и альтернативные разборы каждой именной группы;
4) для каждого слова входного предложения информацию о числе и роде, используемую при семантической обработке местоимений.
СЕАП удобно разделить на две части: построение неструктурированного семантического графа предложения и структурирование семантического графа.
2. Практическая часть
2.1 Постановка задачи
Написать программу на языке Turbo prolog 2.0, переводящую форму записи выражения, вводимого с клавиатуры, из постфиксной в префиксную для основных логических операций (конъюнкция, дизъюнкция, отрицание). Длинна выражения может быть произвольной. Данные выводятся на экран.
Произвести тестирование и отладку программы.
2.2 Описание применения программы
2.2.1 Общая характеристика
Разработанная программа будет преобразовывать форму записи выражения из постфиксной в префиксную.
Префиксная нотация - это форма записи логических, арифметических и алгебраических выражений, в которой оператор располагается слева от операндов (&ab) [8].
Постфиксная нотация (Обратная польская нотация) это форма записи логических, арифметических и алгебраических выражений, в которой оператор располагается справа от операндов (ab&) [8].
2.2.2 Функциональное назначение
Программа должна переводить форму записи выражения вводимого с клавиатуры, из постфиксной формы записи в префиксную для основных логических операций: конъюнкция '&', дизъюнкция '|`, отрицание '!'.
Пример работы программы:
Запись (A B x) после обработки программой должна принять вид (x A B).
Где "x" - символ, обозначающий одну из основных логических операций.
Пример входного выражения: ab&
Для данного выражения строится бинарное дерево следующего вида:
Используя построенное бинарное дерево, выводим исходное выражение в префиксной форме.
Сначала выводим операцию (&). Выводим левый дочерний узел дерева. Выводим правый дочерний узел.
В результате получим выражение следующего вида: &ab.
2.2.3 Описание логической структуры
Проектирование программы. Входное выражение поступает в предикат errors, где оно проверяется на ошибки. Если выражение прошло все проверки, то оно поступает в предикат expres, где определяется тип выражения и происходит его разбор. Запускается предикат sign определяющий знак операции. Для поиска операндов выражения используется предикат var, который выделяет первый символ выражения и проверяет его на принадлежность символу латинского алфавиту. В зависимости от результата var вызывается определенный term. Если сработал второй term, он изменяет выражение и рекурсивно запускает expres, если сработал первый term то выделяется операнд, оставшиеся выражение без первого операнда и знака операции аналогичным образом разбирается в поисках второго операнда. Далее на вход предиката make_exp поступает выражения типа (операция, первый операнд, второй операнд) который строит бинарное дерево. Для вывода выражения используется предикат wr_exp.
Листинг предикатов в Приложении А.
Список основных предикатов:
· errors(string,integer,integer) - определяет ошибки во входных данных
· expres(string,string,exp) - выражение представлено в 3 вариантах:
терм, терм@, терм выражение@.
· term(string,string,exp) - терм представляющий собой либо имя, либо некоторое выражение в скобках
· var(string,string,string) - определяет принадлежность символа к латинскому алфавиту и к строчной форме.
· lvalue под предикат проверяет текущий символ принадлежности к латинскому алфавиту.
· sign(string,char,string) - определяет знак операции.
· make_exp(string,exp,exp,exp) - собирает бинарное дерево.
· wr_exp(exp) - выводит выражение в постфиксной форме.
2.2.4 Входные данные
Входными данными является введённое с клавиатуры выражение, представленное в постфиксной форме. Идентификаторы переменных состоят из одного символа латинского алфавита.
Пример входных данных представлен в приложении Б. Также в приложении Б приведено тестирование программы на следующих входных данных:
· Введены правильные входные данные
· Введена пустая строка
· Входные данные введены с ошибкой
· Во входных данных несоответствие открывающих и закрывающих скобок.
2.2.5 Выходные данные
Выходными данными является выражение, представленное в префиксной форме.
Пример выходных данных также представлен в приложении Б.
2.2.6 Используемые технические средства
Эмулятор DOSBox v0.74, TurboProlog 2.0.
Заключение
В данной работе было рассмотрено использование естественного языка в интеллектуальных системах. Помимо этого, была спроектирована и реализована программа на языке Turbo Prolog 2.0 осуществляющая преобразования постфиксной записи выражения в префиксную.
В ходе выполнения данной работы были получены навыки программирования на языке Turbo Prolog 2.0 и знания в области искусственного интеллекта.
Список используемых источников и литературы
1. Попов Э.В. "Общение с ЭВМ на естественном языке" 1982 г.
2. Лорьер Ж.Л. "Системы искусственного интеллекта" 1991 г.
3. Гаврилов А.В. "Гибридные интеллектуальные системы" 2002 г.
4. Инфиксные, префиксные и постфиксные выражения http://aliev.me/runestone/BasicDS/InfixPrefixandPostfixExpressions.html (дата обращения 15.05.2016).
Приложение А. Листинг программы
domains
exp=aand(exp,exp);
oor(exp,exp);
nnot(exp);
str(string)
predicates
expres(string,string,exp). % Для анализа 3х типов выражения
term(string,string,exp). %терм представляющий либо имя, либо
%выражение
sign(string,char,string). % Определяет знак операции
make_exp(char,exp,exp,exp). % Формирует бинарное дерево
single(char). % Допустимые знаки операций
var(string,string,string). % Проверка принадлежности операнда
% символам латинского алфавита
lvalue(string,string,string,integer).
wr_exp(exp). % Вывод выражения
w_e(exp).
errors(string,integer,integer). %проверка на ошибки
errors1(string,integer,integer).
if_else(integer,string).
if_else1(integer,string).
Clauses
errors("",0,F1):-F1=1.
errors("",_,_).
errors(S,F,F1):-
frontchar(S,C,Q),
C='(',F1=0,errors(Q,F,F1),!.
errors(S,F,F1):-
frontchar(S,C,Q),
C=')',F1=0,errors(Q,F,F1),!.
errors(S,F,F1):-
frontchar(S,C,Q),
C='!',F1=0,errors(Q,F,F1),!.
errors(S,F,F1):-
frontchar(S,C,Q),
C='&',F1=0,errors(Q,F,F1),!.
errors(S,F,F1):-
frontchar(S,C,Q),
C='|',F1=0,errors(Q,F,F1),!.
errors(S,F,F1):-
frontchar(S,C,Q),
char_int(C,I),
I>=97,
I<=122,F1=0,errors(Q,F,F1),!.
errors(_,F,F1):-F1=F+1.
errors1("",0,C1):-C1=0.
errors1(S,N,C1):-
frontchar(S,C,Q),
C='(',N1=N+1,errors1(Q,N1,C1),!.
errors1(S,N,C1):-
frontchar(S,C,Q),
C=')',N1=N-1,errors1(Q,N1,C1),!.
errors1(S,N,C1):-
frontchar(S,C,Q),errors1(Q,N,C1).
errors1(_,C,C1):-C1=C+10.
if_else(F,_):-
F<>0,write("ERRORS!!!"),!.
if_else(_,Z):-
C=0,
R=Z,
errors1(Z,C,C1),
if_else1(C1,R).
if_else1(C,_):-
C<>0,write("NO SKOBKI!!!"),!.
if_else1(_,Y):-
expres(Y,A,B),
write(" Virajenie v prefiksnoi forme"),
cursor(14,12),
wr_exp(B).
expres(Str,Rest,nnot(Expr)):-
term(Str,Rest1,Expr),
frontchar(Rest1,'!',Rest).
expres(Str,Rest,Expr):-
term(Str,Rest1,Expr1),
expres(Rest1,Rest2,Expr2),
sign(Rest2,FS,Rest),
make_exp(FS,Expr1,Expr2,Expr).
expres(Str,Rest,Expr):-
term(Str,Rest,Expr).
sign(Str,FS,Rest):-
frontchar(Str,FS,Rest),
single(FS).
Single('&').
Single('|').
make_exp('&',E1,E2,aand(E1,E2)):-!.
make_exp('|',E1,E2,oor(E1,E2)):-!.
term (Str,Rest,str(S)):-
var(Str,Rest,S),!.
term (Str,Rest,Expr):-
frontchar(Str,'(',Rest1),
expres (Rest1,Rest2,Expr),
frontchar (Rest2,')',Rest).
var (Str,Rest, Val):-
lvalue(Str,Rest,Val,0),
Val<>"".
lvalue(Str,Rest,Val,N):-
frontchar (Str,FC,Rest1),
char_int(FC,FI),
FI>=97,
FI<=122,N<1,!,
N1=N+1,
lvalue(Rest1,Rest,Val1,N1),
Str_char(FS,FC),
concat (FS,Val1,Val).
lvalue(Str,Str,"",1).
wr_exp(aand(E1,E2)):- write("&"),
w_e(E1),
w_e(E2).
wr_exp(oor(E1,E2)):-write("|"),
w_e(E1),
w_e(E2).
wr_exp(nnot(E)):-
write("!"),
w_e(E).
wr_exp(str(S)):-
w_e(str(S)).
w_e(str(S)):-
write(S).
w_e(E):-
%write("("),
wr_exp(E).
%write(")").
goal
makewindow(1,7,7,"Preobrazovanie formi zapisi virajeniya",0,0,25,80),
cursor(1,4),
nl,
write(" Podderjivaemie operacii: "),
nl,
write(" koniunkzia '&'"),
nl,
write(" dizunkzia '|'"),
nl,
write(" otrizanie '!'"),
nl,
nl,
write(" Primer vchodnich dannich:"),
nl,
write(" ((fb&)a|)!"),
nl,
cursor(10,4),
write("Vvedite virajenie v postfiksnoi forme"),
cursor(11,12),
readln(Y),
R=Y,
Z=Y,
nl,
F=0,
errors(R,F,F1),
if_else(F1,Z),
nl.
Приложение Б. Тестирование программы
Рисунок 1 - Результат работы программы
Рисунок 2 - Результат работы программы при вводе пустой строки
Рисунок 3 - Результат работы программы при вводе неверных данных
Рисунок 4 - Результат работы программы при вводе данных, в которых несоответствие открывающих и закрывающих скобок
Размещено на Allbest.ru
...Подобные документы
Запись в языке программирования – это структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. Поле записи как обычная переменная. Операторы сравнения, присоединения. Программа с использованием массива структур.
реферат [11,5 K], добавлен 19.01.2009Разработка программы для поиска пути в лабиринте с возможностью задания входа и выхода, наглядное представление решений. Использование языка логического программирования Prolog. Данные и методы решения. Пользовательский интерфейс, листинг программы.
реферат [14,3 K], добавлен 15.10.2012Реализация экспертных систем любой сложности, решение любых головоломок и шарад с помощью языка логического программирования Prolog. Основные понятия в языке Prolog. Правила логического вывода и запросы. Процедуры логического вывода и принятия решений.
курсовая работа [19,0 K], добавлен 24.05.2012Создание программы для обработки структуры данных. Возможность ввода и записи данных на персональном компьютере. Прикладное программирование на языке Turbo Pascal. Свободное редактирование записанных данных с помощью программы, написанной на Turbo Pascal.
лабораторная работа [11,4 K], добавлен 13.05.2011Формальная запись задачи унификации, представление продукции и выражения в виде дерева. Преобразование выражения в префиксную форму и определение классов для реализации алгоритма. Операции проверки применимости продукций и замены свободных переменных.
контрольная работа [372,3 K], добавлен 24.01.2011Разработка приложения "Ведомость начисления заработной платы" в среде программирования C++Builder. Алгоритм и сценарий работы программы. Проектирование интерфейса пользователя. Написание программных модулей и результаты тестирования данной программы.
курсовая работа [597,4 K], добавлен 31.01.2016Основы языка Visual Prolog. Введение в логическое программирование. Особенности составления прологов, синтаксис логики предикатов. Программы на Visual Prolog. Унификация и поиск с возвратом. Использование нескольких значений как единого целого.
лекция [120,5 K], добавлен 28.05.2010Общая характеристика и функциональные возможности языка логического программирования Prolog, а также систем SWI-Prolog и Visual Prolog. Формирование базы знаний относительно определения возможности трудоустройства студента и принципы реализации запросов.
лабораторная работа [1,3 M], добавлен 07.10.2014Разработана программа решения двух задач на языке программирования Turbo Pascal. Спецификация задания. Описание входных и выходных данных. Математическая постановка задачи. Алгоритм ее решения. Описание и блок-схема программы. Результаты тестирования.
курсовая работа [275,8 K], добавлен 28.06.2008Виды записи выражений. Особенности обратной польской записи. Вычисления на стеке. Преобразование из инфиксной нотации. Операторы входного языка. Описание выходной информации. Алгоритмические аспекты программы-распознавателя арифметических выражений.
курсовая работа [2,1 M], добавлен 26.11.2011Записи: ієрархічні, з варіантними полями, множини. Складання програм, які забезпечують дії з таблицями, відомостями, списками, каталогами, де містяться дані різних типів. Особливості використання процедур і функцій мови Turbo Pascal при розробці програм.
реферат [39,8 K], добавлен 13.11.2010Описания объектов, свойств, методов, формы и основных модулей текста программы в среде Delphi. Создание Windows-приложения на алгоритмическом языке Object Pascal в среде визуального программирования. Анализ результатов тестирования программного продукта.
курсовая работа [2,4 M], добавлен 27.08.2012Особенности реализации алгоритма проверки логического следования методом резолюции. Реализация проекта на логическом языке Prolog и на функциональном языке Haskell: сравнительная характеристика. Знакомство с листингом программы на необходимых языках.
курсовая работа [57,0 K], добавлен 14.07.2012Применение грамматических правил на языке Prolog. Использование грамматики для формирования лингвистической информации. Классификация грамматических формальных систем по их порождающей способности. Преобразование правил DCG интерпретатором Prolog.
презентация [72,5 K], добавлен 17.10.2013Элементы языка Object Pascal: идентификаторы, константы, переменные, выражения. Структура проекта Delphi. Операторы и метки. Типы данных языка OPascal. Статические и динамические массивы. Записи с вариантными полями. Совместимость и преобразование типов.
курс лекций [385,4 K], добавлен 18.02.2012Характеристика используемой операционной системы, языка программирования. Структура программы на языке Turbo Pascal 7.1. Операторы языка Turbo Pascal. Проведение сортировки записей. Алгоритмы программы и подпрограмм. Причины возникновения ошибок.
курсовая работа [454,1 K], добавлен 13.06.2014Разработка и внедрение автоматизированной системы управления дорожным движением. Специфика применения программы интеллектуальных транспортных сетей, использующей принцип нейронных схем, в городе Хабаровске на языке программирования Turbo Pascal 7.0.
дипломная работа [1,7 M], добавлен 19.06.2012Требования к функциональным характеристикам программы, составу и параметрам технических средств, программной совместимости. Особенности программирования в среде Access. Описание интерфейса программы, ввод и редактирование данных, добавление новых книг.
курсовая работа [1,5 M], добавлен 17.11.2010Сущность среды программирования Turbo Pascal. Разработка программы с учетом потребительских свойств. Особенности методов современной технологии программирования (пошаговой детализации, структурный, модульный принцип, метод иерархической декомпозиции).
курсовая работа [57,1 K], добавлен 03.03.2011История создания и развитие Pascal. Особенности пакета программирования Turbo. его возможности редактора текстов, компилятора и отладчика. Построения программы на языке Turbo Pascal, ее структура, типы алгоритмов, одномерные и многомерные массивы.
курсовая работа [519,3 K], добавлен 25.06.2011