СИСТЕМА ГОЛОСОВОГО УПРАВЛЕНИЯ
VOICE CONTROL SYSTEM

Изобретение касается процесса управления или программирования системы с применением естественного языка, а также соответствующим образом настроенной системы.
Технологические предпосылки
В связи с техническими системами, которые работают в человеческом окружении и ведут с людьми интерактивную коммуникацию, возникают формулировки задач, сложность которых не позволяет найти общего решения на основании простых алгоритмов. Примером этого может быть управление роботами-гуманоидами. Возникающие технические проблемы и количество подходов к решению этих проблем настолько многочисленны, что с ними можно справиться, лишь подключив большую группу экспертов.
Основанное на языке управление техническими системами и техническими приложениями само по себе известно, например, в связи с приложениями на мобильных устройствах или при управлении роботами.
Также и процессы программирования на естественном языке являются уже много лет предметом исследования и разработок, в частности, в отношении коммуникации между человеком и машиной. Также и пользователям, не особо хорошо обученным в плане техники программирования, следует предоставить возможность управлять техническими системами посредством естественного языка.
Проблемы при этом часто возникают в результате того, что естественный язык многозначен и понимание часто основывается на контекстной информации, которая не всегда представлена четко или непосредственно. Кроме того, людям скорее свойственно процедурное мышление, в то время как современное программное обеспечение является скорее объектно-ориентированным, что для обычного пользователя скорее всего трудно понять.
Задачей настоящего изобретения является учесть вышеназванные проблемы и еще более усовершенствовать и упростить управление или программирование технических систем посредством естественного языка. Краткое описание изобретения
Данная задача решается при помощи процесса, системы и структуры данных с признаками дополнительных пунктов формулы изобретения. Полезные решения и усовершенствования указаны в зависимых пунктах формулы изобретения.
Данное изобретение основывается в значительной мере на специальной структуре данных, которая в связи с данным изобретением обозначается как компонент программного кода, состоящий из строк символов. Данная структура данных включает в себя с одной стороны определяющую строку символов, которая включает в себя выражение на естественном языке.
С другой стороны компонент программного кода, состоящий из строк символов, включает в себя однозначно связанный с определяющей строкой символов сегмент программного кода, который реализует связанный с выражением на естественном языке набор функций.
Определяющая строка символов и сегмент программного кода неразрывно связаны друг с другом и образую функциональную единицу. Сегмент программного кода реализует якобы семантику определяющей строки символов, то есть то, что устанавливает выражение на естественном языке.
Понятие «выражение на естественном языке» следует в связи с данным изобретением в этом отношении понимать так, что выражение охватывает одно или несколько слов на естественном языке. Выражение может при этом охватывать одно или несколько слов в их основной форме. Предпочтительно выражение охватывает грамматически верное предложение на естественном языке. Промежуточные формы также возможны.
Такая структура данных, то есть описанный в изобретении компонент программного кода, состоящий из строк символов, предоставляет завершенную, в высокой степени капсулированную и функциональную единицу. Внутреннее применение компонента программного кода, состоящего из строк символов, можно скрыть вовне. Как впоследствии подробно описано, компонент программного кода, состоящий из строк символов, может быть простым способом, например, посредством Plug-and-Play, интегрирован в систему и задействован при помощи естественного языка. Таким образом, система может по желанию быть расширена и дополнена третьими лицами. Необходимость спецификации компонента программного кода, состоящего из строк символов, сведена к минимуму. Для программирования сегмента программного кода могут, например, быть предусмотрены распространенные языки программирования, такие как Java или С++.
Предпочтительная исполнительная форма процесса управления системой посредством естественного языка включает в себя поэтому, в частности, шаг предоставления большого числа описанных выше компонентов программного кода, состоящих из строк символов, в системе.
В соответствии с предпочтительной исполнительной формой изобретения по меньшей мере один из большого числа вышеописанных компонентов программного кода, состоящих из строк символов, в этом отношении разработан таким образом, чтобы поддерживать ввод параметров, при помощи которых может быть уточнен предоставленный сегментом программного кода данного компонента программного кода, состоящего из строк символов, набор функций.
Другими словами, набор функций, которая реализует сегмент программного кода компонента программного кода, состоящего из строк символов, не должен быть фиксированным и неизменным, а может быть уточнен при помощи ввода параметров. Например, реализуемый сегментом программного кода базовый набор функций для считывания даты из банка данных может быть в этом отношении уточнен при помощи параметров, какую таблицу, а в таблице, какую колонку следует считать.
Точнее, по меньшей мере один компонент программного кода, состоящий из строк символов, может предоставить собственный метод ввода параметров. Если этот компонент программного кода, состоящий из строк символов, обрабатывается управляющим устройством системы, применяется метод ввода параметров и компонент программного кода, состоящий из строк символов, как бы сам осуществляет распознавание необходимых параметров.
В соответствии с альтернативной исполнительной формой компонент программного кода, состоящий из строк символов, из множества компонентов программного кода, состоящих из строк символов, может тем самым быть настроен, чтобы таким образом поддерживать ввод параметров, чтобы часть определяющей строки символов данного компонента программного кода, состоящего из строк символов, была четко обозначен в качестве определяющего параметра для управляющего устройства системы, которая обрабатывает компонент программного кода, состоящий из строк символов. Для этого в технологии программирования могут в принципе применяться известные технологии, которые связаны с понятиями «маркировка» или «аннотация». Распознавание параметра или параметров происходит в этом случае управляющим устройством на основании специального обозначения в определяющей строке символов компонента программного кода, состоящего из строк символов. Разумеется, реализация применяемого в данном документе понятия «маркировка» не ограничивается исключительно в основном известными в программировании технологиями, такими как аннотация, XML, JSON и т.п. Для этого могут применяться новые технологии, которые служат той же цели, что и «маркировка». К ним относится, например, применение зарезервированных ключевых слов в исходном коде языка программирования и соответствующим компилятором или интерпретатором. В соответствии с исполнительной формой с параметром, при помощи которого может быть уточнен предоставляемый сегментом программного кода компонента программного кода, состоящего из строк символов, набор функций, может быть связан дополнительный свободно определяемый параметр. Такой параметр может, в частности, отличаться от одного из известных по обычным языкам программирования примитивных типов, таких как, например, String, Integer, Float, Date, булев тип, и т.д. Типами параметров могут в связи с этим быть, в частности, единицы измерения или схожие с ними данные. Также и свободно определяемые категории, как, например, «Овощи» могут быть предусмотрены в качестве параметра. Также возможно определить и связать тип параметра, состоящий из комбинации одного или нескольких «стандартных параметров» и одного или нескольких свободно определяемых параметров. Для параметра, который указывает температуру, может, например, определяться тип параметра, который включает в себя число с плавающей запятой (Float) и конкретную единицу измерения (градусы по Цельсию).
Тот факт, что распознавание параметров осуществляется системой или предпочтительно самим компонентом программного кода, состоящим из строк символов, посредством описанного выше метода ввода параметров, имеет дополнительное преимущество, что ввод ошибочных данных, например, в отношении типа или значения параметра, может быть проверен непосредственно при вводе. Возможность введения специфичных свободно определяемых типов параметров может быть при этом полезной, например, когда параметр представляет собой число, а относящаяся к нему единица измерения, которая может быть связана в качестве дополнительного параметра, существенна (например, «м» или «км»). Ошибка по причине ошибочного введения параметра, которая в ином случае возникла бы лишь позднее, например, при выполнении, может благодаря этому быть своевременно распознана и устранена. Ввод, распознавание и проверка параметра при помощи специального метода компонента программного кода, состоящего из строк символов, имеет много преимуществ. Метод может применяться с учетом особенностей программного кода компонента программного кода, состоящего из строк символов; систему в этом отношении изменять не требуется. Каждый программист может добавить к вводу параметров приспособленный к соответствующему компоненту программного кода, состоящему из строк символов, метод и изменить его с учетов требований программного кода соответствующего компонента программного кода, состоящего из строк символов.
Возможность применения дополнительного свободно определяемого типа параметра имеет еще одно преимущество: Благодаря ему возможен ввод различных параметров, с каждым из которых связаны различные типы параметров, в любой последовательности. Правильная связь может быть впоследствии установлена методом ввода параметров или системой исключительно на основании типа параметра.
Для проверки типа параметра при вводе впоследствии могут применяться еще более точно описанные процессы сопоставления с образцом, которые, как правило, применяются при сравнении вводимой цепочки данных с определяющей строкой символов компонента программного кода, состоящего из строк символов. В соответствии с предпочитаемой исполнительной формой предоставляемый сегментом программного кода по меньшей мере одного компонента программного кода, состоящего из строк символов, из множества компонентов программного кода, состоящих из строк символов, набор функций, может давать возвращаемое значение. Возвращаемые значения могут быть простыми логическими или числовыми значениями, цепочками данных или тому подобным, а также более сложными структурами или наборами функций.
Такое возвращаемое значение может быть помечено или аннотировано маркировкой на естественном языке и сохранено системой в специально предусмотренном для этого разделе памяти. Значения, сохраненные в данном разделе, являются в определенной мере своего рода историей памяти. На основании маркировки компонента программного кода, состоящего из строк символов, может впоследствии простым способом, с использованием естественного языка, безошибочно обратиться к сохраненным возвращаемым значениям. Таким образом, существует возможность создавать, сохранять, и простым и однозначным образом использовать контекст.
С возвращаемым значением, также как и с параметром, может быть связан свободно определяемый тип возвращаемого значения, который описывает возвращаемое значение, например, в отношении связанной единицы мер.
Как далее еще более подробно описано в связи с контрольными структурами, второй компонент программного кода, состоящий из строк символов, может обратиться к возвращаемому значению первого компонента программного кода, состоящего из строк символов, в частности, в качестве параметра для определения предоставляемого сегментом программного кода второго компонента программного кода, состоящего из строк символов, набора функций. Особенно предпочтительно применение данного образа действий в связи с условными операторами, которые могут обращаться к возвращаемым значениям бывших компонентов программного кода, состоящих из строк символов.
В соответствии с первой предпочитаемой исполнительной формой система при этом настроена таким образом, чтобы выполнять реализуемый сегментом программного кода набор функций при получении вводимой цепочки данных, которая, как правило, включает в себя выражение на естественном языке, если вводимая цепочка данных в соответствии с заданным критерием сходства имеет заданное сходство с определяющей строкой символов компонента программного кода, состоящего из строк символов. Простым языком, набор функций компонента программного кода, состоящего из строк символов, может быть задействован при получении системой ввода данных на естественном языке, которые в значительной мере соответствуют определяющей строке символов компонента программного кода, состоящего из строк символов.
В качестве критерия сходства для сравнения вводимой строки данных с определяющей строкой символов компонента программного кода, состоящего из строк символов, могут применяться критерии сходства, известные в современных техниках. То же самое действительно для процесса сравнения вводимой цепочки данных с определяющей строкой символов; для этого в современных техниках известны многочисленные процессы, например, обычный процесс сопоставления с образцом. Заданное сходство, которое, например, можно задать посредством числового значения между 0 и 1 в зависимости от применяемого критерия сходства, может изменяться в зависимости от того, каким образом система получает доступ к вводимой цепочке данных. При этом следует различать, например, ввод при помощи языкового ввода и преобразование в цепочку данных или прямой ввод цепочки данных, например, при помощи клавиатуры или т.п. Специальные критерии сходства или процессы сравнения не являются предметом данного изобретения. В простейшем случае вводимая цепочка данных может быть проанализирована, чтобы установить, включает ли она в себя заданную часть выражения на естественном языке или определяющую строку символов точно или аппроксимативно. Точно означает дословное соответствие. Аппроксимативно может означать, что грамматические отклонения (например, единственное/множественное число, падеж, склонение и т.д.) допустимы и, например, знаки препинания, такие как запятая или т.п., игнорируются. Также синонимы или понятия могут считаться схожими.
В соответствии с исполнительной формой сегмент программного кода компонента программного кода, состоящего из строк символов, реализует набор функций управления связанного с системой прибора. Предпочтительным случаем применения является управление бытовыми приборами. Еще одним предпочтительным случаем является управление роботом или т.п. Кроме того, возможно, что поиск информации, например в доступных общественности онлайн-библиотеках, будет упрощен при применении описанного здесь процесса.
В соответствии с еще одной исполнительной формой метод ввода параметров реализует диалог между компонентом программного кода, состоящим из строк символов, и пользователем. В качестве альтернативы диалог может также реализовываться сегментом программного кода компонента программного кода, состоящего из строк символов. Это означает, что метод ввода параметров либо набор функций, который реализуется сегментом программного кода, осуществляет вывод данных на естественном языке, который пользователь понимает как вопрос или требование ввода данных. Пользователь отвечает на этот вопрос соответствующим вводом, который получается и обрабатывается методом или набором функций в качестве еще одной вводимой цепочки данных. Данный процесс ввода вопросов и ответов может повторяться много раз. При этом компонент программного кода, состоящий из строк символов, может для управления диалогом использовать раннее введенные пользователем данные описанным далее способом. Данная исполнительная форма подходит, например, для предоставления экспертной системы.
В соответствии с первым вариантом диалог ввода параметров может служить для уточнения применяемого сегментом программного кода набора функций. Такой ввод параметров при этом может быть построен таким образом, чтобы заданные параметры в отношении ожидаемого типа параметров, значений параметров или т.п. проверялись набором функций или методом ввода параметров. Тем самым можно распознать и избежать ввода ошибочных данных.
В соответствии со вторым вариантом диалог может поддерживать свободный разговор между пользователем и системой. Под свободным разговором в данной связи понимается переключение между вопросом или требованием ввода данных, адресованными пользователю набором функций, и данным пользователем ответом, причем ответ не ограничивается ни по формату, ни по семантике. Ответ пользователя дается посредством ввода вводимой цепочки данных в систему, которая передает эту вводимую цепочку данных набору функций компонента программного кода, состоящего из строк символов. Также и эта вводимая цепочке данных включает в себя, как правило, выражение на естественном языке.
В соответствии с еще одной исполнительной формой сегмент программного кода компонента программного кода, состоящего из строк символов, реализует набор функций передачи вводимой цепочки данных системе. Другими словами, набор функций компонента программного кода, состоящего из строк символов, осуществляет со своей стороны ввод для системы, которая может повлечь за собой обращение к еще одному, уже предоставляемому системой, компоненту программного кода, состоящему из строк символов.
Здесь видно еще одно значительное преимущество применения компонентов программного кода, состоящих из строк символов, описанных в данном изобретении.
Каждый из этих компонентов программного кода, состоящих из строк символов, может предоставлять специальный набор функций капсулированным способом, который можно распознать и использовать посредством определяющей строки символов соответствующего компонента программного кода, состоящего из строк символов, на естественном языке. Обычные системы, которые делают возможной функцию голосового управления, создаются, как правило, как закрытые системы, и поэтому сильно ограничены в отношении своей сложности и возможности расширения. В соответствии же с данным изобретением предоставляется возможность простым способом расширить систему посредством добавления компонента программного кода, состоящего из строк символов, в систему. Сложные технические вопросы, такие, как, например, воспроизведение знаний или управление роботами, могут быть усовершенствованны распределительно посредством предоставления заинтересованным третьим лицам отдельных аспектов решаемой проблемы в виде специфичных компонентов программного кода, состоящих из строк символов, которыми может быть дополнена система. Эти компоненты программного кода, состоящие из строк символов, могут впоследствии воспользоваться вышеописанным способом набором функций уже имеющихся компонентов программного кода, состоящих из строк символов, и предоставляют со своей стороны собственный набор функций для обращения для дальнейших компонентов программного кода, состоящих из строк символов. Соответствующая система становится тем самым открытой и может быть легко расширена в любом направлении.
Существенно отвечает за это концепция компонента программного кода, состоящего из строк символов. Обычные системы голосового управления позволяют, как правило, только обратиться к уже имеющимся стандартным наборам функций, например, запуск интернет-поиска, отправка сообщения, внесение события в календарь, и т.п. В рамках же данного изобретения имеется возможность предоставить любой набор функций при помощи сегмента программного кода, приспособить его к определяющей строке символов на естественном языке и интегрировать в систему. То есть в то время как в современных техниках голосовое управление всего лишь повышает эргономику соответствующей системы, здесь при помощи сегмента программного кода в каждом случае предоставляется набор функций, который при помощи технических средств программирования реализует семантику выражения на естественном языке, содержащегося в определяющей строке символов. Предлагаемая здесь структура данных компонента программного кода, состоящего из строк символов, позволяет, таким образом, как бы функциональную реализацию семантики выражений естественного языка посредством капсулированной функциональной единицы выражения на естественном языке и однозначно и неразрывно привязанного к этому выражению сегмента программного кода.
Разумеется, сегмент программного кода компонента программного кода, состоящего из строк символов, может одновременно реализовывать также различные из описанных выше наборов функций. В частности сегмент программного кода может реализовать как набор функций диалога, так и набор функций передачи вводимой цепочки данных системе. Это всегда имеет смысл, если в ходе диалога выясняется, что на основании введенных пользователем данных имеет смысл обращение к еще одному компоненту программного кода, состоящему из строк символов, с расширенным набором функций.
Определенным образом система косвенно поддерживает коммуникацию различных компонентов программного кода, состоящих из строк символов, посредством естественного языка. В соответствии с первым аспектом компонент программного кода, состоящий из строк символов, может, как описано выше, быть настроен таким образом, чтобы самостоятельно передавать системе вводимую цепочку данных с выражением на естественном языке, и тем самым косвенно «обращаться» к еще одному компоненту программного кода, состоящему из строк символов, определяющая строка символов которого в достаточной мере соответствует данной вводимой цепочке данных. Еще один аспект поддерживаемой системой коммуникации различных компонентов программного кода, состоящих из строк символов, посредством естественного языка станет ясен далее.
Конкретно процесс управления системой при помощи естественного языка может включать в себя следующие дополнительные шаги:
Система получает вводимую цепочку данных. Вводимая цепочке данных включает в себя, как правило, выражение на естественном языке.
В следующем шаге система сравнивает вводимую цепочку данных с определяющей строкой символов уже предоставленного системе компонента программного кода, состоящего из строк символов, в соответствии с заданным критерием сходства, например, посредством обычного процесса сопоставления с образцом.
Если вводимая цепочка данных показывает заданное сходство с определяющей строкой символов в соответствии с заданным критерием сходства, система осуществляет реализуемый сегментом программного кода набор функций.
В соответствии с предпочитаемой исполнительной формой по меньшей мере одна часть полученной системой вводимой цепочки данных может быть сохранена. Это может касаться, с одной стороны, вводимой цепочки данных, которая привела к выполнению набора функций компонента программного кода, состоящего из строк символов. В качестве альтернативы или дополнительно могут быть также сохранены по меньшей мере части вводимых цепочек данных, которые были введены пользователями в рамках диалога с компонентом программного кода, состоящим из строк символов.
При этом в соответствии с исполнительной формой может быть сохранена по меньшей мере часть полученной вводимой цепочки данных в пределах самого компонента программного кода, состоящего из строк символов. Компонент программного кода, состоящий из строк символов, может при этом включать в себя подходящую структуру данных для сохранения контекста. Сохраненная в компоненте программного кода, состоящем из строк символов, информация будет впоследствии считана самим компонентом программного кода, состоящим из строк символов, в целях поддержки последующего исполнения наборов функций, реализуемых сегментом программного кода компонента программного кода, состоящего из строк символов. Сохраненные таким образом части вводимых цепочек данных могут быть считаны для поддержки последующего выполнения наборов функций компонента программного кода, состоящего из строк символов. Таким образом может происходит управление диалогом пользователя с компонентом программного кода, состоящим из строк символов, для чего компонент программного кода, состоящий из строк символов, ставит ход диалога в зависимость от полученной от пользователя в ходе диалога и сохраненной информации.
В качестве альтернативы части полученных вводимых цепочек данных могут быть также сохранены централизованно в системе. В соответствии с данным вариантом информация, сохраненная таким способом (состоящая из вводимой цепочки данных, которая, как правило, включает в себя выражение на естественном языке) может также использоваться исполняемым впоследствии дополнительным компонентом программного кода, состоящим из строк символов, в качестве своего рода контекстной или фоновой информации. Части сохраненных централизовано в системе вводимых цепочек данных служат как бы в качестве кратковременной и долговременной памяти системы, к которым компоненты программного кода, состоящие из строк символов, могут обращаться соответствующим в конкретном случае образом. Здесь четко обрисовывается второй аспект косвенно поддерживаемой системой коммуникации различных компонентов программного кода, состоящих из строк символов, посредством естественного языка: Компонент программного кода, состоящий из строк символов, может в момент исполнения привязанного к нему набора функций обращаться к информации в форме естественного языка, а именно в форме ранее сохранных системой вводимых цепочек данных, которые были сохранены в процессе прежнего исполнения набора функций другого компонента программного кода, состоящего из строк символов.
Как уже было упомянуто, возможно, что реализуемый сегментом программного кода компонента программного кода, состоящего из строк символов, набор функций предоставляет возвращаемое значение, и например, сохраняет в системе, так что выполняемые впоследствии компоненты программного кода, состоящие из строк символов, могут обращаться к нему. Такое возвращаемое значение может включать в себя выражение на естественном языке или быть помечены выражением на естественном языке. Также и логические или числовые значения могут служить в качестве возвращаемого значения; если такие возвращаемые значения аннотированы естественным языком, возможно простое обращение к ним при помощи естественного языка, например, в качестве параметра компонента программного кода, состоящего из строк символов, обращение к которому происходит позднее.
В соответствии с еще одной исполнительной формой можно настроить реализуемый сегментом программного кода компонента программного кода, состоящего из строк символов, набор функций таким образом, чтобы из полученной и сохраненной вводимой цепочки данных извлекалась контекстная информация с сохранением данной контекстной информации в системе. Извлечение контекстной информации может происходить, например, посредством данных, предварительно сохраненных в компоненте программного кода, состоящем из строк символов, и/или правил извлечения. Тем самым контекстная информация предоставляется дополнительным выполняемым впоследствии компонентам программного кода, состоящим из строк символов, в качестве дополнительного источника информации. Контекстная информация включает в себя преимущественно выражение на естественном языке. Определенным образом такой компонент программного кода, состоящий из строк символов, настроен на то, чтобы делать выводы из вводимой цепочки данных.
Компонент программного кода, состоящий из строк символов, может быть сформирован в соответствии с первой исполнительной формой обычным способом при помощи подходящего языка программирования. Данная форма программирования выбирается, как правило, чтобы предоставить базовые наборы функций. К ним относятся простые контрольные структуры, такие как условные операторы, циклы, и т.д.
То есть сегмент программного кода как минимум одного компонента программного кода, состоящего из строк символов, из множества компонентов программного кода, состоящих из строк символов, может реализовать контрольную структуру, управляющую исполнением программы, как, например, переход, цикл или условный оператор. В принципе такие контрольные структуры реализуются также посредством сегментов программного кода компонентов программного кода, состоящих из строк символов. В результате того, что, как описано ниже, контрольные структуры могут реализоваться родовым или специальным образом при помощи компонентов программного кода, состоящих из строк символов, процесс управления системой, а также описанный ниже процесс программирования естественным языком предоставляют в принципе полный набор функций языка программирования высокого уровня.
Сегмент программного кода компонента программного кода, состоящего из строк символов, может, например, реализовать условный оператор, например, запрос условия. Условие, определяемое условным оператором, может быть запрошено в соответствии с первым вариантом посредством набора функций, реализуемого сегментом программного кода компонента программного кода, состоящего из строк символов. Таким образом имеется возможность реализации и запроса весьма специальных условий простым способом.
Это касается, в частности, таких условий, которые не могут быть сформулированы при помощи родовой формы, например, «если а<b, то», или такая формулировка проблематична.
Например, условие типа «если снаружи светло, то…» может быть запрошено при помощи компонента программного кода, состоящего из строк символов, сегмент программного кода которого реализует набор функций запроса расположенного снаружи сенсора уровня освещения. Для предоставления контрольной структуры на основании данного условия генератор кода впоследствии должен всего лишь при составлении программного кода для связанной с цепочкой знаков программирования программы составить запрос условия и ввести метод executeCodesegment(), который обращается к сегменту программного кода компонента программного кода, состоящего из строк символов, в качестве условия.
В соответствии с вторым вариантом определяющее условного оператора условие может быть определено как минимум при помощи одного оператора и одного операнда, если сегмент программного кода как минимум одного компонента программного кода, состоящего из строк символов, реализует условного оператора. Другими словами, условие в данном случае имеет родовую форму „операнд 1 оператор операнд 2", то есть, например, „а<b". Поскольку также и в этом случае контрольная структура, то есть, например, запрос условия, предоставляется компонентом программного кода, состоящим из строк символов, операнды и оператор могут рассматриваться в качестве параметров, которые в ходе программирования естественным языком могут быть распознаны описанным ниже в общих чертах способом. Это может происходить, в частности, посредством уже описанных специфических методов распознавания параметров, которые предоставляются компонентами программного кода, состоящими из строк символов. Данный метод может, например, распознавать любые числовые операнды и предлагать на выбор любые общеизвестные операторы. Как еще подробнее описано далее, в качестве операндов могут также выбираться возвращаемые значения используемых ранее компонентов программного кода, состоящих из строк символов.
Разумеется, при помощи компонентов программного кода, состоящих из строк символов, реализуются не только запросы условия, но и любые другие условные контрольные структуры, как, например, циклы („while", „foreach", и т.д.). В отличие от запроса условия в связи с контрольными структурами циклов после исполнения блока циклов вновь проверяется условие цикла. Если оно продолжает выполняться, происходит повторение цикла. Возможно, что условие цикла после одного или нескольких повторений цикла больше не выполняется, например, тогда, когда наборы функций выполненных в пределах блока циклов компонентов программного кода, состоящих из строк символов, изменяют один или несколько значений, которые проверяются в связи с условием цикла. Изменение как минимум одного такого значения может происходить также при помощи набора функций компонента программного кода, состоящего из строк символов, который реализует цикл, например, посредством увеличения показателя счетчика циклов. Общая форма цикла может быть реализована, например, следующим образом:
Класс „Loop" (цикл) является при этом конкретной реализацией компонента программного кода, состоящего из строк символов, для реализации цикла и может реализовать различные вариации циклов, как, например, циклы „do while"-, „repeat"-, „for each" и подобные им.
Программирование на естественном языке посредством компонентов программного кода, состоящих из строк символов, как подробно описано ниже, делает возможным аналогичным способом процесс, настроенный на результат. То есть также и так называемые „EventListener" (слушатели событий) могут быть отображены при помощи компонентов программного кода, состоящих из строк символов. То же самое действительно для параллельной обработки различных процессов.
Как изложено ниже, данное изобретение предлагает также возможность программирования исключительно при помощи естественного языка, то есть создавать новые компоненты программного кода, состоящие из строк символов, на основании уже имеющихся компонентов программного кода, состоящих из строк символов,. Таким образом, становится возможным как бы программирование при помощи естественного языка, которое практически не требует опыта программирования и тем самым доступно для широкого спектра пользователей. В комбинации с основной концепцией компонента программного кода, состоящего из строк символов, тем самым дополнительно упрощается расширение существующих систем.
В соответствии с исполнительной формой процесс программирования на естественном языке включает в себя следующие шаги:
Предоставляется большое число компонентов программного кода, состоящих из строк символов, описанного выше вида, то есть каждый из компонентов программного кода, состоящий из строк символов, из множества компонентов программного кода, состоящих из строк символов, включает в себя при этом одну определяющую строку символов, которая включает в себя выражение на естественном языке, и один однозначно связанный с определяющей строкой символов сегмент программного кода, который реализует набор функций, связанный с выражением на естественном языке. В следующем шаге цепочка знаков программирования на естественном языке вводится в систему, которая настроена таким образом, чтобы сохранять и обрабатывать множество компонентов программного кода, состоящих из строк символов.
Понятие «цепочки знаков программирования на естественном языке» обозначает при этом в связи с данным изобретением, как и прежде обозначенное понятие «выражение на естественном языке», в принципе выражение, включающее одно или несколько слов на естественном языке. Слова при этом могут опять же быть внесены в их основной форме или выражение может включать в себя, по меньшей мере частично, грамматически верное предложение или множество таких предложений. «Цепочкой знаков программирования» это выражение называется потому, что это выражение, как описано ниже, используется для программирования, то есть для составления программы, выполняемой вычислительным блоком, и поэтому может рассматриваться как «программный код» «языка программирования», причем языком программирования в связи с данным изобретением является естественный язык.
Во время или после ввода цепочки знаков программирования выбираются один или несколько компонентов программного кода, состоящих из строк символов из множества компонентов программного кода, состоящих из строк символов, если цепочка знаков программирования включает в себя - в сущности - по меньшей мере одну частичную цепочку данных определяющей строки символов компонента программного кода, состоящего из строк символов. Другими словами, проводится поиск совпадений между цепочкой знаков программирования и определяющими строками символов компонента программного кода, состоящего из строк символов - на основании цепочки данных, и при их наличии, выбираются соответствующие компоненты программного кода, состоящие из строк символов. Это также можно описать так, что «обращение» к компонентам программного кода, состоящим из строк символов, происходит как бы при помощи цепочки знаков программирования.
Разумеется, что поскольку речь идет всегда о естественном языке, соответствие части цепочки знаков программирования частичной цепочке данных компонента программного кода, состоящего из строк символов, не всегда должно быть стопроцентным. Может быть предусмотрено, что такое совпадение должно всего лишь превышать заданный порог в соответствии с заданным критерием сходства. В качестве критерия сходства для сравнения цепочки знаков программирования с определяющей строкой символов компонента программного кода, состоящего из строк символов, могут применяться, как описано выше в связи с первым вариантом процесса управления системой в соответствии с изобретением, известные в современных техниках критерии сходства. То же самое действительно для процесса сравнения цепочки знаков программирования с определяющей строкой символов; для этого в современных техниках известны многочисленные процессы, например, обычный процесс сопоставления с образцом. Заданный порог, который, например, можно задать посредством числового значения между 0 и 1 в зависимости от применяемого критерия сходства, может изменяться. Специальные критерии сходства или процессы сравнения не являются предметом данного изобретения. В простейшем случае цепочка знаков программирования может быть проанализирована на предмет того, содержит ли она заданную часть выражения на естественном языке определяющей строки символов в точности или аппроксимативно. Точно означает, например, дословное соответствие. Аппроксимативно может, например, означать, что грамматические отклонения (например, единственное/множественное число, падеж, склонение и т.д.) допустимы и, например, знаки препинания, такие как запятая или т.п., игнорируются. Также синонимы или понятия могут считаться схожими.
В дальнейшем шаге процесса в завершении создается связанная с компонентом программного кода, состоящим из строк символов, программа, на основе сегмента или сегментов программного кода как минимум одного выбранного компонента программного кода, состоящего из строк символов.
Соответствующая система для программирования на естественном языке включает в себя множество описанных выше компонентов программного кода, состоящих из строк символов. Система также включает в себя устройство ввода для введения цепочки знаков программирования на естественном языке и связанное с устройством ввода управляющее устройство.
Устройство ввода может включать в себя редактор, который настроен таким образом, чтобы редактировать цепочку знаков программирования, в частности в отношении ввода или выбора параметров для уточнения предоставляемого сегментом программного кода выбранного компонента программного кода, состоящего из строк символов, набора функций, как это будет дополнительно подробно описано ниже.
Управляющее устройство настроено таким образом, чтобы сохранять компоненты программного кода, состоящие из строк символов, и обрабатывать заданную цепочку знаков программирования. Управляющее устройство настроено также таким образом, чтобы выбирать как минимум один компонент программного кода, состоящий из строк символов, если введенная цепочка знаков программирования включает в себя как минимум одну частичную строку символов определяющей строки символов компонента программного кода, состоящего из строк символов, описанным выше способом.
Далее частью системы для не менее чем одного заданного языка программирования являются генератор кода и компилятор, которые настроены, чтобы создавать связанную с цепочкой знаков программирования программу, на основании сегмента или сегментов программного кода как минимум одного выбранного компонента программного кода, состоящего из строк символов.
Данный аспект описанного выше изобретения отличается, таким образом, в корне от современных техник. В них в основном предпринимаются попытки на основании процесса искусственного разума «понять» ввод на естественном языке, то есть проанализировать лингвистически и тем самым распознать значение ввода. В дальнейшем шаге предпринимается попытка передать это значение программному коду. Предлагаемый здесь образ действий, напротив, не зависит от «понимания», а оперирует строго детерминистически - без всякой опасности семантического искажения значения ввода. Введенная цепочка знаков программирования не анализируется лингвистически или семантически, а лишь сравнивается на основании сравнения цепочки данных с определяющими строками символов сохраненного компонента программного кода, состоящего из строк символов. Это, с одной стороны, практически не требует расчетного времени, а с другой стороны, очень просто в реализации.
Данное изобретение предлагает дальнейшие преимущества. Предлагаемый подход в высшей степени модульный. Компоненты программного кода, состоящие из строк символов, независимы друг от друга. Различные разработчики могут независимо друг от друга в различных местах и в различное время разрабатывать новые компоненты программного кода, состоящие из строк символов, и добавлять их в систему. Как впоследствии описано еще подробнее, из простых компонентов программного кода, состоящих из строк символов, каждый из сегментов программного кода которых реализует элементарный, узко ограниченный базовый набор функций, посредством программирования на естественном языке могут быть созданы новые более сложные компоненты программного кода, состоящие из строк символов, и добавлены в систему.
Сегменты программного кода компонентов программного кода, состоящих из строк символов, в соответствии с данным процессом примерно соответствуют реализуемым в машинном языке элементарным методам в языках программирования высокого уровня. Чем больше компонентов программного кода, состоящих из строк символов, включает в себя система, и чем разнообразнее они, тем больше и многообразнее возможности программирования на естественном языке в рамках предложенной выше системы.
Основной целью данного аспекта настоящего изобретения является то, что пользователи, которые не имеют специальных знаний в сфере программирования, могут сами при помощи естественного языка на основании предоставляемых разработчиками компонентов программного кода, состоящих из строк символов, составлять программы. Ожидается, что таким образом будет значительно снижена сложность систем программного обеспечения в различных областях применения, а также связанные с этим время и стоимость разработки. Новые требования или небольшие изменения в существующих системах не требуют в принципе изменения, возможно, уже на протяжении длительного времени применяемой и многократно измененной базовой архитектуры, а лишь дополнения одного или другого компонента программного кода, состоящего из строк символов, и создания основанных на этом дополнений - посредством составленных простым способом на естественном языке программ. Далее, больше практически нет потребности в комментировании - по большей части требующего больших временных затрат - созданных программных кодов, поскольку программирование производится посредством естественного языка и программа тем самым как бы сама себя объясняет.
Как уже упомянуто в начале, в соответствии с предпочитаемой исполнительной формой по меньшей мере один из компонентов программного кода, состоящих из строк символов, настраивается таким образом, чтобы поддерживать ввод параметров, при помощи которого набор функций, предоставляемый сегментом программного кода избранных компонентов программного кода, состоящих из строк символов, в процессе программирования на естественном языке может динамично уточняться. Предпочтительно это происходит при помощи собственного метода ввода параметров. В соответствии с этой исполнительной формой процесс включает в себя поэтому шаг введения по меньшей мере одного параметра для уточнения набора функций, предоставляемого сегментом программного кода выбранных компонентов программного кода, состоящих из строк символов. Этот шаг предпринимается во время или после введения цепочки знаков программирования, и до шага создания цепочки знаков программирования связанной программы.
Ввод параметров может производиться специально различными способами, как это уже было описано выше.
Вышеописанный процесс может использоваться для программирования обычных приложений, например, для программирования так называемых приложений для мобильных устройств. В шаге создания программы, связанной с цепочкой знаков программирования, также создается на заданной платформе выполняемый программный код. Как уже упомянуто, система может включать в себя генератор кода и компилятор для любого языка программирования и среды выполнения.
С другой стороны, посредством программирования на естественном языке возможно, как уже было описано выше, создание новых компонентов программного кода, состоящих из строк символов, на основании уже имеющихся компонентов программного кода, состоящих из строк символов. Для этого задается новая определяющая строка символов для вновь создаваемого компонента программного кода, состоящего из строк символов, и многие компоненты программного кода, состоящие из строк символов, выбираются при помощи введения соответствующей цепочки знаков программирования на естественном языке описанным выше способом. Новый сегмент программного кода для вновь создаваемого компонента программного кода, состоящего из строк символов, создается в этом случае на основе программного кода, который автоматически возникает в шаге создания программы, связанной с цепочкой знаков программирования.
Предпочтительная исполнительная форма системы, которая настроена для обработки естественного языка, включает в себя множество описанных выше компонентов программного кода, состоящих из строк символов, которые встроены в систему. Компоненты программного кода, состоящие из строк символов, включают в себя при этом, как уже упомянуто, определяющую строку символов, которая содержит выражение на естественном языке, и один однозначно связанный с определяющей строкой символов сегмент программного кода, который реализует набор функций, связанный с выражением на естественном языке. По меньшей мере один компонент программного кода, состоящий из строк символов, из множества компонентов программного кода, состоящих из строк символов, включает в себя метод ввода параметров, благодаря чему этот компонент программного кода, состоящий из строк символов, настраивается таким образом, чтобы поддерживать ввод параметров, при помощи которых может быть уточнен предоставленный сегментом программного кода данного компонента программного кода, состоящего из строк символов, набор функций.
Система настроена в соответствии с исполнительной формой, чтобы при получении вводимой цепочки данных, которая в соответствии с заданным критерием сходства демонстрирует заданное сходство с определяющей строкой символов, исполнять реализуемый сегментом программного кода набор функций.
Как уже упомянуто выше, система может включать в себя любое число таких компонентов программного кода, состоящих из строк символов. Каждый из них образует капсулированную и функциональную единицу и может поэтому предоставляться независимыми разработчиками и таким образом расширяется набор функций всей системы. Как также уже было упомянуто, возможно обращение набора функций компонента программного кода, состоящего из строк символов, к набору функций еще одного компонента программного кода, состоящего из строк символов, путем создания соответствующей вводимой цепочки данных и передачи системе в качестве вводимой цепочки данных. Другими словами, обращение компонента программного кода, состоящего из строк символов, к другому компоненту программного кода, состоящему из строк символов, происходит не напрямую, а всегда косвенно, через систему. То есть не существует зависимостей между отдельными компонентами программного кода, состоящими из строк символов, которые следует учитывать при реализации компонента программного кода, состоящего из строк символов. Каждый из компонентов программного кода, состоящих из строк символов, может при этом предлагать специальное решение специальной частичной проблемы. Посредством соответствующего сочетания наборов функций различных компонентов программного кода, состоящих из строк символов, таким образом могут в полной мере обрабатываться сложные ситуации. Недостающие на настоящий момент наборы функций могут в любое время дополняться внедрением новых компонентов программного кода, состоящих из строк символов, без непосредственного изменения уже имеющихся компонентов программного кода, состоящих из строк символов, или системы.
В соответствии с исполнительной формой система включает в себя управляющее устройство, которое настроено таким образом, чтобы получать вводимую цепочку данных, которая содержит выражение на естественном языке. Управляющее устройство также настроено таким образом, чтобы сравнивать вводимую цепочку данных с определяющей строкой символов предоставленного в системе компонента программного кода, состоящего из строк символов, в соответствии с заданным критерием сходства и выполнять реализуемый сегментом программного кода соответствующего компонента программного кода, состоящего из строк символов, набор функций в том случае, если вводимая цепочка данных демонстрирует заданный критерий сходства с определяющей строкой символов в соответствии с заданным критерием сходства.
В соответствии с еще одной исполнительной формой система включает в себя устройство ввода. Устройство ввода настроено таким образом, чтобы получать ввод данных пользователя на естественном языке, извлекать из него вводимую цепочку данных, которая содержит выражение на естественном языке, и передавать эту вводимую цепочку данных на управляющее устройство. Такое устройство ввода может, например, включать в себя устройство распознавания речи обычного типа, которое превращает распознанную при помощи микрофона речь в соответствующую цепочку данных. Кроме того, редактор, который позволяет введение при помощи клавиатуры или подобного, служить в качестве конечного устройства ввода для системы.
Система может в соответствии с исполнительной формой включать в себя еще один класс устройств ввода, которые настроены таким образом, чтобы, например, получать при помощи сенсора сигнал из окружающей среды, извлекать из него вводимую цепочку данных, которая содержит выражение на естественном языке, и передавать эту вводимую цепочку данных на управляющее устройство. В еще более общем виде может быть предусмотрено конечное устройство ввода, которое настроено таким образом, чтобы получать любой триггерный сигнал, извлекать зависящую от триггерного сигнала вводимую цепочку данных, которая содержит выражение на естественном языке, и передавать вводимую цепочку данных в систему. Триггерный сигнал может быть сигналом окружающей среды, который, например, показывает изменение среды (например, в отношении освещения, тепла, шума и т.д.) В качестве альтернативы такой триггерный сигнал может также посылаться системой, чтобы побудить устройство ввода создать вводимую цепочку данных, которая, например, описывает актуальное состояние системы устройства ввода (например, «вкл./выкл.» в случае устройства освещения; «отрыто/закрыто» в случае окна и т.д.)
Здесь видна еще одна особенность описанной здесь системы. Не только пользователь-человек, но и технические устройства общаются в качестве пользователей с управляющим устройством системы на основании выражений на естественном языке. Управляющее устройство системы не различает при этом между вводом пользователя-человека и вводом пользователя в виде технического устройства, а обрабатывает полученную вводимую цепочку данных, содержащую выражение на естественном языке, идентичным образом. Например, может быть предоставлено конечное устройство ввода, которое распознает температуру, освещение, влагу, шум или схожие параметры окружающей среды, описывает естественным языком, и передает управляющему устройству системы. В качестве реакции система может обратиться к соответствующему компоненту программного кода, состоящему из строк символов, и тем самым управлять, например, набором функций используемого устройства и/или другого устройства.
Система может также включать в себя устройство вывода, которое настроено таким образом, чтобы выводить выходящий сигнал пользователю на естественном языке, чтобы поддержать диалог между пользователем и компонентом программного кода, состоящим из строк символов. Устройство вывода может при этом, в частности, предоставлять обычный вывод языка через динамик или подобное. Также возможен ввод текста через дисплей или подобное. Разумеется, что система также может включать в себя комбинированное устройство ввода и вывода.
Как уже многократно упомянуто, система может включать в себя технические устройства любого типа, которые настроены таким образом, чтобы управляться при помощи набора функций, который реализуется сегментом программного кода компонента программного кода, состоящего из строк символов. Описанный процесс предназначен, в частности, для управления роботами. Также и управление бытовыми приборами или бытовой электронной аппаратурой может происходить при помощи описанного процесса. Кроме того, имеется ряд преимуществ при применении вышеописанного процесса для реализации экспертных систем. В частности, благодаря тому, что компоненты программного кода, состоящие из строк символов, могут интегрироваться в систему различными пользователями, могут покрываться различные области знаний, которые представлены отдельными пользователями, объединяться простым способом в сеть, чтобы тем самым объединять различные, до сих пор только отдельно имеющиеся области знаний простым способом.
Краткое описание фигур
Изобретение далее описано в качестве примеров с ссылкой на приложенные фигуры на примере некоторых примеров исполнения. Фигуры отображают:
Фиг. 1 схематично отображает предпочитаемую исполнительную форму содержащейся в изобретении структуры данных;
Фиг. 2 схематично отображает различные компоненты первой предпочитаемой исполнительной формы содержащейся в изобретении системы;
Фиг. 3 иллюстрирует шаги первой предпочитаемой исполнительной формы содержащегося в изобретении процесса при применении системы из фиг. 2,
Фиг. 4 иллюстрирует шаги второй предпочитаемой исполнительной формы содержащегося в изобретении процесса;
Фиг. 5 отображает компоненты второй предпочитаемой исполнительной формы системы, содержащейся в изобретении, для программирования на естественном языке, и
Фиг. 6 иллюстрирует шаги третей предпочитаемой исполнительной формы процесса для программирования на естественном языке при применении системы из фиг. 5.
Подробное описание изобретения
Фиг. 1 схематично отображает предпочитаемую исполнительную форму структуры данных 10 в форме компонента программного кода, состоящего из строк символов, 10. Компонент программного кода, состоящий из строк символов, включает в себя определяющую строку символов 12, которая содержит выражение 13 на естественном языке. Кроме того, компонент программного кода, состоящий из строк символов, включает в себя сегмент программного кода 14, который реализует связанный с выражением 13 на естественном языке набор функций. В завершение компонент программного кода, состоящий из строк символов, включает в себя метод 16 для ввода параметров.
Компонент программного кода, состоящий из строк символов, 10 образует неразрывную капсулированную единицу, состоящую из определяющей строки символов 12 с выражением 13 на естественном языке и сегментом программного кода 14, который реализует значение выражения на естественном языке 13. Компонент программного кода, состоящий из строк символов, реализуется технически как один компонент, который скрывает внутреннюю реализацию вовне. Внутренняя реализация состоит, например, из набора методов, который реализует сегмент программного кода 14 компонента программного кода, состоящего из строк символов, 10. Определяющая строка символов 12 служит как бы местом связывания вводимой цепочки данных на естественном языке, для обращения к набору функций компонента программного кода, состоящего из строк символов, 10, как это более подробно описывается далее в связи с фиг. 3. Таким образом, компонент программного кода, состоящий из строк символов, 10 всегда представляет собой завершенную, в высшей мере капсулированную и функциональную единицу. Компонент программного кода, состоящий из строк символов, 10 можно интегрировать в систему 100 (ср. фиг. 2) при помощи Plug-and-Play известным в сущности способом.
Компонент программного кода, состоящий из строк символов, 10 может предоставляться при помощи обычного языка программирования, как это далее в качестве примера отображается на примере С++.
Для реализации компонента программного кода, состоящего из строк символов, 10 в С++ определяется абстрактный класс, который служит базовым классом для конкретных компонентов программного кода, состоящих из строк символов, 10:
Конкретные компоненты программного кода, состоящие из строк символов, реализуют впоследствии этот абстрактный класс.
В качестве примера для определяющей строки символов при помощи выражения на естественном языке «Прибавь число к другому числу» реализуется класс «MyCPlusPlusAddition». Метод getSentence() выдает назад выражение на естественном языке.
Метод collectParameter(…) служит в данном примере для того, чтобы собрать необходимые параметры функций, которые необходимы для выполнения кодового сегмента. При этом введенный параметр может быть проверен на его правильность в отношении ожидаемого типа параметра, чтобы избежать ошибочного ввода данных. В данном примере, например, в рамках метода collectParameter(…), удалось проверить, что были заданы именно два параметра в форме числовых значений, а не просто произвольные цепочки данных.
Метод executeCodesegment()) служит для реализации собственного набора функций компонента программного кода, состоящего из строк символов, 10, а именно сложения двух чисел.
Разумеется, что изложенная выше лишь в качестве примера концепция компонента программного кода, состоящего из строк символов, может быть реализована не только в С++, а также посредством любого обычного языка программирования, как, например, PHP, Visual Basic, С#, Objective-C или подобного.
В качестве альтернативы программирования компонента программного кода, состоящего из строк символов, при помощи обычного языка программирования, компонент программного кода, состоящий из строк символов, может быть также запрограммирован при помощи естественного языка, как это впоследствии еще подробно описывается в связи с фиг. 4.
Фиг. 2 показывает в качестве примера систему 100, в которую встроены различные компоненты программного кода, состоящие из строк символов, 10, 10', 10''. Пользователь 40, 42 может при помощи естественного языка общаться с системой и тем самым вызывать реализацию различных наборов функций. При помощи этих наборов функций, которые в каждом случае реализуются сегментами программного кода компонентов программного кода, состоящих из строк символов, 10, 10', 10'', можно, в частности, управлять подключенными к системе 100 приборами 30, 32, 34, 36, как например, лампой 30, роботом 32, телевизором 34 или экспертной системой 36. В качестве пользователя могут выступать как пользователь-человек 42, так и настроенный соответствующим образом технический прибор 40.
Слаженное функционирование отдельных компонентов системы описывается далее в отношении фигур 3 и 4.
В фиг. 3 представлены шаги первой исполнительной формы процесса управления коммуникации пользователя 40, 42 с системой 100.
В шаге S1 предоставляется по меньшей мере один компонент программного кода, состоящий из строк символов, 10 системе 100. Компоненты программного кода, состоящие из строк символов, 10 включают в себя при этом определяющую строку символов 12, которая содержит выражение на естественном языке 13, и один однозначно связанный с определяющей строкой символов 12 сегмент программного кода 14, который реализует набор функций, связанный с выражением 13 на естественном языке.
Система 100 настроена таким образом, чтобы при получении вводимой цепочки данных, которая в соответствии с заданным критерием сходства демонстрирует заданное сходство с определяющей строкой символов 12, исполнять реализуемый сегментом программного кода 14 набор функций.
Для этого система 100 включает в себя управляющее устройство 20. Управляющее устройство 20 настроено таким образом, чтобы получать вводимую цепочку данных, которая содержит выражение на естественном языке. Управляющее устройство 20 также настроено таким образом, чтобы сравнивать вводимую цепочку данных 12 с определяющей строкой символов компонента программного кода, состоящего из строк символов, 10 в соответствии с заданным критерием сходства и выполнять реализуемый сегментом программного кода 14 задействованного компонента программного кода, состоящего из строк символов, 10 набор функций, если вводимая цепочка данных демонстрирует заданный критерий сходства с определяющей строкой символов 12 в соответствии с заданным критерием сходства.
В шаге S2 со стороны управляющего устройства 20 получается вводимая цепочка данных, например, в форме выражения на натуральном языке «Пожалуйста, включи телевизор» пользователя-человека 42. Ввод вводимой цепочки данных может поддерживаться при помощи устройства ввода 50, 52, которое, например, настроено так, чтобы распознавать произносимое пользователем 42 предложение «Пожалуйста, включи телевизор», например, при помощи микрофона, и превращать его в соответствующую цепочку данных, например, с помощью обычной программы распознавания речи. Переформированная цепочка данных, «Пожалуйста, включи телевизор», передается потом устройством ввода 50, 52 управляющему устройству 20 в качестве вводимой цепочки данных.
В шаге S3 управляющее устройство сравнивает вводимую цепочку данных с определяющей строкой символов одного или нескольких компонентов программного кода, состоящих из строк символов 10, 10', 10'' в соответствии с заданным критерием сходства.
Сравнение выражений на естественном языке может, например, быть проведено при помощи известного процесса сопоставления с образцом.
В связи с проиллюстрированным в фиг. 2 примером следует предположить, что в систему 100 интегрирован компонент программного кода, состоящий из строк символов, 10 который содержит определяющую строку символов 12 с выражение на естественном языке «Включи телевизор». Данная определяющая строка символов 12 связана с соответствующим сегментом программного кода 14, который реализует набор функций для включения телевизора 34, подключенного к системе 100.
Сравнение вводимой цепочки данных «Пожалуйста, включи телевизор» с определяющей строкой символов «Включи телевизор» показывает, что вводимая цепочка данных полностью включает в себя определяющую строку символов, что в данном случае интерпретируется как достаточное сходство.
Разумеется, что для сравнения цепочек данных, каждая из которых содержит выражения на естественном языке, могут быть использованы различные критерии сходства и различные процессы сравнений. Специалисту такие процессы, которые не являются предметом данного изобретения, сами по себе известны. Кроме того, известно, что сравниваемые выражения могут быть упрощены перед проведением сравнения, при помощи, например, зачеркивания (в рассматриваемом случае бессодержательных) слов-вставок, как «пожалуйста», артикли и т.п. Кроме того, сравниваемые выражения могут быть упрощены грамматически, при помощи, например, указания глаголов только в начальной форме.
Если, как в описанном выше случае, вводимая цепочка данных «Пожалуйста, включи телевизор» показывает заданное сходство с определяющей строкой символов «Включи телевизор» в соответствии с заданным критерием сходства, управляющее устройство проводит в шаге S4 реализуемый соответствующим сегментом программного кода 14 набор функций, в результате чего включается телевизор 34.
В случае, если в шаге S3 невозможно найти достаточно схожей определяющей строки символов компонента программного кода, состоящего из строк символов, управляющее устройство 20 может дать пользователю соответствующий сигнал. Если же система, напротив, найдет большое число определяющих строк символов, каждая из которых показывает известное сходство с определяющей строкой символов, это также может быть выведено для пользователя. Пользователю в этом случае может быть предоставлена возможность выбрать тот компонент программного кода, состоящий из строк символов, который по его мнению наиболее подходит к его вводимой цепочке данных на основании соответствующей определяющей строки символов.
Вводимая цепочка данных с выражением на естественном языке может альтернативно создаваться также конечным устройством ввода, например, сенсором уровня освещения 40, и передаваться на управляющее устройство 20. Для этого конечное устройство ввода 40, если оно, например, распознает, что уровень освещения комнаты снижается, например, вечером или при сильной облачности, может создавать вводимую цепочку данных формы «темно» и передавать на управляющее устройство 20. Оно может, как изложено выше, провести поиск по интегрированным в систему компонентам программного кода, состоящим из строк символов, 10, 10', 10' на предмет того, не показывает ли один из этих компонентов программного кода, состоящих из строк символов, определяющей строки символов с достаточным сходством. Если это имеет место, управляющее устройство 20 может выполнить набор функций, однозначно связанный с этой определяющей строкой символов, в результате чего может быть, например, включена подключенная к системе 100 лампа 30. Кроме того, может быть предусмотрено, что прибор 40 передает данную вводимую цепочку данных на управляющее устройство 20 не автоматически, а лишь тогда, когда он получает соответствующий запрос управляющего устройства 20.
В качестве альтернативы к управлению техническими приборами могут применяться сегменты программного кода 14 компонента программного кода, состоящего из строк символов, 10, с той пользой, что реализуется набор функций, который делает возможным диалог между пользователем 42 и компонентом программного кода, состоящим из строк символов, 10. В частности, в связи с экспертной системой, например, в области медицины, такое применение дает определенные преимущества. В следующем примере это обозначено только вкратце и на основании примера.
Экспертная система 36 может описанным ниже способом коммуницировать с пользователем 42 с применением компонента программного кода, состоящего из строк символов, 10, 10'. Пользователь 42 может, например, обратиться к экспертной системе 36 через управляющее устройство 20 при помощи выражения «я думаю, я болен». Управляющее устройство 20 сравнивает включающую данное выражение вводимую цепочку данных с определяющими строками символов имеющегося компонента программного кода, состоящего из строк символов, 10 и находит, например, определяющую строку символов 12 компонента программного кода, состоящего из строк символов, 10 с выражением «я болен». Сегмент программного кода 14 данного компонента программного кода, состоящего из строк символов, 10 реализует разговор с пользователем 42, примерно следующим образом:
Пользователь: «я думаю, я болен»
Система: «Что с тобой, у тебя температура?»
Пользователь: „да"
Система: «Какая у тебя температура?
Пользователь: «38,5»
Система: «Как долго у тебя уже температура?»
Пользователь: «С обеда»
Система: «У тебя есть другие жалобы»
Пользователь: «Нет»
Система: «Тогда отдохни, может быть, тебе завтра будет лучше».
Выводимые значения системы могут быть выведены через соответствующее устройство выхода 50, 54, например, колонки 54, на естественном языке для пользователя. В качестве альтернативы вопросы и рекомендации могут быть показаны на мониторе.
Компонент программного кода, состоящий из строк символов, 10, обращение к которому произошло при помощи вводимой цепочки данных «я думаю, я болен», реализует диалог, который запрашивает общее состояние здоровья пользователя. Если при этом выясняются особенности, разговор может быть окончен, как описано. Однако, в случае, если разговор протекает следующим образом,
…
Система: «Что с тобой, у тебя температура?»
Пользователь: „да"
Система: «Какая у тебя температура?
Пользователь: «39,5»
Система: «Как долго у тебя уже температура?»
Пользователь: «Три дня»
Система: «У тебя есть другие жалобы»
Пользователь: «Да, болит голова и тело, насморк и кашель»,
сегмент программного кода 14 компонента программного кода, состоящего из строк символов, 10 может быть обучен настолько, что дальнейший разговор будет протекать следующим образом:
Система: «Твои симптомы могут указывать на грипп»…
Одновременно набор функций выполняемых в тот момент компонентов программного кода, состоящих из строк символов, 10 может быть настроен таким образом, чтобы передать вводимую цепочку данных с выражением «Грипп» на управляющее устройство 20. Таким образом может происходить обращение к набору функций данного компонента программного кода, состоящего из строк символов, 10, чтобы исследовать состояние здоровья пользователя 42 в связи с подозрением на наличие гриппа при помощи самостоятельного, предусмотренного специально для этой цели компонента программного кода, состоящего из строк символов, 10'. Данный набор функций может при помощи подходящего разговора запрашивать дальнейшую информацию о состоянии пользователя и делать соответствующие предложения действий.
Как правило, компонент программного кода, состоящий из строк символов, 10', который показывает определяющую строку символов с выражением «грипп», может обратиться к такой информации, которая уже была запрошена предыдущим компонентом программного кода, состоящим из строк символов, 10 (температура, какая, как долго, другие жалобы). Соответствующие, в принципе предусмотренные в наборе функций вопросы, могут тогда быть опущены. Для пользователя поэтому остается прозрачным, что компонент программного кода, состоящий из строк символов, 10 косвенно обратился к компоненту программного кода, состоящему из строк символов, 10'.
Как уже многократно упомянуто, компонент программного кода, состоящий из строк символов, может быть также запрограммирован при помощи естественного языка пользователем, как это впоследствии описывается в качестве примера и сперва в упрощенной форме на основании очень простого примера в связи с фиг. 4. Программирование на естественном языке также подробно описывается далее в связи с фигурами 5 и 6.
В первом шаге Т1 предоставляется множество компонентов программного кода, состоящих из строк символов, 10; 10', 10'' в системе 100. Эти компоненты программного кода, состоящие из строк символов, образуют основы программирования на естественном языке еще одного, нового компонента программного кода, состоящего из строк символов.
В связи с системой 100 в фигуре 2 предполагается, что в систему уже интегрированы различные компоненты программного кода, состоящие из строк символов, 10, 10', 10'', например, компонент программного кода, состоящий из строк символов 10, для включения телевизора 34. Он содержит определяющую строку символов 12 с выражением «включить телевизор» и связанный с ним сегмент программного кода, который реализует набор функций для включения телевизора 34.
Еще один компонент программного кода, состоящий из строк символов, 10', служит для того, чтобы настроить уровень освещения и осветительные приборы в помещении и содержит определяющую строку символов «Проверить освещение». Сегмент программного кода 14' данного компонента программного кода, состоящего из строк символов 10', реализует набор функций, который посылает запрос на сенсор освещения 40, передать актуальный уровень освещения в форме вводимой цепочки данных (включая выражение на естественном языке) управляющему устройству 20. Как уже упомянуто выше, в системе 100 может уже иметься еще один компонент программного кода, состоящий из строк символов 10'', который обрабатывает данную вводимую цепочку данных и, например, при получении выражения формы «темно» включает лампу 30, или в качестве реакции на выражение «очень светло» задействует устройство затемнения, например, жалюзи (не показано).
После этого пользователь 42 в шаге Т2 определяет новый компонент программного кода, состоящий из строк символов, при применении множества уже предоставляемых системой компонентов программного кода, состоящих из строк символов 10; 10', 10'' следующим способом:
В частичном шаге TS2.1 пользователь 42 задает теперь определяющую строку символов для вновь определяемого компонента программного кода, состоящего из строк символов, который содержит выражение на естественном языке. В данном примере данная определяющая строка символов может содержать, например, выражение «я хочу смотреть телевизор».
В следующем частичном шаге TS2.2 пользователь задает последовательность цепочек данных («цепочку знаков программирования») для определения сегмента программного кода вновь определяемого компонента программного кода, состоящего из строк символов. Каждая из цепочек данных последовательности цепочек данных содержит при этом выражение на естественном языке. Если цепочка данных последовательности цепочек данных в соответствии с заданным критерием сходства показывает заданное сходство с определяющей строкой символов компонента программного кода, состоящего из строк символов, 10 из множества компонентов программного кода, состоящих из строк символов 10; 10', 10'', то есть если «цепочка знаков программирования» включает в себя по меньшей мере одну частичную цепочку знаков программирования определяющей строки символов компонента программного кода, состоящего из строк символов, 10, сегмент программного кода вновь определяемого компонента программного кода, состоящего из строк символов, расширяется сегментом программного кода 14 компонента программного кода, состоящего из строк символов, 10 множества компонентов программного кода, состоящих из строк символов, 10; 10', 10''.
Конкретно в данном случае последовательность цепочек данных (цепочка знаков программирования) может звучать следующим образом («Проверить освещение», «Включить этот телевизор»). Цепочка данных «Проверить освещение» включает при этом в себя выражение «Проверить освещение» определяющей строки символов 12' описанного выше компонента программного кода, состоящего из строк символов, 10'. Впоследствии (еще пустой) сегмент программного кода определяемого компонента программного кода, состоящего из строк символов, будет дополнен сегментом программного кода компонента программного кода, состоящего из строк символов 10'. Аналогичным образом сегмент программного кода определяемого компонента программного кода, состоящего из строк символов, дополнительно будет дополнен сегментом программного кода компонента программного кода, состоящего из строк символов, 10, поскольку цепочка данных «Включить этот телевизор» содержит выражение «Включить телевизор» определяющей строки символов 12.
В следующем шаге Т3 в систему 100 описанным выше способом интегрируется вновь определяемый компонент программного кода, состоящий из строк символов.
Если пользователь 42 обратиться теперь к системе 100 при помощи выражения «я хочу смотреть телевизор», произойдет обращение к набору функций вновь определенного компонента программного кода, состоящего из строк символов. Он проверяет освещение при помощи запроса сенсору освещения 40. В зависимости от полученной в результате этого системой 100 вводимой цепочки данных («темно», «очень светло») будет включена лампа 30 либо опущены жалюзи. Затем будет включен телевизор 34.
Разумеется, что при помощи такого процесса можно запрограммировать значительно более сложные последовательности действий, исключительно при помощи естественного языка и с применением уже имеющихся компонентов программного кода, состоящих из строк символов. В частности, могут реализовываться также контрольные структуры, такие как ответвления, условные операторы, циклы и т.д. в форме компонентов программного кода, состоящих из строк символов, предпочтительно в начале процесса, в качестве базовых элементов и при применении обычного языка программирования. Эти основные компоненты могут затем использоваться в рамках последующего программирования новых компонентов программного кода, состоящих из строк символов, при помощи естественного языка.
Не давая дальнейших подробностей, новый компонент программного кода, состоящий из строк символов, может затем быть определен определяющей строкой символов «я хочу смотреть телевизор» альтернативно примеру выше при помощи следующей последовательности цепочек данных:
«Когда я в кабинете,
я настраиваю уровень освещения комнаты на лунную ночь.
Опускаю жалюзи и
включаю телевизор в кабинете.
Когда я в гостиной,
я включаю телевизор в гостиной».
Данный пример предусматривает, что в системе уже имеются компоненты программного кода, состоящие из строк символов, которые реализуют условного оператора («Если…»), а также местонахождение пользователя («в гостиной…», «в кабинете»), регулируемое включение освещения («настраиваю уровень освещения комнаты на лунную ночь») и жалюзи («опускаю жалюзи») и включение различных телевизоров («включаю телевизор в кабинете», «включаю телевизор в гостиной»), и к которым можно обратиться через соответствующие определяющие строки символов.
В фиг. 5 схематично изображены компоненты системы 200, которая позволяет программирование на естественном языке.
Программирование на естественном языке основывается в данном контексте в значительной мере на структуре данных, которые обозначаются в качестве компонентов программного кода, состоящих из строк символов, и которые выше уже в принципе были описаны.
Система 200 включает в себя управляющее устройство 260 с зоной памяти 270, устройством ввода 240, зоной памяти 230, а также генератором кода 282 и компилятором 284. Задачи и наборы функций отдельных компонентов описаны далее.
Устройство ввода 240 служит пользователю системы для того, чтоб ввести значение в систему. Ввод происходит, как изложено ниже, на естественном языке, при помощи цепочки знаков программирования на естественном языке, как, например, «Сложи два числа». Ввод может производиться через клавиатуру или т.п. или посредством языкового ввода.
Устройство ввода 240 включает в себя редактор 250, который, как изложено ниже, поддерживает коммуникацию пользователя с системой 200. Редактор 250 включает в себя, как правило, устройство вывода, например, дисплей, на который могут быть выведены вводимые пользователем данные, а также выводимые значения управляющего устройства 260.
Компонент программного кода, состоящий из строк символов 210, 210', 210'' уже был описан по отношению к фиг. 1.
Способ действия и преимущества использования метода 16 для ввода параметров станут очевидны ниже в связи с простым примером.
Компонент программного кода, состоящий из строк символов, реализует метод «collectParameter()» для создания и сбора параметров. Сегмент программного кода компонента программного кода, состоящего из строк символов, реализует в примере набор функций для вывода времени в одном или нескольких местах, которые могут быть введены в качестве параметра:
Метод 16 для ввода параметров имеет следующую форму:
Если в качестве цепочки знаков программирования или вводимой цепочки данных через редактор вводится, например, «сколько времени», система ищет при помощи алгоритма совпадения среди множества имеющихся компонентов программного кода, состоящих из строк символов, совпадение - и находит частичное соответствие с определяющей строкой символов указанного выше компонента программного кода, состоящего из строк символов: «Сколько сейчас времени в следующих городах?» После этого система обращается к методу «collectParameter» данного компонента программного кода, состоящего из строк символов.
Метод collectParameter проверяет на основании следующего программного кода, правильно ли начинается предложение, если нет, оно исправляется:
С возвращаемым значением «ok» редактор извещает систему, что введенные данные верны. Система со своей стороны передает редактору содержание аргумента «sentence». Редактор отображает исправления в редакторе и ждет ввода пользователя. Если пользователь задает слово «Швейцария», редактор посылает введенное значение системе. Система привязывает слово «Швейцария» к аргументу «receivedWord» и снова обращается к методу «collectParameter».
Метод 16 для ввода параметров исправляет грамматику на основании следующего программного кода и добавляет введенное значение в список выбранных городов:
Таким образом в редакторе отображается высказывание «Сколько сейчас времени в Швейцарии».
Предположим, пользователь вводит «Матта», происходит новое обращение к методу «collectParameter». Поскольку слово «Матта» не является правильным названием города, следующий программный код метода 16 для ввода параметров выдает сообщение об ошибке и передает системе предложенные исправления:
Система передает сообщение об ошибке и предложения редактору. Редактор выдает сообщение об ошибке и предложения:
Пользователь исправляет после этого введенные им данные на «Мальта» и редактор посылает исправленные данные системе. Контроллер снова привязывает слово «Мальта» к «receivedWord» и обращается к методу «collectParameter». Следующим программным кодом в список выбранных городов добавляется еще одно наименование и предложение исправляется грамматически:
Предложение выглядит теперь следующим образом: «Сколько сейчас времени в Швейцарии, на Мальте». Пользователь обозначает конец предложения при помощи вопросительного знака. Редактор посылает введенное значение системе. Происходит еще одно обращение к методу «collectParameter». Следующим программным кодом предложение исправляется грамматически и при помощи возвращаемого значения «EndOfSentence» система извещается о том, что ввод параметров окончен.
Система передает редактору содержание аргумента «предложение». Редактор показывает предложение и ждет данных пользователя.
В качестве альтернативы к применению метода 16 для ввода параметров может иметь место ввод параметров также и иным способом, при помощи управляющего устройства 260. Для этого метод компонента программного кода, состоящего из строк символов, помечается, например, при помощи маркировки «partOfSentence». Метод имеет параметр ввода и не имеет возвращаемого значения.
Таким образом, компонент программного кода, состоящий из строк символов, 210 передает управляющему устройству 260, что необходимо интерпретировать часть определяющей строки символов в качестве параметра и произвести распознавание параметра. Распознанный параметр должен быть связан генератором кода 282 с данным методом (далее в указанном в качестве примере программном коде вместо «компонента программного кода, состоящего из строк символов» появляется также понятие «SentenceComponent», которые следует считать синонимами).
Если представленный выше компонент программного кода, состоящий из строк символов, 210 «вывести цепочку данных на экран.» интегрируется в систему 200, после анализа она вноситься в регистрационную таблицу. Управляющее устройство 260 узнает через распознанную в процессе регистрации маркировку, что значение части предложения «цепочка данных» должна быть связана в качестве аргумента с методом «setOutput(String output)».
Если в целом в систему 200 будет интегрирован новый компонент программного кода, состоящий из строк символов, 210, он может быть проанализирован анализатором метаданных (не показано), и соответствующие данные будут сохранены для дальнейшего использования.
К метаданным относятся, например, названия классов, базовые классы, методы и переменные. Если в С++, например, поставляется компонент программного кода, состоящий из строк символов, посредством анализа прилагаемой декларации классов и их методов проводится поиск класса, который реализует абстрактный класс «SentenceComponent». Таким образом, анализатор метаданных С++ узнает класс как компонент программного кода, состоящий из строк символов. При этом происходит обращение к методу «getSentence», и определяющая строка символов, включая название класса, заносится в таблицу метаданных. Тем самым компонент программного кода, состоящий из строк символов, интегрируется в систему и может быть использован для программирования на естественном языке.
Анализаторы метаданных, которые есть для любого распространенного языка программирования, владеют техниками, которые позволяют получить доступ ко всем информациям через публичные элементы компонента программного кода, состоящего из строк символов. Для С++ для этого анализируется файл-декларация компонента программного кода, состоящего из строк символов, чтобы получить метаданные.
Современные обычные языки программирования сами предоставляют данную технику. В Java, например, все метаданные одного класса предоставляются через «Reflection».
Компонент программного кода, состоящий из строк символов, 210 для вывода актуального времени может, например, иметь следующую форму:
Метаданные метода executeCodesegment()) в языке программирования С++ могут в соответствии с этим выглядеть следующим образом:
Язык программирования = c++
Заголовочный файл = WhatTime.h
Наименование класса = WhatTime
Наименование метода = executeCodesegment
Тип возвращаемого значения = Time
Аргументы = отсутствуют
Анализатор метаданных предоставляет также метаданные для возвращаемого значения «Time»:
Язык программирования = c++
Заголовочный файл = time.h
Наименование класса = Time
Таким образом, анализатор метаданных и управляющее устройство располагают всей информацией о метаданных компонента программного кода, состоящего из строк символов.
Метод executeCodesegment() служит, как правило, для того, чтобы реализовать собственный набор функций компонента программного кода, состоящего из строк символов, 210, например, выдать распознанную цепочку данных в качестве параметра или сложить два числа.
Процесс программирования на естественном языке должен далее быть описан несколько подробнее, чем в отношении фиг. 4 на примере еще одного простого примера в связи с фиг. 6.
В первом шаге S601 в системе 200 предоставляется и регистрируется большое число компонентов программного кода, состоящих из строк символов, 210, 210', 210'' описанном выше способом, как, например компоненты программного кода, состоящие из строк символов, для предоставления актуального времени или для вывода цепочки данных на экран.
Во втором шаге S602 пользователь системы 200 задает цепочку знаков программирования на естественном языке через устройство ввода 240 в систему 200.
Цепочка знаков программирования может, например, начинаться с «Сколько времени…» Управляющее устройство 260 узнает ввод и сравнивает постоянно уже введенные части цепочки знаков программирования с определяющими строками символов имеющихся в системе компонентов программного кода, состоящих из строк символов 210, 210', 210''. В данном примере управляющее устройство 260 узнало бы, что имеется компонент программного кода, состоящий из строк символов, 210 с определяющей строкой символов «Сколько сейчас времени?» и предложило бы пользователю применить данный компонент программного кода, состоящий из строк символов. Данное предложение могло бы быть выведено, например, через редактор 250. В описанном выше примере пользователь принимает данное предложение.
Компонент программного кода с определяющей строкой символов «Сколько времени?» выбирается потому, что цепочка знаков программирования «сколько времени…» содержит по меньшей часть определяющей строки символов.
Цепочка знаков программирования дополняется соответствующим образом как «сколько сейчас времени?». Программирование на естественном языке может быть продолжено, например, путем введения пользователем «введи…».
Управляющее устройство 260 вновь распознает определяющую строку символов, которая частично совпадает с цепочкой знаков программирования, а именно «вывести цепочку данных на экран», и предлагает применить соответствующий компонент программного кода, состоящий из строк символов. Если пользователь принимает предлагаемый вариант, управляющее устройство 260 проводит, как уже в общих чертах описано выше, распознавание параметра «цепочка данных» и ожидает здесь, что пользователь либо введет заключенную в кавычки цепочку данных или переменную типа данных «String». Пользователь вводит «актуальное время» (возвращаемое значение компонента программного кода, состоящего из строк символов, «Сколько времени?») Цепочка знаков программирования будет после этого дополнена следующим образом: «сколько времени? вывести актуальное время на экран».
В этом проявляются два преимущественных аспекта описанного процесса. Компоненты программного кода, состоящие из строк символов, могут возвращать значение (указание времени, которое указывает настоящее время). Такие возвращаемые значения могут быть сохранены системой 200, например, в запоминающем устройстве 270. Предпочтительно такие возвращаемые значения аннотируются при помощи естественного языка, в настоящем случае «актуальное время». Таким образом, следующие компоненты программного кода, состоящие из строк символов, могут не только в принципе, но и простым способом, при помощи естественного языка, обращаться к таким возвращаемым значениям посредством определения параметров «цепочка данных» через выражение на естественном языке «настоящее время».
Вышеописанный пример показывает также, что шаги введения цепочки знаков программирования, а также выбора компонента программного кода, состоящего из строк символов, могут многократно сменять друг друга. Запрос и ввод параметра во время введения и/или после введения цепочки знаков программирования могут оставаться необходимыми.
В случае, если пользователь сигнализирует, что ввод цепочки знаков программирования окончен, в шаге S604 создается программа, связанная с цепочкой знаков программирования, на основании сегмента программного кода выбранного компонента программного кода, состоящего из строк символов.
Кроме того, генератор кода 282 генерирует для обоих компонентов программного кода, состоящих из строк символов, например, следующий программный код:
При этом переменная result_1 соответствует возвращаемому значению «актуальное время» компонента программного кода, состоящего из строк символов «сколько времени?» Соответствующий компилятор С++ 284 компилирует вышеуказанный программный код и сохраняет его в качестве исполнимого файла в предусмотренное для этого (не показанное) запоминающее устройство системы 200. Если исполняется исполнимый файл, на экране появляется актуальное время.
Арифметические расчеты могут быть указаны посредством цепочки знаков программирования на естественном языке, например, в форме «Сложи 20 и 5 и извлеки корень из суммы», или же - как это принято в математике - указаны в виде математической записи. Например, следующим образом:
Наряду с графическим изображением всех математических символов можно применить полученные ранее результаты в качестве переменных в формуле для дальнейшего расчета. Результаты могут также применяться в качестве параметра в следующем за ним компоненте программного кода, состоящем из строк символов.
Разумеется, что язык программирования, на котором созданы сегменты программного кода отдельного компонента программного кода, состоящего из строк символов, может отличаться от языка программирования, на котором генератор кода программного кода создает программный код для программы, программируемой на естественном языке описанным выше способом. Если оба языка программирования отличны, генератор кода добавляет в сегмент программного кода целевого языка программирования механизмы, которые позволяют обратиться к сегментам программного кода на другом языке программирования, например через прокси.
Как уже упомянуто, система может содержать генераторы кодов и компиляторы для различных целевых языков программирования (С++, С#, Java и т.д.) и платформы выполнения (Windows, Linux, Android, и т.д.), которые могут на выбор использоваться пользователем.
Далее описаны на основании примеров дальнейшие аспекты предложенного в этом документе процесса.
Контрольные структуры, в частности условные операторы, являются существенной частью обычных языков программирования. Как на основании примера представлено ниже, при помощи представленного здесь процесса программирования на естественном языке такие контрольные структуры могут быть предоставлены в полном объеме функций. Условные операторы реализуются также как компоненты программного кода, состоящие из строк символов. Для этого метод executeCodesegment(), например, в случае условного оператора, может быть помечен при помощи маркировки controlFlow = "IF". Тем самым дается указание генератору кода 282 ввести метод executeCodesegment() в качестве условие утверждения IF:
Родовые условия формы „а<b" могут реализоваться простым образом посредством того, что соответствующий компонент программного кода, состоящий из строк символов, демонстрирует метод для запроса параметров, который настроен таким образом, чтобы посылать запрос операнду и оператору такого условия во время программирования на естественном языке. Число и вид операндов и операторов может при этом варьироваться и также быть запрошено в ходе программирования. Таким образом могут быть построены любые условные высказывания.
Компоненты программного кода, состоящие из строк символов, позволяют также проверять условия, которые не следуют родовой схеме, а более схожи с естественным языком, например, условие формы «если снаружи светло, то…». Оно может быть реализовано, например, при помощи компонента программного кода, состоящего из строк символов, следующим образом:
Класс «OutdoorBrightnessSensor» касается сенсора интенсивности наружного освещения. Метод «isBright()» измеряет уровень освещения и возвращает значение «true», если уровень освещения не превышает заданную интенсивность.
Генератор кода создает для этого следующий программный код в С++:
Если метод executeCodesegment() возвращает булево значение истинности «true», выполняются операторы в пределах блока. Эти операторы исходят от компонентов программного кода, состоящих из строк символов, которые могут быть выбраны на основании введенной после понятия «тогда» цепочки знаков программирования.
В соответствии с еще одним аспектом часть компонентов программного кода, состоящих из строк символов, может быть технически обобщена в модуле. При регистрации модуля в системе все содержащиеся в данном модуле компоненты программного кода, состоящие из строк символов, объединяются в одну группу в таблице метаданных.
Все компоненты программного кода, состоящие из строк символов, в пределах группы знают места соединения других компонентов программного кода, состоящих из строк символов. Между компонентами программного кода, состоящими из строк символов, одной группы могут предполагаться скрытые связи. Компонент программного кода, состоящий из строк символов, «добавь поле символов» скрыто связывается с компонентом программного кода, состоящим из строк символов, «Создай приложение»; следовательно, создаваемое поле ввода связывается с создаваемым приложением, при этом вводимый параметр не должен явно определять это. Кроме того, управляющее устройство 260 может на основании группировки скрыто связать возвращаемое значение первого компонента программного кода, состоящего из строк символов, со следующим за ним компонентом программного кода, состоящим из строк символов, в той же группе. Еще один аспект, который может быть распознан при помощи программирования на естественном языке в предлагаемой здесь форме, это параллельная обработка различных задач.
Для управления сложными системами, например, для управления роботом-гуманоидом, должны часто одновременно протекать несколько программных процессов. При этом речь идет о нескольких процессах для совместного выполнения одной задачи. Параллелизация программных процессов может быть легко реализована в современных языках программирования. В языке Java, например, для программирования процесса предоставляется абстрактный класс «Thread» с единственным методом run() для реализации параллельно выполняемого программного кода.
Чтобы генерировать процесс, должен быть создан новый класс, который реализует абстрактный класс Thread и его метод run(). В соответствии с ним должен быть создан экземпляр объекта класса и впоследствии произойти обращение к методу start() класса Thread.
Например, для компонента программного кода, состоящего из строк символов, с определяющей строкой символов «Опустить жалюзи» генерируется следующий программный код, при условии, что его наименованием класса является «JalousieDown»:
При помощи следующего компонента программного кода, состоящего из строк символов, указанного при помощи определяющей строки символов, может быть реализована параллельная задача.
Создай следующую параллель:
я настраиваю уровень освещения комнаты на лунную ночь.
Опустить жалюзи
Посредством ввода определяющей строки символов «Создай следующую параллель» генератор кода Java создает по одному процессу для каждого компонента программного кода, состоящего из строк символов, и добавляет соответствующий компонент программного кода, состоящий из строк символов, в рамках методов run().
Тем самым одновременно осуществляются оба компонента программного кода, состоящие из строк символов, то есть осуществляемые соответствующим сегментом программного кода наборы функций, с исполнением метода start().
Как уже много раз было указано, существует возможность создания новых компонентов программного кода, состоящих из строк символов, из существующих компонентов программного кода, состоящих из строк символов, при помощи описанного процесса. Чтобы создать новый компонент программного кода, состоящий из строк символов, для новой определяющей строки символов указываются один или несколько простых компонентов программного кода, состоящих из строк символов. Генератор кода 282 создает для этого для нового компонента программного кода, состоящего из строк символов, метод «getSentence» для возврата новой определяющей строки символов и метода «executeCodesegment()» для реализации набора функций, который представляет собой комбинацию набора функций, предоставляющей отдельные компоненты программного кода, состоящие из строк символов, которые могут быть привлечены для создания новых компонентов программного кода, состоящих из строк символов.
В соответствии с очень простым, только на основании примеров описанным процессом, для новой определяющей строки символов «Вывод времени на экран» может быть создан компонент программного кода, состоящий из строки символов, на основании обоих уже описанных компонентов программного кода, состоящих из строк символов, «сколько сейчас времени» и «вывести цепочку данных на экран».
Соответствующая цепочка знаков программирования может, например, выглядеть так:
«Создай новый компонент программного кода, состоящий из строк символов, для определяющей строки символов D и цепочки знаков программирования Р», причем D и Р соответствуют параметрам типа цепочка данных.
Спецификация D = «Вывод на экран», Р = «сколько сейчас времени? вывести цепочку данных на экран»,
имела бы желаемый эффект:
Создается новый компонент программного кода, состоящий из строк символов, с определяющей строкой символов «Вывод времени на экран». Сегмент программного кода соответствует программному коду, производимому генератором кода, когда к программированию на естественном языке, как описано выше, добавляется цепочка знаков программирования «сколько сейчас времени? вывести цепочку данных на экран».