Введение


В современной технике программирования имеется ряд проблем, которые могут быть устранены посредством естественно-языкового программирования в общем и Пегаса прежде всего.


Главное проблемы современных техник программирования и языков программирования:

1. Психологической проблемой является факт, что разработчик должен изменять структуру своих мыслей так, чтобы они соответствовали всемирной модели специфического языка программирования вместо того, чтобы выражать их непосредственно, что связано с большими потерями, например, уменьшением креативности предварительного осмысления в классах, свойствах и методах при производстве С# - программы.


2. Проблема языков программирования: одни и те же алгоритмы должны повторно реализовываться в новых языках программирования, хотя их собственная идея остается единой, таким образом, например, некогда в ассемблере, теперь в Яве и дфлее в новом языке.


3. Языковая проблема: разработчики вынуждены снова и снова читать примечания и документации, которые составлены не на их родном языке. Это ведет к недоразумениям, ошибкам и неэффективности работы, так как, к примеру, документирование совсем отсутствует или используются ошибочные выражения.


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


Решения и гипотезы

Естественно-языковое программирование посредством программы Пегас поможет решать далее упомянутые проблемы: 1. Программные идеи разработчиков могли бы выражаться непосредственно на естественном языке, без связанного с большими потерями изменения структуры. 2. Так как обычно естественный язык в течение длинных периодов остается неизменным, то равносильными остаются также составленные в нем программы: исчезнет проблема составления программ по-новому с целью приспосабления их к актуальному состоянию техники, совершенствовались бы только компиляторы для естественно-языкового программирования, так что разработчиков не будет это беспокоить. 3. Разработчики могли бы писать примечания и документацию на своем родном языке, а другие разработчики могли бы продолжать работу на основании автоматического перевода на соотсетствующий их родной язык. Уменьшилась бы и потребность в комментариях, так как программы будут составляться уже на естественном языке. 4. Пегас допускает только стандартные форматы, как, например, универальный код.

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


1. С естественно-языковыми программными языками можно разрабатывать в общем приложения более эффективно, в частности, при применении зависимости контекста, механизмов референцирования и механизмов сжатия естественного языка.


2. Программы, написанные на естественно-языковых программных языках, легче и быстрее в понимании, чем программы, написанные на обычных языках программирования.


3. Естественное языки программирования легче выучивать.


Язык идей

Естественный язык, подобно человеческому мышлению, должен моделироваться для применения в Пегасе в определенной форме. C этой целью была спроектирована идейная запись. С ее помощью можно комбинировать первоначальные идеи, то есть идеи, которые непосредственно берут начало от наших замыслов, как например, "красный цвет" или "громко", с комплексным идеями, как например, "древесина" или "стол", а также с объединенными идеями, в которых сразу могут отображаться мысли как „стол коричневый“ (стол коричневого цвета). Сами идеи превосходят специфические естественные языки, так как они могут выражаться на различных естественных языках. Хотя все эти идеи индивидуальны для каждого отдельного человека, все же, они имеют схожые черты. Только благодаря этому коммуникация вообще становится возможна, и это является также основой для компьютерной системы с общим знанием.


Особенности естественного языка программирования

Естественный язык программирования отличается от ныне существующих языков программирования в том числе по следующим 3 пунктам, которые нацелены на то, чтобы оформлять обмен информацией насколько эффективно, насколько это является возможным: 1. Частое применение имплицитного референцирования, напр., с помощью таких местоимений, как „он“, „она“, или плилагательных "последний", с помощью прямых определений, как „ символьная последовательность“ или с помощью утвердительных предложений, напр., „ Да, это верно“. 2. Применение упрощений (сжатий), напр., синтаксических упрощений, как в „Покажи строки и столбцы матрицы“, а также путем применения семантическим упрощений, напр., „Просморти множество слева направо и наоборот“. 3. Зависимость контекста, напр., „Возьми список. Прибавь на конце число 3. Возьми название списка. Прибавь на конце число 3.“, где предложение „ Прибавь на конце число 3.“ имеет, соответственно ,2 различных значения.

Желательно углубление поиска в упомянутой системе Telling [039]. Если будут найдены другие родственные разработки, которые не известны мне в данный момент, я буду рад плодотворному обмену идеями. В целом, по нашему мнению, можно констатировать, что имеется немного разработок в области естественно-языкового программирования. Не существует достаточных технических разработок, которые обязательны для естественно-языковой программистской системы, а именно, эффективного лексического анализа, семантических форматов данных, а также удовлетворительных вычислительных мощностей, в том числе и по объему памяти.


Обсуждение


При программировании на естественном языке могут возникнуть некоторые проблемы и, в частности из-за того, что на естественном языке существует несколько способов выражения одной и той же семантической мысли, например, „Напиши символьную последовательность.“ или „Задай символьную последовательность“. Однако, количество этих семантически равноценных выражений все же ограничено и может быть регистрирован.


Кроме того, нередко двусмысленны и естественно-языковые выражения; однако, эта проблема разрешима путем повторных вопросов, которые задавались бы системе (напр., „Под словом „она“ Вы подразумеваете „массу“ или „символьную последовательность?“).


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

Вывод


В заключение, по мнению автора, можно сказать следующее: языки, ориентированные на объект, уже достигли того, что представляется возможным с данной программистской парадигмой. Они являются результатом длинной дороги, которая началась при появлении компьютерных языков и привела с тех пор к языкам программирования, которые постепенно приближались к человеческому мышлению. Ранее можно было предположить, что это развитие в будущем остановится. Однако, естественно-языковое программирование могло бы сыграть здесь решающую роль, и, по меньшей мере, это станет представлять интерес для дальнейших исследований.


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

Техника


Пегас читает естественно-языковой текст и генерирует из него выполнимую программу, которая производит замену представленных в тексте идей.


Архитектура

Следующая диаграмма показывает архитектуру Пегаса в метафорическом смысле.

Разложение идейно-языковых выражений

Пегас читает предложение ввода и производит выражение на языке идей, которое соответствует предложению ввода. Например, предложение „If the first element of the second row of the matrix is smaller than 3 then write "I can understand you!" соответствовало бы следующему выражению на языке идей:

(
  (
  ((be, action), normal mode, present tense, predicate),
  ((element, entity), (first, positive, property),
  ((row, entity), (second, positive, property),
  ((matrix, entity), single, entity reference,
  reference, normal phrase, phrase),
  single, entity reference, reference, normal phrase, phrase),
  single, entity reference, reference, normal phrase, phrase, subject),
  (smallness, comparative, property),
  ((three, entity), single, entity reference, reference,
  comparation phrase, phrase, object),
  statement clause, clause, first),
  (
  ((writing, action), normal mode, present tense, predicate),
  (direct personal reference, reference entity, subject),
  (("I can understand you!", character string symbol),
  symbol phrase, phrase, object),
  command clause, clause, second),
condition sentence, sentence)


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

После того, как предложение ввода выражено на языке идей, Пегас пытается устанавить смысл предложения. Выражение на языке идей будет интерпретироваться шаг за шагом, путем сравнений с помещенными во внутреннюю библиотекеу значениями. Например, для следующей записи в библиотеке будет отмечено:

Здесь пазмещены указания, которые вызывают непосредственно интегрированное отношение каузальной связи в соответствующей программе Явы, а именно: указание if-then.

С помощью кратковременной памяти, которая временно сохраняет 7 последних понятий, будут расшифрованы такие ссылки, как „ число “ или „он“.


Генерование программы вывода

В заключении программа вывода будет сгенерирована из заданных в библиотеке значений . Пример короткой программы:


Take the matrix ([2, 2, 1], [1, 4, 3]).
Print it.
New line.
If the first element of the second row of the matrix is smaller than 3 then write "I can understand you!".


Результат будет быглядеть следующим образом:


// Take the matrix ([2, 2, 1], [1, 4, 3]).
long[][] matrix74 = new long[2][3];
matrix74[0] = new long[]{2, 2, 1};
matrix74[1] = new long[]{1, 4, 3};

// Print it.
System.out.print("(");
for (int i7 = 0; i7 <= 1; i7++)
{
  System.out.print("[");
  for (int i8 = 0; i8 <= 2; i8++)
  {
  System.out.print(matrix74[i7][i8]);
  if (i8 < 2) System.out.print(", ");
  } 
  System.out.print("]");
  if (i7 < 1) System.out.print(", ");
}
System.out.print(")");

// New line.
System.out.println("");

// If the first element of the second row of the matrix is
// smaller than 3 then write "I can understand you!".
if (matrix74[1][0] < 3)
  System.out.println("I can understand you!");


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

Если первый элемент второй строки матрицы меньше 3 (трех), то пиши „I can understand you!“.


Родственные работы


Изначально в информатике создавались языки программирования, которые разработчики пытались приблизить к естественным языкам. Но, на самом деле, они не являются естественно-языковыми языками программирования в подлинном смысле, так как используют лишь ограниченную часть естественного языка, то есть лишь определенную часть синтаксиса и словаря естественного языка. Это были формализованные языки программирования. К таким языкам программирования относятся следующие языки: COBOL, FORTRAN, БЭЙСИК и более новый AppleScript [010]. Здесь используется немецкий язык и этот коммерческий язык программирования отражается в увеличении цен на компьютеры. AppleScript применяется для написания простых программ в среде операционной системы MacOS фирмы Apple. В предыдущих версиях имелась возможность использовать в AppleScipt другие языки. NaturalJava [045] - это язык, в котором можно воспроизводить код Явы с помощью естественного языка. Однако, использование естественного языка ограничивается чистым отображением структуры Явы, например, командами типа "I would like to create a public method that is named XYZ ...".


В восьмидесятых годах делалась попытка создания настоящего естественно-языкового языка программирования: языка NLC [054, 006], который делает возможным английский вариант естественно-языкового программирования в ограниченной среде операций над матрицами. Более интересным является язык Metafor [039], который в программировании опирается на систему Telling [034] с предложениями вида повествования, например, "Pacman is a character who loves to run through a maze and eat dots." Наряду с научными проектами были попытки частных лиц: „Osmosian“ [049].


При интегрированной поддержке Пегас превосходит все характеристики далее упомянутых систем:

Основа

Понима-ние, разум

Кратковре-менная память

Генериро-
вание

Способ выражения

Естест-венный язык
-Немецкий
-Английский

Язык программиро-вания
- Ява

Чтение

Долговре-менная память

МОЗГ