(57)【要約】  システム（100）の自然言語による制御のための方法は該システム（100）内に複数の文字列プログラムコードコンポネント（10、10'、10''）を用意するステップ（S1) を包含する。一つの文字列プログラムコードコンポネント（10）はその際、それぞれ一つの自然言語による表現（13）を包含する定義文字列（12）、該定義文字列（12）に一義的に割り当てられ、自然言語による該表現（13）に対し割り当てられたファンクショナリティを実装するプログラムコードセグメント（14）を包含する。複数の文字列プログラムコードコンポネントの諸文字列プログラムコードコンポネントの少なくとも一つは更にパラメータ入力のためのメソッド（16）を包含し、それによってこの文字列プログラムコードコンポネントは、この文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定することができるパラメータ入力を支持するように設けられている。【選択図】図 2
2019519870.tif 000002
【特許請求の範囲】
【請求項１】
自然言語によるシステム（100）の制御の方法であって、 
-  該システム（100）内に、複数の文字列プログラムコードコンポネント（10、10'、 10''）を用意する（S1）ステップを包含し、その際に一つの文字列プログラムコードコンポネント（10）がそれぞれ 
-  自然言語における表現（13）を包含する定義文字列（12）および  
-  自然言語による該表現（13）に割り当てられたファンクショナリティを実装する該定義文字列（12）に一義的に割り当てられたプログラムコードセグメント（14） 
を包含し、
複数の文字列プログラムコードコンポネントのうちの諸文字列プログラムコードコンポネントの少なくとも一つがパラメータ入力のためのメソッド（16）を包含し、それによってこの文字列プログラムコードコンポネントがこの文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定することができるパラメータ入力を支持するように設けられていることを特徴とする前記自然言語によるシステム（100）の制御の方法。 
【請求項２】
複数の該文字列プログラムコードコンポネントのうちの諸文字列プログラムコードコンポネントの少なくとも一つの文字列プログラムコードコンポネントの該プログラムコードセグメントによって用意されたファンクショナリティが、このファンクショナリティが該システムによって実行されたときに、戻り値を供給し、その際にこの戻り値が好ましくは自然言語によってアノテーションされている請求項1に記載する方法。
【請求項３】
複数の該文字列プログラムコードコンポネントのうちの少なくとも一つの更なる文字列プログラムコードコンポネントが、その更なる文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを該システムが実行したとき、特にその更なる文字列プログラムコードコンポネントの該プログラムコードセグメントによって用意された該ファンクショナリティを特定するためのパラメータとして、戻り値を使用し、その際にその戻り値の使用が該戻り値の自然言語アノテーションを基になされることができる請求項2に記載する方法。
【請求項４】
所定の類似性尺度に基づいて該定義文字列（12）に対し所定の類似性を示す入力文字列を受け取った際に該プログラムコードセグメント（14）によって実装されたファンクショナリテを実行するように該システム（100）が設けられている請求項１から３までのうちの一つに記載する方法。
【請求項５】
前記プログラムコードセグメント（14）が前記システム（100）と連結された機器（30; 32; 34; 36）の一つを制御するためのファンクショナリティを実装している請求項4に記載する方法。
【請求項６】
該プログラムコードセグメント（14）またはパラメータ入力のための該メソッドが該文字列プログラムコードコンポネント（10）とユーザー（42）の間のダイアログを実装している請求項４または５のうちの一つに記載する方法。
【請求項７】
前記ダイアログが該プログラムコードセグメント（14）側で実装されたファンクショナリティの特定のためのパラメータ入力に使われる請求項6に記載する方法。
【請求項８】
前記ダイアログが該ユーザーと該文字列プログラムコードコンポネント（10）の間の会話を支持する請求項６または７に記載する方法。 
【請求項９】
該プログラムコードセグメント（14）が入力文字列を該システム（100）へ伝達するためのファンクショナリティを実装する請求項１から８までのうちの一つに記載する方法。
【請求項１０】
次の更なるステップを包含する請求項１から９までのうちの一つに記載する方法。
-  該システム（100）による入力文字列の受け取り（S2）、
-  入力文字列が所定の該類似尺度に基づく該定義文字列（12）と比較（S3）され、かつ
-  該入力文字列が所定の前記類似尺度に基づいて該定義文字列（12）に対し所定の類似性を示しているときに、システム（100）によって該プログラムコードセグメント（14）よって実装されたファンクショナリティが実行（S4）される。
【請求項１１】
次の更なるステップを包含する請求項10に記載する方法。
-  受け取った入力文字列の保存、
-  文字列プログラムコードコンポネント（10; 10'）のプログラムコードセグメント（14）によって実装されたファンクショナリティの後続の実行を支持するための保存された該入力文字列の読み取り。 
【請求項１２】
受け取った入力文字列が文字列プログラムコードコンポネント内に保存され、該文字列プログラムコードコンポネント（10; 10'）の該プログラムコードセグメント（14）によって実装されたファンクショナリティの後続の実行を支持するために該文字列プログラムコードコンポネントによって読み取られる請求項11に記載の方法。
【請求項１３】
次の更なるステップを包含する請求項10から12までのうちの一つに記載する方法。
-  受け取った入力文字列を保存する、 
-  該プログラムコードセグメントによって実装されたファンクショナリティによって該入力文字列からコンテキスト情報を導き出し、かつ 
-  該システムへ該コンテキスト情報を保存する。
【請求項１４】
自然言語によるプログラミングの方法を包含し、次の更なるステップを包含する請求項1から3までのうちの一つに記載する方法。
-  自然言語によるプログラミング文字列の入力（S602）、
-  該プログラミング文字列が該文字列プログラムコードコンポネントの該定義文字列の少なくとも部分文字列を包含する場合における複数の文字列プログラムコードコンポネントのうちの一つの文字列プログラムコードコンポネント（210）の選択（S603）、
-  選択された該文字列プログラムコードコンポネントの該プログラムコードセグメントを基にした該プログラミン文字列に割り当てられたプログラムの作成（S604）。
【請求項１５】
該プログラミング文字列が選択された複数の文字列プログラムコードコンポネントの各文字列プログラムコードコンポネントの定義文字列の少なくとも部分文字列を包含するときに複数の該文字列プログラムコードコンポネントの中から複数の文字列プログラムコードコンポネントが選択され、かつその際に該プログラミング文字列に割り当てられたプログラムが前記の複数選択された文字列プログラムコードコンポネントのプログラムコードセグメントに基づいて作成される請求項14に記載する方法。
【請求項１６】
選択された該文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティの動的特定のための少なくとも一つのパラメータの入力のステップを包含する請求項14または15に記載する方法。
【請求項１７】
複数の文字列プログラムコードコンポネントのうちの諸文字列プログラムコードコンポネントの少なくとも一つの文字列プログラムコードコンポネントが、該文字列プログラムコードコンポネントの定義文字列の一部分が特定すべきパラメータとして標示されるようにパラメータ入力を支持するよう設けられている請求項1から16までのうちの一つに記載する方法。
【請求項１８】
一つの文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定することができるパラメータに定義可能なパラメータタイプが割り当てられている請求項1から17までのうちの一つに記載する方法。 
【請求項１９】
複数の文字列プログラムコードコンポネントの中からの諸文字列プログラムコードコンポネントのうちの少なくとも一つの文字列プログラムコードコンポネントのプログラムコードセグメントがプログラムの流れを制御する制御構造を実装している請求項1から18までのうちの一つに記載する方法。
【請求項２０】
該プログラムコードセグメントが条件付き命令を実装し、該条件付き命令を定義する条件が該文字列プログラムコードコンポネントのプログラムコードセグメントによって実装されたファンクショナリティによって問合せされる請求項19に記載する方法。
【請求項２１】
該プログラムコードセグメントが条件付き命令を実装し、該条件付き命令を定義する条件が少なくとも一つのオペレータと少なくとも一つのオペランドによって定義される請求項19に記載する方法。
【請求項２２】
少なくとも該オペレータの一つおよび少なくとも該オペランドの一つが該文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティの特定のためのパラメータとして自然言語によるプログラミングの際に入力される請求項14および21に記載する方法。
【請求項２３】
該プログラミング文字列に割り当てられたプログラムの作成のステップにおいて所定のプラットフォーム上で実行可能なプログラムコードが作成される請求項14から22までのうちの一つに記載する方法。
【請求項２４】
一つの新たな文字列プログラムコードコンポネントを複数の文字列プログラムコードコンポネントの中の複数の文字列プログラムコードコンポネントを基に作成するステップを包含し、その際、
-  その新たに作成する文字列プログラムコードコンポネントのための新たな定義文字列が指定され、 
-  前記の複数の文字列プログラムコードコンポネントが請求項1に則った自然言語によるプログラミング文字列の入力によって選択され、
-  その際に前記の新たに作成する文字列プログラムコードコンポネントのための一つの新たなプログラムコードセグメントが、該プログラミング文字列に割り当てられたプログラムの作成ステップにおいて作成されたプログラムコードを基に作成される
請求項14から22までのうちの一つに記載する方法。
【請求項２５】
複数の文字列プログラムコードコンポネント（10; 10'; 10''）を包含し、その際に一つの文字列プログラムコードコンポネント（10）がそれぞれ 
-  自然言語による表現（13）を包含する定義文字列（12）、 
-  自然言語による該表現（13）に割り当てられたファンクショナリティを実装する該定義文字列（12）に一義的に割り当てられたプログラムコードセグメント（14） 
を包含し、複数の文字列プログラムコードコンポネント（10; 10'; 10''）のうちの諸文字列プログラムコードコンポネント（10）の少なくとも一つがパラメータ入力のためのメソッド（16）を包含し、それによってこの文字列プログラムコードコンポネントが同文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定することができるパラメータ入力を支持するように設けられていることを特徴とする自然言語の処理のために設けられたシステム（100）。
【請求項２６】
複数の文字列プログラムコードコンポネントの中の諸文字列プログラムコードコンポネントのうちの少なくとも一つの文字列プログラムコードコンポネントのプログラムコードセグメント（14）によって用意されたファンクショナリティが、該ファンクショナリティが該システム（100; 200）によって実行されるとき、戻り値を供給するように設けられており、その際にその戻り値が好ましくは自然言語によってアノテーションされている請求項25に記載するシステム。
【請求項２７】
前記複数の文字列プログラムコードコンポネントの少なくとも一つの更なる文字列プログラムコードコンポネントが、この更なる文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティが該システムによって実行されるとき、特にこの更なる文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティの特定のためのパラメータとして、該戻り値を使用し、その際、その戻り値の使用が該戻り値の自然言語アノテーションを基になされるように設けられた請求項26に記載するシステム。
【請求項２８】
自然言語によって制御されるように設けられており、更に所定の類似性尺度に基づいて該定義文字列（12）に対して所定の類似性を示す入力文字列を受け取ったときに、該プログラムコードセグメント（14）によって実装されたファンクショナリティを実行するように設けられている請求項25から27までのうちの一つに記載するシステム（100）。
【請求項２９】
次のように設けられている制御装置（20）を包含する請求項28に記載するシステム（100）。
-  自然言語による表現を包含する入力文字列を受け取り、
-  該入力文字列を所定の類似性尺度に基づいて文字列プログラムコードコンポネント（10）の定義文字列（12）と比較し、かつ 
-  該入力文字列が該定義文字列（12）に対して所定の類似尺度に基づいて所定の類似性を有するときに、該プログラムコードセグメント（14）によって実装されたファンクショナリティを実行する。
【請求項３０】
自然言語によるユーザー入力を受け取り、そこから自然言語による表現を包含する入力文字列を導き出して該制御装置（20）に転送するように設けられた入力装置（50、52）を包含する請求項29に記載するシステム（100）。
【請求項３１】
トリガー信号、なかでも入力装置（40）のセンサーによって収集された周辺信号を受信し、該トリガー信号に対する反応として該トリガー信号に依存する自然言語による表現を包含する入力文字列を導き出し、該制御装置（20）に転送するように設けられた入力装置（40）を包含する請求項29または30に記載するシステム（100）。
【請求項３２】
出力信号をユーザー（42）のために自然言語で出力し、該ユーザー（42）と文字列プログラムコードコンポネント（10）の間のダイアログを支持するように設けられた出力装置（50; 54）を包含する請求項29から31までのうちの一つに記載するシステム（100）。
【請求項３３】
文字列プログラムコードコンポネント（10）のプログラムコードセグメント（14）によって実装されるファンクショナリティによって制御されるように設けられた装置（30; 32; 34; 36）を包含する請求項28から32までのうちの一つに記載するシステム（100）。
【請求項３４】
間接的に種々の文字列プログラムコードコンポネント（10; 10'; 10''）の自然言語によるコミュニケーションを支持するように設けられた請求項28から33までのうちの一つに記載するシステム（100）。
【請求項３５】
自然言語によるプログラミングのために引き続き設けられており、
-  自然言語によるプログラミング文字列の入力のための入力装置（240）、
-  文字列プログラムコードコンポネントを保存し、入力された該プログラミング文字列を処理するように設けられ、また諸文字列プログラムコードコンポネント（210）のうちの少なくとも一つを、入力されたプログラミング文字列が該文字列プログラムコードコンポネントの定義文字列の少なくとも部分文字列を包含するときに、選択するように設けられた制御装置（260）および
-  該プログラミング文字列に割り当てられたプログラムを少なくとも一つの選択された文字列プログラムコードコンポネントのプログラムコードセグメントを基に作成するよう設けられた一つのコードジェネレータ（282）および一つのコンパイラ（284）
を包含する請求項25から34までのうちの一つに記載するシステム（200）。
【請求項３６】
請求項1から24までのうちの一つに記載する方法を実行するように設けられた請求項35に記載のシステム（200）。
【請求項３７】
該入力装置（240）が、特に選択された文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティの特定のためのパラメータの入力または選択に関係してプログラミング文字列を編集するように設けられたエディタ（250）を包含する請求項35または36に記載するシステム（200）。
【請求項３８】
自然言語を処理するように設けられ、文字列プログラムコードコンポネント（10）を包含し、その際に該文字列プログラムコードコンポネント（10）が 
-  自然言語による表現（13）を包含する定義文字列（12）および 
-  同定義文字列（12）に一義的に割り当てられ、自然言語による前記表現（13）に割り当てられたファンクショナリティを実装するプログラムコードセグメント（14） 
を包含するシステムのためであり、
パラメータ入力のためのメソッド（16）によって該文字列プログラムコードコンポネントが該文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定できるパラメータ入力を支持するように設けられることを特徴とするデータ構造（10）。
【請求項３９】
複数の文字列プログラムコードコンポネントを更に包含し、その際にその複数の文字列プログラムコードコンポネントの諸文字列プログラムコードコンポネントのそれぞれが
-  自然言語による表現（13）を包含する定義文字列（12）、および
-  自然言語による該表現（13）に割り当てられたファンクショナリティを実装し該定義文字列（12）に一義的に割り当てられたプログラムコードセグメント（14）、
を包含し、 
その際、複数の文字列プログラムコードコンポネントの諸文字列プログラムコードコンポネントの少なくとも一つの文字列プログラムコードコンポネントのプログラムコードセグメント（14）によって用意されたファンクショナリティが、システム（100; 200）によって該ファンクショナリティが実行されたときに、好ましくは自然言語によってアノテーションされている戻り値を供給するように設けられている請求項38に記載するデータ構造。
【請求項４０】
複数の文字列プログラムコードコンポネントの少なくとも一つの更なる文字列プログラムコードコンポネントが、この更なる文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティがシステムによって実行されたとき、特にこの更なる文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティの特定のためのパラメータとして、戻り値を使用し、その際にその戻り値の使用が該戻り値の自然言語によるアノテーションを基になされるように設けられている請求項39に記載するデータ構造。
【請求項４１】
文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定することができるパラメータに定義可能なパラメータタイプが割り当てられている請求項38から40までのうちの一つに記載するデータ構造。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は自然言語を使用して一つのシステムを制御またはプログラミングする方法および相応に設けられたシステムに関する。
【背景技術】
【０００２】
人間環境の中で運用され人とインターアクティブにコミュニケーションする技術システムに関係し、その複雑性から簡易なアリゴリズムをベースにしたのでは一般的に解決することができない課題が発生する。その一例としては人型ロボットの制御を挙げることができる。そこで発生する技術問題とその問題に対処するための解決方法の量が非常に膨大であり、大規模なエキスパート集団が取り組まなければ対応しきれないほどである。
【０００３】
技術システムや技術アプリケーションの言語をベースとする制御は、それ自体としては、モバイル端末用アプリケーションやロボット制御の関連などで既に知られている。
【０００４】
また自然言語によるプログラミング方法も長年にわたって、特にマン・マシーン・コミュニケーションの関連で、研究開発の対象となってきた。その目的は、プログラミング技術に関する特別な教育を受けていない利用者に対しても、自然言語を使って技術システムを制御する可能性を与えるというものである。
【０００５】
その際、問題となるのが多くの場合、自然言語が多義的であり、必ずしも明確または直接的にあるのではないコンテキスト情報に基づいて理解されるものであるということである。また、現在のソフトウェアは普通の利用者にとっては理解しにくいオブジェクト指向になっていることが多いのに対し、人間はプロシージャルに思考する傾向が強い。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の課題は前述の問題に対処し、自然言語による技術システムの制御またはプログラミングを更に改善し、簡略化することにある。
【課題を解決するための手段】
【０００７】
この課題は並列列挙請求項の特徴を有する方法、システムおよびデータ構造によって解決される。好ましい態様および進化形態については従属請求項に記述する。
【０００８】
本発明は、本発明の関係において文字列プログラムコードコンポネントと呼ばれる特殊なデータ構造を主要なベースとしている。このデータ構造は、一方において、自然言語の一つの表現を含む定義文字列を含んでいる。
【０００９】
他方において、この文字列プログラムコードコンポネントは、前記自然言語の表現に対して割り当てられたファンクショナリティを実装し、前記定義文字列に対して一義的に割り当てられた一つのプログラムコードセグメントを包含する。
【００１０】
その定義文字列と前記プログラムコードセグメントは不可分的に連結され、一つの機能統一体を形成する。該プログラムコードセグメントはいうなれば該定義文字列のセマンティクス、すなわち、自然言語による該表現が規定しているものを実装する。
【００１１】
「自然言語における表現」という概念は、本発明において、該表現が一つまたは複数の自然言語の単語を包含する、という意味で理解すべきものとする。該表現はその際、一つまたは複数の基本形における単語を包含できるにすぎない。しかし該表現は自然言語における文法的に正しい文を包含することが好ましい。中間形態もまた可能である。
【００１２】
そのようなデータ構造、すなわち本発明による文字列プログラムコードコンポネントは完結した、高度にカプセル化された機能的統一体を提供するものである。該文字列プログラムコードコンポネントの内的実装は対外的に遮蔽されることができる。詳細に後述するように、該文字列プログラムコードコンポネントは簡単な方法、例えばプラグ・アンド・プレイによって、前記システムに組み込まれ、自然言語によって呼び出すことが可能である。このようにして該システムは第三者によって任意に拡張および補足されることができる。該文字列プログラムコードコンポネントのスペシフィケーションの必要性は最小限に限定される。前記プログラムコードセグメントのプログラミングにはJava や C++などの一般に知られたプログラミング言語を使用することができる。
【００１３】
そのため、自然言語によるシステム制御方法の好ましい一つの実施形態は、特に該システム内に前述の文字列プログラムコードコンポネントを複数用意するステップを含む。
【００１４】
本発明の好ましい実施形態によれば、複数の前記文字列プログラムコードコンポネントのうち少なくとも一つは、該文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されるファンクショナリティを特定するためのパラメータ入力を支持するように発展形成されている。
【００１５】
別の言葉で言えば、前記文字列プログラムコードコンポネントの前記プログラムコードセグメントによって実装される前記ファンクショナリティは固定的不変的である必要はなく、パラメータ入力によって特定することができるものである。該プログラムコードセグメントによって実装されているファンクショナリティ、例えばデータバンクから日付を読み取るという基本ファンクショナリティは、該パラメータによって、どのテーブルの同テーブル内のどの欄を読み取るのかという形で特定できる。
【００１６】
より詳しく述べれば、この少なくとも一つの文字列プログラムコードコンポネントは、パラメータ入力のための固有のメソッドを用意することができる。この文字列プログラムコードコンポネントが前記システムの制御装置によって処理されると、該パラメータ入力メソッドが呼び出され、同文字列プログラムコードコンポネント自身が、いうなれば必要なパラメータの入力処理も引き受ける。
【００１７】
別の代替的な実施形態によれば、複数の文字列プログラムコードコンポネントの中の一つの文字列プログラムコードコンポネントは、該文字列プログラムコードコンポネントを処理するシステムの制御装置のための文字列プログラムコードコンポネントの定義文字列の一部を明示的に特定するパラメータとして標記することにより、パラメータ入力を支持するように設けられることができる。それにはソフトウェア技術において基本的に知られている「マーキング」や「アノテーション」などの概念と関連しているテクノロジーを使用することができる。その、または、それらのパラメータの取得はこの場合、前記文字列プログラムコードコンポネントの該定義文字列内の特定の標記に基づいて制御装置が行う。本文書において使用する概念「マーキング」の実現が、ソフトウェア技術において原則として知られているアノテーション、XML、JSONなどのテクノロジーのみに限定されるものではないことは当然である。それには「マーキング」と同様の目的を充たす新しいテクノロジーを使用することも可能である。それに属するものとしては、例えばプログラミング言語のソースコード内の予約されたキーワードを相応のコンパイラまたはインタプリタによって使用することなどが挙げられる。
【００１８】
一実施形態によれば、文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定できるパラメータに、追加的に自由に定義可能なパラメータタイプを割り当てることができる。そのようなパラメータタイプは特に、従来のプログラミング言語で知られているString、Integer、Float、Date、Booleanなどのプリミティブタイプと違うものでありえる。パラメータタイプはこの関係で特に寸法単位などでありえる。また自由に定義可能なカテゴリー、例えば「Gemuese」（野菜）などもパラメータタイプとして予定されることができる。更に一つまたは複数の「標準パラメータ」および一つまたは複数の自由に定義可能なパラメータの組合せからなるパラメータタイプを定義し割り当てることも可能である。温度を表わすパラメータには、例えば浮動小数点数（Float）と具体的な度量衡単位（摂氏）を包含するパラメータタイプを定義することができる。
【００１９】
システム側で  −または好ましくは前記文字列プログラムコードコンポネント自身の側で―  前述のパラメータ入力メソッドによってパラメータ取得が行われるという事実は、例えばパラメータのタイプや値に関する誤入力が直接、入力の際にチェックされえるという更なる利点を有する。特定の、自由に定義可能なパラメータタイプが予定されていることは、例えば一つのパラメータがある数であるとき、追加のパラメータタイプとして割り当て可能であり、これに付嘱する度量衡単位（「m」や「km」等）が重要である場合などにおいて有用である。誤ったパラメータ入力によるエラーは、通常の場合、ランタイムなどの後の時点で発生するが、これにより早期に認識され、捉えることができる。文字列プログラムコードコンポネントの特定のメソッドを使ったパラメータの入力、収集およびチェックは特に有益である。そのメソッドは当該文字列プログラムコードコンポネントのプログラムコードに特定して適合化することが可能である。システムをこの観点で適合化する必要はない。プログラマーであれば誰でも、相応の文字列プログラムコードコンポネントに適合化したパラメータ入力のメソッドを付け加え、当該文字列プログラムコードコンポネントのプログラムコードの要求条件に対し特定して適合化することができる。
【００２０】
追加の自由に定義可能なパラメータタイプを予定することには更なるメリットがある。すなわち、それぞれ異なるパラメータタイプが割り当てられている種々のパラメータを任意の順序で入力することが可能になることである。正しい割り当ては、該パラメータタイプをよりどころとするだけで、パラメータ入力のメソッド側、またはシステム側でなされることができる。
【００２１】
パラメータタイプのチェックには、後に詳細に説明するパターン・マッチング法を使用することができる。これは一般に入力文字列と文字列プログラムコードコンポネントの定義文字列とを比較する際に使用されるものである。
【００２２】
好ましい一実施形態によれば、複数の文字列プログラムコードコンポネントのうちの少なくとも一つの文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されるファンクショナリティは戻り値を供給することができる。戻り値はシンプルな論理値または数値、文字列等であっても良く、しかしまた複雑な諸構造や諸ファンクショナリティでさえありえる。
【００２３】
そのような戻り値は自然言語によるマーキングによってマークまたはアノテーションされることができ、システム側でそのために固有に予定されたメモリー領域に保存されることができる。この領域に保存された値は、ある意味で一種のヒストリーないし記憶に当たるものである。マーキングに基づいて、文字列プログラムコードコンポネント側から簡単な方法で、自然言語で、保存された戻り値を一義的な方法で呼び出すことができる。したがってコンテキストを作成、保存し、簡単で一義的な方法で使用することが可能である。
【００２４】
一つの戻り値には、パラメータ同様、例えば割り当てられた度量衡単位に関し、同戻り値を特徴付ける自由に定義可能な戻り値タイプを割り当てることができる。
【００２５】
後に制御構造の関係で詳しく説明するように、二つ目の文字列プログラムコードコンポネントは一つ目の文字列プログラムコードコンポネントの戻り値を使うことができ、特に二つ目の文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定するためのパラメータとして、使用することができる。この仕方は特に、以前の文字列プログラムコードコンポネントの戻り値を使うことができる条件付き分岐命令との関連において、使用されることが好ましい。
【００２６】
第一の好ましい一実施形態によれば、前記システムはその際、通常においては自然言語の表現を含む入力文字列を受け取った際に、該入力文字列が所定の類似尺度に従って文字列プログラムコードコンポネントの定義文字列に対し所定の類似性を示している場合に、プログラムコードセグメントによって実装されたファンクショナリティを実行するように設けられている。簡単に言えば、文字列プログラムコードコンポネントのファンクショナリティは、システムが、主要な部分において文字列プログラムコードコンポネントの定義文字列に相当する自然言語的入力を受け取ることによって呼び出される。
【００２７】
入力文字列を文字列プログラムコードコンポネントの定義文字列と比較するための類似尺度としては、従来技術として既知の諸類似尺度を使用することができる。同様のことが入力文字列を定義文字列と比較するための方法にも言える。これについては従来技術において従来のパターン・マッチング法など多くの方式が知られている。例えば使用する類似尺度に依存して０〜１の数値によって表されることができる所定の類似性は、どのような方法で入力文字列がシステムによって取得されたかに依存して、様々でありえる。その際、言語入力および文字列への変換による入力か、またはキーボード等による文字列の直接入力か、は区別されなければならない。固有の類似尺度や比較方法は本発明の対象ではない。最も簡単なケースにおいては、入力文字列が、定義文字列の自然言語による表現の所定の割合を正確に、または近似的に包含するか否かを分析することができる。近似的にとは、文法的逸脱（単数形／複数形、格、語形変化等）を許容し、カンマ等の句読点を無視することを意味することが可能である。
【００２８】
一実施形態によれば、文字列プログラムコードコンポネントのプログラムコードセグメントはシステムと連結した装置の制御をするためのファンクショナリティを実装する。好ましい利用ケースは家庭用機器の制御である。また他の好ましい利用ケースはロボットの制御その他である。また例えば一般にアクセス可能な公共のオンライン図書館における情報検索が、前述の方法を使用することによって簡略化されることも想定しえる。
【００２９】
更に別の一実施形態によれば、パラメータ入力のメソッドが文字列プログラムコードコンポネントとユーザーとの間のダイアログを実装する。代替的にダイアログを文字列プログラムコードコンポネントのプログラムコードセグメントによって実装することもできる。すなわち、パラメータ入力のためのメソッドまたはプログラムコードセグメントによって実装されるファンクショナリティが、ユーザーが質問または入力要請として理解する自然言語のアウトプットを作成する。ユーザーはその質問に対し相応の入力で答え、その答えをメソッドまたはファンクショナリティ側で更なる入力文字列として受け取り、処理することができる。この質問・回答の流れは複数回、繰り返されることができる。その際、文字列プログラムコードコンポネントは後述する方法で、ユーザーの以前の入力をダイアログ制御に活用することができる。この実施形態はエキスパートシステムの提供などに適している。
【００３０】
第一の一変形形態によれば、パラメータ入力のダイアログをプログラムコードセグメントによって実装されたファンクショナリティの特定に使うことができる。そのようなパラメータ入力は、記入されたパラメータが期待されるパラメータタイプ、パラメータ値その他に関してファンクショナリティの側またはパラメータ入力のためのメソッド側でチェックされるという形で形成されることができる。それによって誤入力を認識し回避することができる。
【００３１】
二つ目の変形形態によれば、当該ダイアログはユーザーとシステムの間の自由な会話をサポートすることができる。自由な会話とは本発明の関係においては、ファンクショナリティ側からユーザーに向けられた質問または入力要請とそれに応じたユーザー側から出された答えの交換を指し、その際、答えはフォーマットに関しても、セマンティクスに関しても制限されない。ユーザーの答えは入力文字列をシステムに入力することで成され、システムはその入力文字列を文字列プログラムコードコンポネントのファンクショナリティに引き渡す。この入力文字列も通常、自然言語の表現を包含する。
【００３２】
更に別の一実施形態によれば、文字列プログラムコードコンポネントのプログラムコードセグメントは入力文字列をシステムに伝達するためのファンクショナリティを実装する。別の言葉で言えば、文字列プログラムコードコンポネントのファンクショナリティ側でも、システム内に既に用意されている更なる文字列プログラムコードコンポネントの呼び出しにつながるシステムへの入力を作成する。
【００３３】
ここにおいて、本発明による文字列プログラムコードコンポネントの使用の更なる重要な利点が見いだされる。これら文字列プログラムコードコンポネントのそれぞれが、カプセル化された形で、相応の文字列プログラムコードコンポネントの定義文字列によって自然言語で認識および呼び出しが可能な特定のファンクショナリティを用意することができる。従来の言語制御機能を可能にするシステムは、通常、閉鎖型システムとして設計されており、そのためその複雑性および拡張性において大きな制約を受けている。それに対し、本発明によれば、一つのシステムを簡単に文字列プログラムコードコンポネントをシステムに付け加えることによって拡張することができる。それによって、知識レプレゼンテーションやロボット制御などの複雑な技術内容を、関心を持つ第三者が解決すべき問題の個々の側面について、システムに付け加えることができる特定の文字列プログラムコードコンポネントを提供することによって、分散的方法で改善することができる。これらの文字列プログラムコードコンポネントは上記に示唆したように、既存の文字列プログラムコードコンポネントのファンクショナリティを使用することができ、また自らも更なる文字列プログラムコードコンポネントを呼び出すための自己のファンクショナリティを提供する。それによって相応のシステムはオープンとなり、かつ簡単な方法で任意の方向へ拡張可能となる。
【００３４】
その主な理由は文字列プログラムコードコンポネントのコンセプトにある。従来の言語制御システムは通常、例えばインターネット検索の開始、メッセージの送信、予定をカレンダーに登録するといった既存の標準ファンクショナリティの呼び出しを許しているに過ぎない。それに対し本発明の枠内においては、プログラムコードセグメントを使って、また自然言語における定義文字列に適合化して、任意のファンクショナリティを用意しシステムに組み込むことが可能である。つまり従来技術による言語制御が各々のシステムのエルゴノミーを向上するに過ぎなかったのに対し、本発明では、プログラムコードセグメントによって、各々において特定的に、定義文字列に包含されている自然言語による表現のセマンティクスをプログラム技術的に実施するファンクショナリティを提供する。したがって文字列プログラムコードコンポネントの本発明で提案するデータ構造は、自然言語的表現のカプセル化された機能的統一体および同表現に一義的かつ不可分に割り当てられたプログラムコードセグメントによって、いわば自然言語的諸表現のセマンティクスの機能的実施を許すものである。
【００３５】
一つの文字列プログラムコードコンポネントのプログラムコードセグメントが同時に、前記に説明した様々な諸ファンクショナリティを実装できることは自明である。特に一つのプログラムコードセグメントはダイアログのファンクショナリティも、入力文字列のシステムへの伝達のファンクショナリティも実装できる。このことは、ダイアログの途中で、受け取ったユーザーの入力を基に、更に先につながるファンクショナリティを有する別の文字列プログラムコードコンポネントの呼び出しが有意義である場合に、常に有用である。
【００３６】
ある意味で、このシステムは間接的に種々の文字列プログラムコードコンポネントのコミュニケーションを自然言語を使って支持している。一つの第一の側面によれば、一つの文字列プログラムコードコンポネントは、前述に説明した通り、自身が自然言語による表現を含む入力文字列をシステムに伝達し、それによって間接的にその定義文字列が充分にその入力文字列と一致する更なる文字列プログラムコードコンポネントを「呼び出」すように構成されえる。自然言語を使った種々の文字列プログラムコードコンポネントのコミュニケーションをシステム側で支持する更なる側面は以下の記述で明確になる。
【００３７】
具体的には、自然言語を使ったシステムの制御の方法は次の更なるステップを包含することができる。
【００３８】
当該システムは入力文字列を受け取る。同入力文字列は通常、自然言語による表現を包含する。 
【００３９】
更なるステップにおいて、同システムは入力文字列をシステム内に既に用意されている文字列プログラムコードコンポネントの定義文字列とを、従来のパターン・マッチング法などを用いて、所定の類似尺度に基づいて、比較する。
【００４０】
当該入力文字列が所定の類似尺度に基づいて定義文字列に対し所定の類似性を有する場合は、当該システムはプログラムコードセグメントによって実装されたファンクショナリティを実行する。
【００４１】
好ましい一実施形態によれば、少なくとも一つのシステム側で受け取られた入力文字列の一部は保存されることができる。これには、一方において、文字列プログラムコードコンポネントのファンクショナリティの実行につながった入力文字列が該当する。それに代わるものとして、または、それに追加で、ユーザーによって文字列プログラムコードコンポネントとのダイアログの一環として入力された入力文字列の少なくとも一部が保存されることも可能である。 
【００４２】
その際、一実施形態によれば、受け取られた入力文字列の少なくとも一部は、一つの文字列プログラムコードコンポネント自体の内部に保存されることができる。その文字列プログラムコードコンポネントはそのために適したコンテキスト保存データ構造を包含することができる。当該の文字列プログラムコードコンポネントに保存された情報は、該文字列プログラムコードコンポネントのプログラムコードセグメントによって実装されたファンクショナリティの後続の実行を支持するために、該文字列プログラムコードコンポネント自身によって読み取られる。
【００４３】
このようにして保存された入力文字列の部分は、一つの文字列プログラムコードコンポネントのファンクショナリティの後続の実行を支持するために、読み取られることができる。このようにして、例えばユーザーと文字列プログラムコードコンポネントとのダイアログを、当該文字列プログラムコードコンポネントがダイアログの流れをダイアログ中に取得し保存したユーザーの情報に依存させることによって、制御することができる。
【００４４】
あるいは代替として、受け取った入力文字列の一部をシステム内に集積保存することもできる。この変形形態によれば、このようにして（通常、自然言語による表現を包含する入力文字列からなる）保存情報を後続に実施された更なる文字列プログラムコードコンポネントによって、ある種のコンテキスト知識または背景知識として、利用することができる。集中的にシステム内に保存された入力文字列の部分は、文字列プログラムコードコンポネントが適した方法で使用することができる、いわばシステムの短期記憶または長期記憶として利用することができる。ここにおいて、自然言語による種々の文字列プログラムコードコンポネントのコミュニケーションをシステムが間接的にサポートすることの二つ目の側面が明確になる。すなわち、一つの文字列プログラムコードコンポネントはそれに割り当てられたファンクショナリティの実行時点において、別の文字列プログラムコードコンポネントのファンクショナリティのより以前の実行最中にシステム内に保存された入力文字列という形の自然言語情報を活用することができる。
【００４５】
既に前述の通り、文字列プログラムコードコンポネントのプログラムコードセグメントによって実装されたファンクショナリティが戻り値を供給することが可能であり、それを例えばシステム内に保存し、後続で実行された諸文字列プログラムコードコンポネントがそれを活用することができる。そのような戻り値は、自然言語による一つの表現を包含することができ、あるいは自然言語による表現を使ってアノテーションされていることが可能である。数値または論理値も戻り値として使える。この戻り値が自然言語でアノテーションされている場合は、それを簡単に自然言語によって、例えば後に呼び出された文字列プログラムコードコンポネントのパラメータとして、使用することができる。 
【００４６】
更なる一実施形態によれば、一つの文字列プログラムコードコンポネントのプログラムコードセグメントによって実装されたファンクショナリティは、受け取った保存済入力文字列からコンテキスト情報を導き出し、そのコンテキスト情報をシステム内に保存するように設けられていても良い。コンテキスト情報の導き出しは、例えば文字列プログラムコードコンポネント内に保存されているデータおよび／または導き出しルールを使うことによって可能である。それにより、そのコンテキスト情報は後に実行する別の諸文字列プログラムコードコンポネントに対して、追加的な情報ベースとして利用提供される。コンテキスト情報は自然言語による表現を包含することが望ましい。したがって、このような文字列プログラムコードコンポネントは、ある意味で入力文字列から結論を引き出すように設けられているといえる。
【００４７】
第一の一実施形態によれば、文字列プログラムコードコンポネントは、適したプログラミング言語を使って作成することができる。プログラミングのこの形態は通常、ベーシックファンクショナリティを用意するために選択される。条件付き命令、ループ等の簡単な制御構造がそれに数えられる。
【００４８】
すなわち、複数の文字列プログラムコードコンポネントのうちの少なくとも一つの文字列プログラムコードコンポネントのプログラムコードセグメントは、分岐、ループや条件付き命令のようなプログラムの進行を制御する制御構造を実装することができる。原則としてそのような制御構造も文字列プログラムコードコンポネントのプログラムコードセグメントを使って実装される。後に説明するように、制御構造が一般的または特定の方法で文字列プログラムコードコンポネントを使って実装されることができることによって、一つのシステムの制御のための方法および後記に説明する自然言語によるプログラミング方法は、原則としてより高次元なプログラム言語の全ファンクショナリティを用意することができる。
【００４９】
文字列プログラムコードコンポネントのプログラムコードセグメントは、例えばIFクエリ等の条件付き命令を実装することができる。条件付き命令を定義する条件は、第一の一変形形態によれば、文字列プログラムコードコンポネントのプログラムコードセグメントによって実装されたファンクショナリティによって問い合わされることができる。このようにして極めて特有の条件も簡単に実装し問い合わせることが可能である。
【００５０】
このことは特に、「もしa < bのときは」等の一般的な形態をもって掌握することができない、または非常な困難を伴ってしか掌握できないような条件に該当する。
【００５１】
例えば「もし外が明るければ...」といった条件は、屋外に設置された光度センサーに問い合わせるというファンクショナリティを実装したプログラムコードセグメントを持つ文字列プログラムコードコンポネントを使って問い合わせることができる。この条件をベースとした制御構造を用意するためには、一つのコードジェネレータがプログラミング文字列に割り当てられたプログラムのためのプログラムコードを作成の際に、単に一つのIFクエリを作成し、文字列プログラムコードコンポネントのプログラムコードセグメントを呼び出すメソッドexecuteCodesegment()をIFクエリの条件として登録するだけで良い。
【００５２】
第二の一変形形態によれば、少なくとも一つの文字列プログラムコードコンポネントのプログラムコードセグメントが一つの条件付き命令を実装している場合、条件付き命令を定義している条件は少なくとも一つのオペレータおよび少なくとも一つのオペランドによって定義されることができる。別の言葉で言えば、条件はこの場合、一般形式「オペランド１  オペレータ  オペランド２」、つまり例えば「a < b」を有する。このケースにおいても、制御構造すなわち例えばIFクエリは、文字列プログラムコードコンポネントによって用意されるので、オペランドおよびオペレータは、自然言語におけるプログラミング中に後に一般的に説明する方法で取得することができるパラメータとしてみなすことができる。このことは特に文字列プログラムコードコンポネントによって用意される、既に説明したパラメータ取得のための特定のメソッドによってなすことができる。このメソッドは例えば任意の数値オペランドを掌握し、任意のよく使われるオペレータを選択用に提案することができる。後に詳細に説明するように、以前の文字列プログラムコードコンポネントの戻り値をオペランドとして選択することも可能である。
【００５３】
文字列プログラムコードコンポネントによって単にIFクエリが実装されえるだけではなく、例えばループ（「while 」、「for each 」等々）等の任意のその他の条件付き制御構造も実装されえることは自明である。IFクエリと違い、ループ制御構造の関係においてループブロック実行後にループ条件が再度、判定される。条件が続いて充たされている場合は、更なるループ処理が繰り返される。ループ条件は一回または複数回のループ処理後に充たされなくなることがある。例えばループブロック内で呼び出された文字列プログラムコードコンポネントのファンクショナリティがループ条件との関係で判定される一つまたは複数の値を変更する場合などがこれに該当する。そのような値の少なくとも一つの変更はループを実装する文字列プログラムコードコンポネントのファンクショナリティによって、例えばループカウンターのカウントアップによって、行われることがある。ループの一般形態は例えば次のように実装されることができる。
Loop loop_1 = new Loop();
【００５４】
クラス「Loop」はその際、一つの具体的なループ実現のための文字列プログラムコードコンポネントの実装であり、例えば「do while」ループ、「repeat」ループ、「for each」ループ等の様々なループのバリエーションを実現できる。
while ( loop_1.excecuteCodesegment() )  {
// hier wird durch Codegenerator der 
// Source Code anderer Satzkomponenten eingetragen.
}
【００５５】
文字列プログラムコードコンポネントを使った自然言語におけるプログラミングは、後に詳細に説明するように、同様な方法で結果制御型の手順も可能にする。すなわち、いわゆる「EventListener」（イベントハンドリングルーチン）も文字列プログラムコードコンポネントによって表されることができる。同じことは様々な手順の並行処理についても該当する。
【００５６】
後述するように本発明は更に自然言語のみを使ってプログラミングする可能性を提供している。すなわち既に存在している文字列プログラムコードコンポネントを基に更なる新たな文字列プログラムコードコンポネントを作成することができる。このようにして、言うなれば自然言語による、実質的にほとんどプログラミング経験を必要とせず、したがって広範囲に及ぶ利用者に開かれた新規な自然言語によるプログラミングを可能にしている。文字列プログラムコードコンポネントの原則的コンセプトとの組み合わせで、既存のシステムの拡張がそれによって更に簡略化される。
【００５７】
一実施形態によれば、自然言語によるプログラミングの方法は次のステップを含む。
【００５８】
上記に説明したごとき文字列プログラムコードコンポネントが複数用意される。すなわち、複数の文字列プログラムコードコンポネントのうちの一つの文字列プログラムコードコンポネントは、その際、自然言語の一つの表現を含む各々一つの定義文字列を包含するとともに、該定義文字列に対し一義的に割り当てられ、自然言語の表現に割り当てられたファンクショナリティを実装するプログラムコードセグメント包含する。
【００５９】
更なるステップにおいて自然言語によるプログラミング文字列は、複数の文字列プログラムコードコンポネントを保存し処理するように設けられたシステムに入力される。
【００６０】
その際「自然言語によるプログラミング文字列」とは本発明との関係において、上記に説明した概念「自然言語による表現  」と同様、原則として自然言語の一つまたは複数の単語を包含する表現を指す。その際、単語はその基本形であってもよく、また該表現は一つの少なくとも部分において文法的に正しい文または複数のそのような文を包含することができる。「プログラミング文字列」とこの表現が呼ばれるのは、この表現が以下に説明するように、プログラミングに、すなわち計算ユニットによって実行可能なプログラムの作成に使用されるからであり、その意味で、一つの「プログラミング言語」の「プログラムコード」と見なすことができる。その際、本発明の関係における前記プログラミング言語とは自然言語である。
【００６１】
前記プログラミング文字列の入力中または入力後に、複数の文字列プログラムコードコンポネントの中から一つまたは複数の文字列プログラムコードコンポネントが、プログラミング文字列が少なくとも文字列プログラムコードコンポネントの定義文字列の少なくとも一つの部分文字列を  −主要部分において−  包含する場合に、選択される。別の言葉で言えば、該プログラミング文字列と該文字列プログラムコードコンポネントの該定義文字列との間の一致を、  −文字列ベース−  で検索し、そのような一致がある場合は、相応の文字列プログラムコードコンポネントが選択される。更に別の言葉で言えば、文字列プログラムコードコンポネントはプログラミング文字列によって、いわば「呼び出される」のである。
【００６２】
それぞれ自然言語が対象であるので、プログラミング文字列の一部と文字列プログラムコードコンポネントの部分文字列との一致が百パーセントとは限らないのは自明である。そのような一致が所定の類似尺度に基づいて所定の敷居値を超えなければならないというように設定しておくことが可能である。プログラミング文字列と文字列プログラムコードコンポネントの定義文字列を比較するための類似性尺度として、システムの制御に関する本発明の方法の第一の変型形態との関係で前述した通り、従来技術で既知の類似性尺度を使用することができる。同様のことはプログラミング文字列と定義文字列を比較する方法に対しても有効である。これに関しては現在技術において、従来式のパターン・マッチング法等の多くの方式が知られている。例えば使用する類似性尺度に依存し０から１の間の数値によって指定されることができる所定の敷居値は変化しえる。特定の類似尺度または比較方法は本発明の対象ではない。最も簡単なケースにおいては、プログラミング文字列を、定義文字列の自然言語における表現の所定の割合を正確または近似的に包含するかどうかという観点で分析することができる。正確とは単語同一性等である。近似的とは、例えば文法的偏差（単数／複数、格、語形変化等）を許容し、例えばコンマ等の句読点等を無視する、等の意味でありえる。類義語または概念も類似と見なすことができる。
【００６３】
それに続くプロセスステップにおいて、少なくとも一つの選択された文字列プログラムコードコンポネントの一つまたは複数のプログラムコードセグメントを基に、プログラミング文字列に割り当てられたプログラムを作成する。
【００６４】
自然言語によるプログラミング用の相応のシステムは、複数の前述の文字列プログラムコードコンポネントを包含する。また該システムは更に自然言語によるプログラミング文字列の入力用の入力装置および同入力装置と連結された制御装置を包含する。
【００６５】
入力装置は特に、後記に更に詳細に説明するように、一つの選択された文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティの特定のためのパラメータの入力または選択に関してプログラミング文字列を編集できるように設けられたエディタを含むことができる。
【００６６】
前記制御装置は文字列プログラムコードコンポネントを保存し、入力したプログラミング文字列を処理するように構成されている。更に該制御装置は、入力されたプログラミング文字列が文字列プログラムコードコンポネントの定義文字列の少なくとも一つの部分文字列を前述のような形で包含するときに、文字列プログラムコードコンポネントの少なくとも一つを選択するように設置されている。 
【００６７】
更に、少なくとも一つの所定のプログラミング言語のために、少なくとも一つの選択された文字列プログラムコードコンポネントの一つまたは複数のプログラムコードセグメントを基に、プログラミング文字列に割り当てられたプログラムを作成するように設けられたコードジェネレータおよびコンパイラーがシステムの部分を構成する。
【００６８】
本発明のこの側面は、このように従来技術とは抜本的に異なっている。従来技術では大抵の場合、人工知能のプロセスに基づいて、自然言語による入力を「理解」しようと試みるもので、すなわち言語学的に分析し、それによって入力の意味を把握しようと試みるものである。そして次のステップで、その意味をプログラムコードに転換しようと試みるものである。本発明が提案するアプローチはそれに対し原則的に「理解」することを拠り所としておらず、厳格に決定論的であり、入力のセマンティクス上の誤解釈の危険を全く伴わない。入力されたプログラミング文字列は、言語学的または意味論的分析が行われるのではなく、単に保存されている文字列プログラムコードコンポネントの定義文字列との文字列比較を基に比較されるに過ぎない。これはほとんど計算時間を要しないばかりか、極めて簡単な方法で実装することが可能である。
【００６９】
本発明は他の利点も提供している。提案されるアプローチは高度にモジュラ化されている。文字列プログラムコードコンポネントは相互に独立している。様々な開発者が相互に独立して様々な場所と異なる時間に新たな文字列プログラムコードコンポネントを開発しシステムに付け加えることができる。詳細に後述するように、各々一つのエレメンタリーな、狭く限定された基本ファンクショナリティを実装するシンプルな文字列プログラムコードコンポネントから、簡単な方法で、自然言語によるプログラミングによって、新たなより複雑な文字列プログラムコードコンポネントを作成し、システムに追加することが可能である。
【００７０】
本発明の方法による文字列プログラムコードコンポネントのプログラムコードセグメントはおおよそにおいて機械言語で実現された、より高度な言語におけるエレメンタリーなメソッドに相当する。システムが包含する文字列プログラムコードコンポネントが多くなればなるほど、またそれが多様になればなるほど、本発明において提案するシステムの枠内における自然言語によるプログラミングの可能性はより大きく、可変的になる。
【００７１】
本発明のこの側面における主目的方向は、特別なプログラミング知識を持たない利用者が、  −自然言語を用いて、開発者側から用意された文字列プログラムコードコンポネントを基に−  自らプログラムを作成できるようにすることにある。この方法によって各種のアプリケーション分野におけるソフトウェアシステムの複雑性が、それと関連する開発時間および開発費用と合わせて、明確に減少されることができると期待される。既存のシステムにおける新しい要求条件または小規模な変更は、場合によっては既に長くケアされ複数回適合化されてきたベーシックアーキテクチャーの変更を原則として必要せず、単にここそこの文字列プログラムコードコンポネントを補足し、自然言語により簡単な方法で作成されたプログラムを用いて、それに基づく補足を作成すれば済む。更に  −原則として非常に時間を要する−  作成したプログラムコードのアノテーションが実際上必要なくなる。自然言語でプログラミングされるので、プログラムは言うなれば自らを説明するものだからである。
【００７２】
既に冒頭で言及したように、一つの優先される実施形態によれば、選択された文字列プログラムコードコンポネントの少なくとも一つは、パラメータ入力を支持するように設けられている。それを使って選択された文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティは自然言語によるプログラミング最中にダイナミックに指定されることができる。これはパラメータ入力のための固有のメソッドを用いてするのが好ましい。
【００７３】
この実施形態によれば、この方法は選択された文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティの指定のための少なくとも一つのパラメータの入力の一ステップを包含する。このステップはプログラミング文字列の入力中または入力後およびプログラミング文字列に割り当てられたプログラムの作成のステップ前に行われる。既に前述したように、パラメータ入力は特定的に様々な方法でなされえる。
【００７４】
上記に説明する方法は、例えば携帯端末機器のいわゆるアプリのプログラミング等、従来のアプリケーションのプログラミングに使用することができる。そのためにはプログラミング文字列に割り当てられたプログラムの作成のステップにおいて、所定のプラットフォームで実行可能なプログラムコードが作成される。既に触れたようにシステムはあらゆる任意のプログラミング言語と実施環境のためのコードジェネレータおよびコンパイラを包含することができる。
【００７５】
他方において、自然言語によるプログラミングによって、前述したように、既存の文字列プログラムコードコンポネントを基に新しい文字列プログラムコードコンポネントを作成することができる。そのためには新たに作成する文字列プログラムコードコンポネントのための定義文字列を指定し、当該の複数の文字列プログラムコードコンポネントは自然言語による適したプログラミング文字列の入力によって前述した方法で選択する。新たに作成すべき文字列プログラムコードコンポネント用の新しいプログラムコードセグメントは、プログラミング文字列に割り当てられたプログラムの作成ステップにおいて自動的に生成されるプログラムコードを基に作成される。
【００７６】
自然言語の処理のために設けられたシステムの好ましい一実施形態は、システムに統合されている複数の前記文字列プログラムコードコンポネントを包含する。当該文字列プログラムコードコンポネントはその際、前述のように、自然言語による表現を包含する定義文字列と、自然言語による表現に対し割り当てられたファンクショナリティを実装する定義文字列に対して一義的に割り当てられたプログラムコードセグメントを包含する。複数の文字列プログラムコードコンポネントのうちの少なくとも一つの文字列プログラムコードコンポネントはパラメータ入力のためのメソッドを包含する。これにより当該文字列プログラムコードコンポネントは、この文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを指定することができるパラメータ入力を支持するよう設けられている。
【００７７】
前記システムは一実施形態によれば、所定の類似尺度に基づいて定義文字列に対し所定の類似性を有する入力文字列を受け取った際に、プログラムコードセグメントによって実装されたファンクショナリティを実行するように設けられている。
【００７８】
既に前述の通り、前記システムは任意の数のそのような文字列プログラムコードコンポネントを組み込むことができる。これらは各々カプセル化された機能単位を構成し、そのため独立した開発者によって用意されることができ、そうして全体システムのファンクショナリティを拡張することができる。また同じく前述の通り、相応の入力文字列を作成し入力文字列として前記システムに渡すことで、一つの文字列プログラムコードコンポネントのファンクショナリティが更なる文字列プログラムコードコンポネントのファンクショナリティを呼び出すことが可能である。別の言葉に置き換えて言えば、一つの文字列プログラムコードコンポネントの他の文字列プログラムコードコンポネントによる呼び出しは直接行われるのではなく、システムを介して、常に間接的に行われる。したがって個々の文字列プログラムコードコンポネントの間に、文字列プログラムコードコンポネントの実装に際して考慮されなければならないような依存関係はない。文字列プログラムコードコンポネントの各々が特定の部分問題の特定の解決策を提供することができる。このように様々な文字列プログラムコードコンポネントのファンクショナリティの適した組合せによって、複雑な内容を包括的に取り扱うことができる。これまで欠けていたファンクショナリティはいつでも、既存の文字列プログラムコードコンポネントやシステム自体を変更する必要を伴うことなく、新たな文字列プログラムコードコンポネントを組み込むことによって補足することができる。
【００７９】
一実施形態によれば前記システムは、自然言語による表現を包含する入力文字列を受け取るように設けられた制御装置を包含する。同制御装置は更に、入力文字列を前記システム内に用意されている文字列プログラムコードコンポネントの定義文字列と所定の類似尺度に基づいて比較し、当該の文字列プログラムコードコンポネントのプログラムコードセグメントによって実装されたファンクショナリティを、入力文字列が所定の類似尺度に基づいて所定の類似性を示した場合に、実行するように設けられている。
【００８０】
更なる一実施形態によれば、前記システムは入力装置を包含する。同入力装置は、自然言語によるユーザー入力を受け取り、そこから自然言語による表現を包含する入力文字列を導き出し、同入力文字列を制御装置に転送するように設けられている。そのような入力装置は、例えばマイクロフォンによって収集された音声言語を相応文字列に転換する従来型の音声言語認識装置を包含することができる。更にキーボード等による入力を許すエディタが前記システムの入力装置として利用されても良い。
【００８１】
前記システムは一実施形態によれば、例えばセンサーを使って周辺信号を受信し、そこから自然言語による表現を包含する入力文字列を導き出し、その入力文字列を前記システムの制御装置に転送するように設けられた更なる入力装置の部類を包含することができる。更により一般的に、任意の所定のトリガー信号を受信し、同トリガー信号に依存する自然言語による表現を包含する入力文字列を導き出し、同入力文字列を同システムに転送するように設けられた入力装置を予定しても良い。前記トリガー信号は例えば（光度、温度、騒音等に関する等の）環境の変化を表示する環境信号であっても良い。代替的にそのようなトリガー信号は（例として照明装置の場合の「オン／オフ」、窓の場合の「開／閉」等の）入力装置の現在のシステム状態を表わす入力文字列を作成するよう前記入力装置を促すために、前記システムから発信されても良い。
【００８２】
ここにおいて本発明に係るシステムの更なる特徴が示される。人間のユーザーのみならず、技術機器もユーザーとして前記システムの制御装置と自然言語による表現に基づいてコミュニケーションする。同システムの同制御装置は人間のユーザーの入力と技術機器という形のユーザーによる入力との間で区別せず、自然言語の表現を含む受け取った入力文字列を同じ方法で処理する。例えば光度、湿度、騒音その他の類似する環境パラメータを収集し、自然言語で表現し、前記システムの制御装置に転送する入力装置が用意されることができる。それに対する反応として同システムは相応の文字列プログラムコードコンポネントを呼び出し、それにより例えば呼び出しをしている装置および／またはその他の装置のファンクショナリティを制御することができる。
【００８３】
前記システムは更に、ユーザーと文字列プログラムコードコンポネントの間のダイアログを支持するために自然言語によるユーザーへの出力信号を出力するように設けられた出力装置を包含することができる。同出力装置はその際、特に従来のスピーカー等を介した音声言語出力を提供することができる。またディスプレイ等を介したテキスト出力も可能である。前記システムが入出力組合せ装置も包含できることは自明である。
【００８４】
既に繰り返し触れたように、前記システムは文字列プログラムコードコンポネントのプログラムコードセグメントによって実装されるファンクショナリティによって制御されるように設けられた任意の技術機器を包含することができる。前述の方法は特にロボットの制御に適している。また家電機器や娯楽用電気機器の制御も前述の方法ですることができる。更に前述の方法はエキスパートシステムの実装に利用するのにも有利である。特に、文字列プログラムコードコンポネントが様々な利用者によって簡単な方法で前記システムに組み込まれることができることによって、個々の利用者によってカバーされる種々の知識分野が簡単な方法でネットワーク化され、それによって、これまでばらばらに存在していたに過ぎない種々の知識分野を簡単な方法で統合することができる。
【図面の簡単な説明】
【００８５】
以下にいくつかの実施例をもとに添付の図を参照しつつ本発明を例示的に説明する。当該の諸図は以下を示すものである。
【００８６】
【図１】本発明によるデータ構造の好ましい実施形態を示す概略図。
【００８７】
【図２】本発明によるシステムの第一の好ましい一実施形態の様々なコンポネントの概略図。
【００８８】
【図３】図2のシステムを使った本発明による方法の第一の好ましい一実施形態の諸ステップの説明図。
【００８９】
【図４】本発明による方法の第二の好ましい一実施形態の諸ステップの説明図。
【００９０】
【図５】自然言語によるプログラミングのための本発明によるシステムの第二の好ましい一実施形態のコンポネントの説明図。
【００９１】
【図６】図5のシステムを使った自然言語によるプログラミングのための方法の第三の好ましい一実施形態の諸ステップの説明図。
【発明を実施するための形態】
【００９２】
発明の詳細な説明
図1は文字列プログラムコードコンポネント10の形によるデータ構造10の好ましい一実施形態の概略図である。該文字列プログラムコードコンポネントは自然言語による表現13を包含する定義文字列12を包含する。更に前記文字列プログラムコードコンポネントは自然言語による前記表現13に対して割り当てられたファンクショナリティを実装するプログラムコードセグメント14を包含する。そして前記文字列プログラムコードコンポネントはパラメータの入力のためのメソッド16を包含する。
【００９３】
文字列プログラムコードコンポネント10は、自然言語による前記表現13を伴う前記定義文字列12および自然言語による該表現13の意味を実現する前記プログラムコードセグメント14からなる不可分な、カプセル化されたユニットを形成する。前記文字列プログラムコードコンポネントは技術的にその内的実装を対外的に隠しているコンポネントとして実現される。その内的実装は例えば該文字列プログラムコードコンポネント10の該プログラムコードセグメント14を実現するメソッドボディから成る。該定義文字列12は、以下に図3の関係で詳しく説明するように、該文字列プログラムコードコンポネント10のファンクショナリティを呼び出すために、言わば自然言語による入力文字列のためのドッキング箇所としての役割を果たす。したがって該文字列プログラムコードコンポネント10は完結された、高度にカプセル化された機能統一体である。該文字列プログラムコードコンポネント10はプラグ・アンド・プレイによって、それ自体としては既知の方法でシステム100（図2参照）に組み込まれることができる。
【００９４】
文字列プログラムコードコンポネント10は、C++を代表例として後述説明するように、従来のプログラミング言語によって提供されることができる。
【００９５】
文字列プログラムコードコンポネント10を実装するためには、C++において具体的な文字列プログラムコードコンポネント10の基本クラスとして使われる抽象クラスを定義する。
【００９６】
具体的な諸文字列プログラムコードコンポネントは続いてこの抽象クラスを実装する。
class Zeichenketten-Programmcode-Komponente {
public string getSentence() = 0;
public void collectParameter() = 0;
public ResultObject executeCodesegment () = 0;
}
【００９７】
例として、自然言語表現「一つの数をもう一つの別の数に足せ 」を持つ定義文字列に対しクラス「MyCPlusPlusAddition 」を実現する。メソッドgetSentence()は自然言語による表現を戻し返す。
class MyCPlusPlusAddition : Zeichenketten-Programmcode-Komponente {
public string getSentence(){
return " Addiere eine Zahl zu einer anderer Zahl";
};
public void collectParameter( ... ) {
... some code;
};
public Object executeCodesegment (){
... some code;
};
}
【００９８】
メソッドcollectParameter(...) は、ここに挙げる例においては、コードセグメントの実行に必要なファンクションパラメータを回収するために使われる。その際、誤入力を避けるため、入力されたパラメータは、期待されるパラメータタイプに関し正しいかどうかがチェックされても良い。ここに掲げる例においては、メソッドcollectParameter(...)の枠内で例えば任意の文字列等ではなく、正確に二つのパラメータが数値の形式で入力されることをチェックすることが可能であろう。
【００９９】
メソッドexecuteCodesegment( ) は、文字列プログラムコードコンポネント10の本来の、すなわち二つの数を加算するというファンクショナリティを実装するために使われる。
【０１００】
上記に例として示したに過ぎない文字列プログラムコードコンポネントのコンセプトがC++に限らず、PHP、Visual Basic、C#、Objective-C その他の任意の通常のプログラミング言語によっても実現できることは自明である。
【０１０１】
従来のプログラミング言語を使った文字列プログラムコードコンポネントのプログラミングに代わるものとして、文字列プログラムコードコンポネントは、図4の関係で以下に詳細に説明するように、自然言語を使ってもプログラミングすることができる。
【０１０２】
図2は異なる文字列プログラムコードコンポネント10、10'、10'' が組み込まれたシステム100の例を示したものである。ユーザー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は自然言語による表現13を包含する定義文字列12と、該定義文字列12に対し一義的に割り当てられ、自然言語による該表現13に対し割り当てられたファンクショナリティを実装するプログラムコードセグメント14とを包含する。
【０１０６】
前記システム100は、所定の類似尺度に基づいて所定の類似性を有する入力文字列を受け取った際に、以下に説明するように、前記プログラムコードセグメント14によって実装されたファンクショナリティを実行するように設けられている。
【０１０７】
そのため該システム100は制御装置20を包含する。該制御装置20は、自然言語による表現を包含する入力文字列を受け取るように設けられている。該制御装置20は更に、該入力文字列を文字列プログラムコードコンポネント10の定義文字列12と所定の類似尺度に基づいて比較し、該入力文字列が該定義文字列12に対して所定の類似尺度に基づいて所定の類似性を有する場合に当該の該文字列プログラムコードコンポネント10の該プログラムコードセグメント14によって実装されたファンクショナリティを実行するように設けられている。
【０１０８】
ステップS2において、前記制御装置側20で人間のユーザー42から例えば "Schalte bitte den Fernseher an" （「テレビをつけてください」）等の自然言語表現の形の入力文字列が受け取られる。入力文字列の入力は、ユーザー42が話す "Schalte bitte den Fernseher an" （「テレビをつけてください」）という文を例えばマイクロフォンを使って収集し、例えば従来の音声認識ソフトウェアを使って相応の文字列に転換できるように設けられた入力装置50、52によって支持されることができる。転換された文字列 "Schalte bitte den Fernseher an" （「テレビを付けてください」）は入力装置50、52側から制御装置20に入力文字列として転送される。
【０１０９】
ステップS3では、前記制御装置が前記入力文字列を所定の類似性尺度に基づいて一つまたは複数の文字列プログラムコードコンポネント10、10'、10''の定義文字列と比較する。
【０１１０】
自然言語による表現の比較は例えば既知の従来型のパターン・マッチング法で実施しえる。
【０１１１】
図2で描写した事例と関係し、前記システム100は自然言語表現 "Schalte Fernseher an"（「テレビをつけろ」）を有する前記定義文字列12を包含する文字列プログラムコードコンポネント10が組み込まれているものと仮定する。この該定義文字列12は該システム100に接続されているテレビ34のスイッチをいれるファンクショナリティを実装する相応のプログラムコードセグメント14に割り当てられている。
【０１１２】
前記入力文字列 "Schalte bitte den Fernseher an" （「テレビをつけてください」）と前記定義文字列 "Schalte Fernseher an"（「テレビをつけろ」）の比較は、該入力文字列が該定義文字列を完全に包含するという結果を示し、この場合、十分な類似性があると解釈される。
【０１１３】
各々自然言語による表現を包含する文字列の比較には各種類似性尺度および各種比較方法が用いられることは自明である。本発明の対象ではないそのような諸方法はそれ自体としては専門家には既知のものである。また、例えば（前述例の関係において内容のない）助辞の「bitte」や冠詞等が削除されることによって比較対象の表現が比較前に適合化簡略化されることも知られている。また比較対象表現は例えば動詞を不定形のみで表示するなどして文法的に簡略化しえる。
【０１１４】
もし上記のケースのように、前記入力文字列 "Schalte bitte den Fernseher an" （「テレビをつけてください」）が所定の類似尺度に基づいて前記定義文字列 "Schalte Fernseher an"（「レビをつけろ」）と所定の類似性を有する場合は、前記制御装置はステップS4において当該プログラムコードセグメント14によって実装されたファンクショナリティを実行し、それによってテレビ34がつけられる。
【０１１５】
ステップS3において十分に類似する文字列プログラムコードコンポネントの定義文字列が見つけられない場合は、制御装置20はユーザーに対し適した形でシグナルを出すことができる。それに対して、前記システムが、各々が一定の類似性を定義文字列に対して示す複数の定義文字列を見いだしたときは、そのことを同じくユーザーに対して出力することができる。ユーザーに対しては、この場合、相応の定義文字列を基に同ユーザーの考えで同ユーザーの入力文字列に最も良く合う文字列プログラムコードコンポネントを選択する可能性を提供することができる。
【０１１６】
自然言語による表現を持つ入力文字列は代替的に例えば光度センサー40等の端末によっても作成され、前記制御装置20に伝送されることができる。例えば室内の光度が夜間や強く曇った天気の場合等で下がったときに、"es ist dunkel" （「暗い」）という形で文字列を作成し、該制御装置20に伝送することができる。すると同制御装置は、上記に説明したように、前記システムに組み込まれた文字列プログラムコードコンポネント10、10'、10'' を、そのうちの一つの文字列プログラムコードコンポネントが定義文字列と十分な類似性を示しているかを検索することができる。それが該当する場合、該制御装置20は該定義文字列と一義的に割り当てられたファンクショナリティを実行することができ、それによって例えば該システム100に接続されているランプ30が点けられる。また装置40がこの入力文字列を該制御装置20に自動的に伝送するのではなく、該制御装置20から相応の問合せを受け取ったときのみ伝達するように設けることも可能である。
【０１１７】
技術機器の制御の代わりに、有利な形として、前記文字列プログラムコードコンポネント10の前記プログラムコードセグメント14はユーザー42と該文字列プログラムコードコンポネント10の間のコミュニケーションを可能にするファンクショナリティを実装するために使用されることができる。これは特に、例えば医療分野におけるエキスパートシステムに関係し有利に活用することができる。以下の例はそれを極めて簡略に一例として示唆したものである。
【０１１８】
エキスパートシステム36は以下に説明する方法でユーザー42と文字列プログラムコードコンポネント10、10'を使ってコミュニケーションすることができる。ユーザー42は例えば "ich glaube, ich bin krank"（「私は病気だと思う」）という表現で前記制御装置20を介してエキスパートシステム36に話しかけることができる。該制御装置20はこの表現を包含する入力文字列を既存の文字列プログラムコードコンポネント10の定義文字列と比較し、例えば表現 "ich bin krank"（「私は病気だ」）を含む文字列プログラムコードコンポネント10の定義文字列12を見つける。この文字列プログラムコードコンポネント10のプログラムコードセグメント14は次のような形のユーザー42との会話を実装する。
ユーザー："ich glaube, ich bin krank"（「私は病気だと思う」）
システム："Was fehlt Dir, hast Du Fieber?"（「どうしたの、熱があるの？」）
ユーザー："ja"（「ある」）
システム："Wie hoch ist Dein Fieber?（「熱は何度あるの？」）
ユーザー："38,5"（「38.5度」）
システム："Wie lange hast Du schon Fieber?"（「いつから熱があるの？」）
ユーザー："Seit heute Mittag"（「今日の昼から」）
システム："Hast Du weitere Beschwerden"（「ほかに悪いところは？」）
ユーザー："Nein"（「ない」）
システム："Dann ruh' Dich aus, vielleicht geht es morgen schon wieder besser"（「それじゃ安静にして。明日になればまた直ぐ良くなるかもしれない」）
【０１１９】
システムのアウトプットは例えばスピーカー54のような適当な出力装置50、54を介して自然言語でユーザーに向けて出力されることができる。代わりに質問や注意の表示は画面によってなされても良い。
【０１２０】
入力文字列 "ich glaube, ich bin krank"（「私は病気だと思う」）によって呼び出された前記文字列プログラムコードコンポネント10は、ユーザーの一般的健康状態を問い合わせる会話を実装する。その際に目立ったことがなければ会話は上記のように終了されることができる。しかし会話の経過が次のようになった場合
...
システム："Was fehlt Dir, hast Du Fieber?"（「どうしたの、熱があるの？」）
ユーザー："ja"（「ある」）
システム："Wie hoch ist Dein Fieber?（「熱は何度あるの？））
ユーザー："39,5"（「39.5度」）
システム："Wie lange hast Du schon Fieber?"（「いつから熱があるの？」）
ユーザー："Seit drei Tagen"（「三日前から」）
システム："Hast Du weitere Beschwerden"（「ほかに悪いところは？」）
ユーザー："Ja, Kopf- und Gliederschmerzen, Schnupfen und Husten"（「ある。頭痛と関節の痛み、鼻水と咳が」。）
該文字列プログラムコードコンポネント10の該プログラムコードセグメント14は次のような会話の流れになるよう形成されることができる。
システム："Deine Symptome koennten auf eine Grippe hindeuten"（「君の症状からインフルエンザかもしれない」） ...
【０１２１】
同時に現在実行されている該文字列プログラムコードコンポネント10のファンクショナリティは、表現 "Grippe" （「ンフルエンザ」）を持つ入力文字列を前記制御装置20に伝送するように設けられていても良い。そのようにすれば、ユーザー42の健康状態をインフルエンザの疑いに関して独自のまさにこの目的で用意されている文字列プログラムコードコンポネント10'を用いてより詳しく調べるために、この文字列プログラムコードコンポネント10'のファンクショナリティを呼び出すことができる。このファンクショナリティは続いて適した会話によってユーザーの状態について更なる情報を聞き出し、相応の対処提案をすることができる。
【０１２２】
通常は、表現 "Grippe" （「インフルエンザ」）を持つ定義文字列を示す文字列プログラムコードコンポネント10'は、従前の文字列プログラムコードコンポネント10によって問い合わされた (Fieber, wie hoch, wie lange, weitere Beschwerden) （熱、何度、いつから、他に悪いところは）情報にアクセスできる。そうであれば相応の、ファンクショナリティに原則として用意されている質問は外すことができる。したがってユーザーにとっては一つの文字列プログラムコードコンポネント10が間接的に更なる文字列プログラムコードコンポネント10'を呼び出したことは明白である。
【０１２３】
既に繰り返し触れたように、文字列プログラムコードコンポネントは、以下に図4が非常にシンプルな例として簡単に示すように、ユーザー側で自然言語を使ってプログラミングされることができる。自然言語によるプログラミングについては図5および6を用いて詳細に後述する。
【０１２４】
第一のステップT1において複数の文字列プログラムコードコンポネント10; 10', 10'' をシステム100内に用意する。これらの文字列プログラムコードコンポネントはもう一つの更なる新しい文字列プログラムコードコンポネントの自然言語プログラミングのベースを形成する。 
【０１２５】
ここで図2におけるシステム100に関し、例えばテレビのスイッチを入れるための文字列プログラムコードコンポネント10等の各種文字列プログラムコードコンポネント10; 10', 10'' が既に同システムに組み込まれていると前提する。前記文字列プログラムコードコンポネント10は表現 "Schalte Fernseher an"（テレビをつけろ）を持つ定義文字列12と、それに連動する、テレビ34のスイッチをオンにするファンクショナリティを実装するプログラムコードセグメントを包含する。
【０１２６】
更なる文字列プログラムコードコンポネント10'は室内の照明の明るさを調整するために使われ、定義文字列 "Pruefe Helligkeit"（「明るさをチェックしろ」）を包含する。この文字列プログラムコードコンポネント10'のプログラムコードセグメント14は、現在の光度を（自然言語表現を包含する）入力文字列の形で前記制御装置20に伝送するための問合せを光度センサー40に送るというファンクショナリティを実装する。既に前述した通り、前記システム100には、この入力文字列を処理し、例えば "es ist dunkel"（「暗い」）という形の表現を受け取った際にランプ30を点けるか、または表現 "es ist sehr hell"（「とても明るい」）に対する反応として（図示していない）ブラインド等の遮光装置を操作する更なる文字列プログラムコードコンポネント10'' が既設されていても良い。
【０１２７】
続いてユーザー42はステップT2において既にシステム内に用意されている複数の文字列プログラムコードコンポネント10、10'、10'' を使って次のように新しい文字列プログラムコードコンポネントを作成する。
【０１２８】
第一の部分ステップTS2.1においてユーザー42は自然言語の表現を含む、定義されるべき新たな文字列プログラムコードコンポネントのための定義文字列を与える。当該例では、この定義文字列は例えば表現 "ich moechte fernsehen"（「私はテレビを見たい」）を含んでいても良い。
【０１２９】
次の部分ステップTS2.2において、ユーザーは新たに定義すべき更なる文字列プログラムコードコンポネントのプログラムコードセグメントの定義のための文字列シーケンス（「プログラミング文字列」）を指定する。文字列シーケンスの諸文字列はその際、各々自然言語の一つの表現を包含する。文字列シーケンスの一つの文字列が所定の類似尺度に基づいて複数の文字列プログラムコードコンポネント10; 10', 10'' の文字列プログラムコードコンポネント10の定義文字列に対し所定の類似性を示す場合、すなわち「プログラミング文字列」が文字列プログラムコードコンポネント10の定義文字列の少なくとも一つの部分文字列を包含する場合は、新たに定義すべき文字列プログラムコードコンポネントのプログラムコードセグメントは、複数の文字列プログラムコードコンポネント10; 10', 10''の文字列プログラムコードコンポネント10のプログラムコードセグメント14分が拡張される。 
【０１３０】
具体的には、ここで説明するケースにおいて文字列シーケンス（プログラミング文字列）は次の通りとなりえる("Pruefe die Helligkeit", "Schalte den Fernseher an")（「明るさをチェックしろ」、「テレビをつけろ」）。文字列 "Pruefe die Helligkeit"（「明るさをチェックしろ」）はその際、前述した文字列プログラムコードコンポネント10'の定義文字列12の表現 "Pruefe Helligkeit"（「明るさをチェックしろ」）を包含する。したがって新たに定義すべき文字列プログラムコードコンポネントの（まだ空の）プログラムコードセグメントは文字列プログラムコードコンポネント10'のプログラムコードセグメント分が補足される。同様にして、文字列"Schalte den Fernseher an"（「テレビをつけろ」）は定義文字列12の表現  "Schalte Fernseher an"（「テレビをつけろ」）を含むので、定義すべき文字列プログラムコードコンポネントのプログラムコードセグメントは文字列プログラムコードコンポネント10のプログラムコードセグメント分が追加的に補充される。
【０１３１】
最終のステップT3において、上記に説明した方法で新たに定義された文字列プログラムコードコンポネントはシステム10に組み込まれる。
【０１３２】
もしユーザー42が "ich moechte Fernsehen"（「私はテレビを見たい」）という表現でシステム100に話しかければ、新たに定義された文字列プログラムコードコンポネントのファンクショナリティが呼び出される。これが光度センサー40への問合せを介して光度をチェックする。それに対して該システム100が受け取った入力文字列 ("es ist dunkel", "es ist sehr hell")（「暗い」、「非常に明るい」）に応じて、必要があればランプ30を点け、またはブラインドを下げる。最後にテレビ34がつけられる。
【０１３３】
このような方法を使えば前述したものに比べ極めて複雑なプロセスも、既存の文字列プログラムコードコンポネントを使用し自然言語によってのみでプログラミングされることができることは自明である。特に分岐、条件付き命令、ループ等々の制御構造も、基本モジュールとして、従来のプログラミング言語を使用して文字列プログラムコードコンポネントの形で実装されることができる。これらの基本コンポネントは自然言語による新たな文字列プログラムコードコンポネントの後続のプログラミングに使用されることができる。
【０１３４】
これを更に詳細に説明することなく、定義文字列  "ich moechte fernsehen" （「私はテレビを見たい」）を持つ新たな文字列プログラムコードコンポネントは上記例に代わり、次のような文字列シーケンスによって定義されても良い。
"Wenn ich im Arbeitszimmer bin, 
stelle die Helligkeit der Raumbeleuchtung auf Vollmondnacht. 
Lasse die Jalousien herunter und 
schalte den Arbeitszimmerfernseher an. 
Wenn ich in Wohnzimmer bin, 
schalte den Wohnzimmerfernseher an".
（「もし私が書斎にいるときは
室内照明の明るさをフルムーンナイトに設定せよ
ブラインドを下ろせ
書斎のテレビをつけろ
私が居間にいるときは
居間のテレビをつけろ」。）
【０１３５】
この例は、システム内に既に条件付き命令 ("Wenn ...") （「もし〜なら」）を実装した文字列プログラムコードコンポネントが既設されており、ユーザーのロケーション ("im Wohnzimmer ...", "im Arbeitszimmer")（「居間にいる...」、「書斎にいる...」）、照明 ("stelle die Helligkeit der Raumbeleuchtung auf Vollmondnacht") （「室内照明の明るさをフルムーンナイトに設定しろ」）およびブラインド ("Lasse die Jalousien herunter") （「ブラインドを下ろせ」）の調整可能な操作および異なるテレビの操作 ("schalte den Arbeitszimmerfernseher an", "schalte den Wohnzimmerfernseher an")（「書斎のテレビをつけろ」、「居間のテレビをつけろ」）が相応の定義文字列を介して応答可能であることが前提である。
【０１３６】
図5は自然言語によるプログラミングができるシステム200のコンポネントを示す概略図である。
【０１３７】
自然言語によるプログラミングはこのコンテキストにおいては、主に文字列プログラムコードコンポネントとして表示され、上記で既に原則的に説明されているデータ構造に基づく。
【０１３８】
システム200は保存領域270を有する一制御装置260、一入力装置240、一保存領域230、一コードジェネレータ282および一コンパイラ284を包含する。各コンポネントの課題とファンクショナリティについて以下に説明する。
【０１３９】
入力装置240はシステムの利用者に対しシステムへの入力を入力するのに用いられる。入力は、以下に説明するように、例えば「二つの数を足せ」のように、自然言語によるプログラミング文字列を用いて自然言語でなされる。
【０１４０】
前記入力装置240は以下に説明するように、利用者の該システム200とのコミュニケーションを支持するエディタ250を包含する。該エディタ250は通常、ユーザーの入力と前記制御装置260のアウトプットを出力できる例えばディスプレイ等の出力装置を包含する。
【０１４１】
文字列プログラムコードコンポネント210、210'、210''は図1に関係して既に説明済みである。
【０１４２】
パラメータ入力のためのメソッド16の作用方法とメリットは以下に一つの簡単な例に関して見ることができる。
【０１４３】
一つの文字列プログラムコードコンポネントはパラメータの構築と収集のためのメソッド「collectParameter()」を実装する。前記文字列プログラムコードコンポネントのプログラムコードセグメントは、この例では、パラメータとして入力されることが可能な一つまたは複数の場所における時刻の出力のためのファンクショナリティを実装する。
public class WhatTime: SentenceComponent {
【０１４４】
パラメータ入力用のためのメソッド16は次の形態を有する。
【０１４５】
プログラミング文字列または入力文字列として例えばエディタを介して "wie spaet"（「何時か」）と入力されると、システムはマッチングアリゴリズムを介して既存の文字列プログラムコードコンポネントの集合の中から一致するものを検索し、以前に記述した文字列プログラムコードコンポネントの定義文字列 "Wie spaet ist es in den folgenden Staedten?" （「次の都市では何時か？」）との部分一致を見つける。前記システムは次にこの文字列プログラムコードコンポネントのメソッド「collectParameter」を呼び出す。
【０１４６】
該メソッドcollectParameterは次のプログラムコードを基に、文が正しく開始されたかをチェックし、そうでない場合は修正される。
public: 
String getSentence();
String collectParameter(String *sentence, 
String *suggestions, 
String receivedWord);
/* Markierung:   nameRueckgabe => 
"aktuelle Zeit der Staedte" */ 
String excecuteCodesegment();
Private:
List<String> selectedCities;
}
public String WhatTime:: getSentence ()
{
return "Wie spaet ist es in den folgenden Staedten?"
}
public String WhatTime::collectParameter(String *sentence, 
String *suggestions,
String receivedWord);
{
if (!sentence.isEmpty())
{
sentence = "Wie spaet ist es";
return "ok";
}
if (sentens.endsWith("?"))
{
sentence.replaceLastCommaWith(" und ");
return "EndOfSentence";
}
if (receivedWord  == "Schweiz"))
{
selectedCities.add("Schweiz")
sentence = sentence + "in der Schweiz";
return "ok";
}
else if (receivedWord  == "Malta"))
{
selectedCities.add("Malta")
sentence = sentence + "auf Malta";
return "ok";
}
else if (receivedWord  == "London"))
{
selectedCities.add("London")
sentence = sentence + "in London";
return "ok";
}
else
{
suggestions = "(Suggestion: Paris), 
(Suggestion: London), 
(Suggestion: Schweiz), 
(Suggestion: Malta)";
Return "(Error: Ihr Angabe ist falsch!)";
}
}
public String WhatTime::excecuteCodesegment() {
String timeInCities = "Die Ausgabe der Uhrzeit fuer 
folgende Staedte: ";
for(int i; sizeOf(selectedCities) < i; i++)
{
timeInCities = timeInCities + selectedCities[i] + ": " + 
Date.getTime(selectedCities[i]).toString();
}
return timeInCities;
}
【０１４７】
返答「ok」によって前記エディタは前記システムに対し、記述が正しいことを通知する。該システム側の方もアーギュメント「sentence」のコンテントを該エディタに与える。同エディタは同エディタ内で修正を表示しユーザーの入力を待つ。同ユーザーが単語 "Schweiz" （「スイス」）を指定すると、同エディタはこの入力を前記システムに転送する。前記システムはアーギュメント「receivedWord」に対し単語 "Schweiz" （「スイス」）を割り当て、メソッド「collectParameter」を再び呼び出す。
if (!sentence.isEmpty())
{
sentence = "Wie spaet ist es";
return "ok";
}
【０１４８】
パラメータ入力のためのメソッド16は次のプログラムコードを基に文法を修正し、選択された都市のリストに一つのエントリーを追加する。
if (receivedWord  == "Schweiz"))
【０１４９】
それによりエディタ内で構文 "Wie spaet ist es in der Schweiz, "（「スイスは何時か、」）が表示される。
{
selectedCities.add("Schweiz")
sentence = sentence + "in der Schweiz, ";
return "ok";
}
【０１５０】
ユーザーが「Matta」と入力したとする。そうすると該メソッド「collectParameter」が再度、呼び出される。単語「Matta」は有効な都市ではないので、パラメータ入力のためのメソッド16の次のプログラムコードによってエラーメッセージが作成され、該システムに対しいくつかの修正提案が渡される。
【０１５１】
該システムはエラーメッセージと提案を前記エディタに転送する。同エディタは該エラーメッセージと提案を出力する。
else
{
suggestions = "(Suggestion: Paris), 
(Suggestion: London), 
(Suggestion: Schweiz), 
(Suggestion: Malta)";
Return "(Error: Ihr Angabe ist falsch!)";
}
【表１】
2019519870.tif 000003
【０１５２】
ユーザーはそれに応じて彼が入力した「Matta」を修正し、該エディタは修正された入力を該システムに転送する。コントローラは「receivedWord」に対し単語「Malta」を割り当て、該メソッド「collectParameter」を再度、呼び出す。次のプログラムコードによって選択された都市のリストに更なるエントリーが追加され、文が文法的に修正される。
【０１５３】
当該の文はその後 "Wie spaet ist es in der Schweiz, auf Malta"（「スイスは何時か、マルタでは」）となる。ユーザーは疑問符により文の終了を指定する。該エディタはこの入力を該システムに転送する。該メソッド「collectParameter」が再度、呼び出される。次のプログラムコードによって文は再度、文法的に修正され、戻り値「EndOfSentence」をもって該システムにパラメータ入力が終了したことを知らせる。
else if (receivedWord  == "Malta"))
{
selectedCities.add("Malta")
sentence = sentence + "auf Malta";
return "ok";
}
【０１５４】
前記システムはアーギュメント「sentence」のコンテントを前記エディタに送る。同エディタは文を表示し、ユーザーからの指定を待つ。
if (sentens.endsWith("?"))
{
sentens.replaceLastCommaWith(" und ");
return "EndOfSentence";
}
【表２】
2019519870.tif 000004
【０１５５】
パラメータ入力のためのメソッド16の代わりに他の方法による入力として制御装置260を使っても良い。そのためには文字列プログラムコードコンポネントのメソッドにマーキング「partOfSentence」がマークされる。同メソッドは一つの入力パラメータを持ち、戻り値を持たない。
/* Markierung: partOfSentence = "eine Zeichenkette" */
【０１５６】
このようにして文字列プログラムコードコンポネント210は前記制御装置260に、定義文字列の一部をパラメータとして解釈し、パラメータの取得を引き受けることを伝える。取得されたパラメータはその後コードジェネレータ282からこのメソッドに割り当てられなければならない（以下に一例として表示されるプログラムコード事例の中に「文字列プログラムコードコンポネント」の代わりに「SentenceComponent」というタームが現れるが、これは同義語として理解すべきとする）。
void setOutput( String output );
public class PrintText: public SentenceComponent {
【０１５７】
上記に表示された新たな文字列プログラムコードコンポネント210 "gebe eine Zeichenkette auf dem Bildschirm aus."（「一つの文字列を画面にアウトプットせよ」）がシステム200に組み込まれると、それは分析を経て、レジストレーションテーブルに登録される。制御装置260は登録中に取得されたマーキングによって、文部分 "eine Zeichenkette"（「一つの文字列」）の値がメソッド「setOutput( String output )」のアーギュメントとして割り当てられなければならないことを認識する。
public: 
String getSentence();
void executeCodesegment();
/* Markierung: partOfSentence = "eine Zeichenkette" */
void setOutput ( String output );
private:
String outputString;
}
public void PrintText:: setOutput( String output ){
outputString = output;
}
public PrintText:: getSentence (){
return "gebe eine Zeichenkette auf dem Bildschirm aus."
}
public String PrintText::executeCodesegment() {
println( outputString );
}
【０１５８】
一般に新たな文字列プログラムコードコンポネント210がシステム200に組み込まれると、メタデータアナライザー（図示されていない）によって分析され、当該メタデータが更なる使用のために予備される。
【０１５９】
メタデータには例えばクラス名、基本クラス、メソッド、変数等が属する。例えば文字列プログラムコードコンポネントがC++で供給された場合は、共に供給されたクラスの宣言のパースとそのメソッドによって、抽象クラス「SentenceComponent」を実装するクラスを検索する。それによりC++メタデータアナライザーは当該クラスを文字列プログラムコードコンポネントとして認識する。その際、メソッド「getSentence」が呼び出され、クラス名を含む定義文字列がメタデータテーブルに登録される。それによって前記文字列プログラムコードコンポネントはシステムに組み込まれ、自然言語によるプログラミングに使用されることができる。
【０１６０】
どの任意の普及しているプログラミング言語にもあるメタデータアナライザーは、一つの文字列プログラムコードコンポネントのパプリックエレメントに関する全ての情報を取得することを可能にする技術をマスターしている。C++では、それをするため、メタデータを取り出すために文字列プログラムコードコンポネントの宣言ファイルをパースする。先進の従来プログラミング言語はそれ自身でこのような技術を提供している。例えばJavaでは「Reflection」によって一つのクラスの全メタデータが提供される。
【０１６１】
現在時刻を出力するための文字列プログラムコードコンポネント210は例えば次のような形であっても良い。
それに従いプログラミング言語C++ におけるメソッドexecuteCodesegment()のメタデータは次のような形であっても良い。
public class LocalTime: SentenceComponent {
public:   
String getSentence();
Time executeCodesegment();
}
public String LocalTime:: getSentence (){
return "Wie spaet es ist?"
}
public String LocalTime::executeCodesegment() {
return Date.getTime();
}
プログラミング言語 = c++
ヘッダファイル = WhatTime.h
クラス名 = WhatTime
メソッド名 = executeCodesegment
戻り値のタイプ = Time
アーギュメント = keins
【０１６２】
メタデータアナライザーは戻り値「Time」についてもメタデータを提供する。
プログラミング言語 = c++
ヘッダファイル = time.h
クラス名 = Time
【０１６３】
これによってメタデータアナライザーおよび制御装置は一つの文字列プログラムコードコンポネントの全メタデータ情報を使うことができる。
【０１６４】
このメソッドexecuteCodesegment( ) は一般に、例えばパラメータとして取得された文字列を出力したり、二つの数を足したりといった文字列プログラムコードコンポネント210の本来のファンクショナリティを実装するためのものである。
【０１６５】
自然言語によるプログラミング方法について以下に、図4の関係におけるよりもやや詳細に、やはり簡単な例によって図6を参照しつつ説明する。
【０１６６】
第一のステップS601において複数の文字列プログラムコードコンポネント210、210'、210'' が、既に前述した方法で、システム200に用意され登録される。例えば現在時刻の提供や文字列を画面に出力するための文字列プログラムコードコンポネント等である。
【０１６７】
第二のステップS602において該システム200のユーザーは自然言語によるプログラミング文字列を、入力装置240を介して該システム200に入力する。
【０１６８】
プログラミン文字列は例えば "wie spaet ..." （「何時...」）で始まっても良い。
【０１６９】
制御装置260は前記入力を認識し、前記プログラミング文字列の入力された部分を継続的に前記システム内にある文字列プログラムコードコンポネント210、210'、210''の定義文字列と比較する。本例においては、該制御装置260は定義文字列 "wie spaet ist es?"（「何時か？」）を有する文字列プログラムコードコンポネント210を認識し、ユーザーに対しこの文字列プログラムコードコンポネントを使用するよう提案することが可能である。この提案は例えばエディタ250を介して出力しても良い。本例ではユーザーはその提案を採用する。
【０１７０】
これにより定義文字列 "Wie spaet ist es?"（「何時か？」）を有する前記文字列プログラムコードコンポネントが選択される。プログラミング文字列 "wie spaet ..." （「何時...」）が定義文字列の少なくとも部分文字列を包含するからである。
【０１７１】
前記プログラミング文字列は相応に "wie spaet ist es?"（「何時か？」）と補われる。自然言語によるプログラミングは、例えばユーザーが "gebe ..."（「...を与えろ」）と入力する等で続けられることができる。
【０１７２】
前記制御装置260は再びこのプログラミング文字列と部分的に一致する定義文字列、すなわち"gebe eine Zeichenkette auf dem Bildschirm aus"（「一つの文字列を画面に出力しろ」）を認識し、当該の文字列の使用を提案する。ユーザーが提案をアクセプトした場合、本ケースではそうであると前提するが、この場合は該制御装置260が、上記に一般的に説明したように、パラメータ"eine Zeichenkette"（「一つの文字列を」）の記録を引き受け、ここでユーザーがアポストロフィで囲った文字列か、データタイプ「String」の変数を入力することを期待する。
【０１７３】
ユーザーは"aktuelle Uhrzeit"（「現在時刻」）（文字列プログラムコードコンポネント"Wie spaet ist es?"（「何時か」）の戻り値）を入力する。プログラミング文字列はそれに応じ次のように補足される。
"wie spaet ist es? gebe die aktuelle Uhrzeit auf dem Bildschirm aus."
（「何時か。現在時刻を画面に出力せよ。」）
【０１７４】
ここにおいて上記に説明した方法の二つの有利な側面が明らかになる。
【０１７５】
文字列プログラムコードコンポネントは値を戻すことができる（現在時刻を示す時間表示）。そのような戻り値は例えばメモリー270等にシステム200によって保存されることができる。そのような戻り値は自然言語によってアノテーションされることが好ましく、本ケースにおいては "aktuelle Uhrzeit"（「現在時刻」）をもってなされる。このようにして後続の文字列プログラムコードコンポネントは単に原則としてのみならず、簡単な方法で、自然言語によって、自然言語表現 "aktuelle Uhrzeit"（「現在時刻」）によるパラメータ"eine Zeichenkette"（「一つの文字列」）を指定することで、そのような戻り値を使用することができる。
【０１７６】
前述の例は更に、プログラミング文字列の入力および文字列プログラムコードコンポネントの選択のステップが複数回交換できることを示している。またパラメータ問合せおよび入力はプログラミング文字列の入力中および／または入力後に必要になりえる。
【０１７７】
ユーザーがプログラミング文字列の入力が終了したことを知らせた場合、ステップS604でプログラミング文字列に割り当てられたプログラムが選択された文字列プログラムコードコンポネントのプログラムコードセグメントを基に作成される。
【０１７８】
それにはコードジェネレータ282が両文字列プログラムコードコンポネントのために、例えば次のようなプログラムコードを生成する。
【０１７９】
その際、変数 result_1は文字列プログラムコードコンポネント "wie spaet ist es?"（「何時か？」）の戻り値 "aktuelle Uhrzeit"（「現在時刻」）に相当する。当該のC++コンパイラ284は前記プログラムコードをコンパイルし、これを実行可能なファイルとしてそのために予定されているシステム200の（ここに示されていない）メモリーに置く。前記実行可能ファイルが実行されると、画面上に現在時刻が表示される。
#include " WhatTime.h"
#include "PrintText.h"
WhatTime whatTime_1= new WhatTime ()
String result_1 = whatTime_1.excecuteCodesegment();
PrintText printText_1 = new PrintText()
printText_1.setOutput( result_1 );
printText_1.excecuteCodesegment();
【０１８０】
当該算数計算は例えば「20に5を足し、足し算結果の平方根を求めよ」などの形で自然言語によるプログラミング文字列によって指定しても良いし、あるいは  ―数学で一般的であるように―  例えば次のような数学表記を使っても良い。
【数１】
2019519870.tif 000005
【数２】
2019519870.tif 000006
【０１８１】
全ての数学記号を式表によって表示することもできるがそれに並び、前に得られた結果を定式における変数として、更なる計算に使用することも可能である。
【０１８２】
個々の文字列プログラムコードコンポネントのプログラムコードセグメントを作成するプログラミング言語が、プログラムコードのコードジェネレータが自然言語によって前述の方法でプログラミングしたプログラムのためにプログラムコードを作成する際のプログラミング言語とは異なることが可能であることは自明である。両プログラミング言語が異なるときは、コードジェネレータは目的のプログラミング言語のプログラムコード内に、例えばプロキシを介して、外のプログラミング言語によるプログラムコードセグメントを呼び出すことを可能にするメカニズムを追加することができる。
【０１８３】
既に触れたように、前記システムはユーザーが選択して使用することができる様々な目的プログラミング言語（C++、C#、Java等）および実行プラットフォーム（Windows、Linux、Android等）のためのコードジェネレータおよびコンパイラを包含することができる。以下に本書で提案する方法の更なる側面を例示的に説明する。
【０１８４】
特に条件付き命令のような制御構造は従来のプログラミング言語の重要な構成部分である。以下に事例で説明するように、ここに提案する自然言語によるプログラミングの方法によれば、制御構造をその全機能範囲において提供することができる。
【０１８５】
条件付き命令も同様に文字列プログラムコードコンポネントとして実装される。ここではメソッドexecuteCodesegment()に、例えばIF命令の場合に、マーキングcontrolFlow = "IF"でマークしても良い。それによってコードジェネレータ282はメソッドexecuteCodesegment()をIFステートメントの条件として登録するよう指示される。
【０１８６】
「a < b」のような形のジェネリックスな条件は簡単な方法で、相応の文字列プログラムコードコンポネントが、そのような条件のオペランドおよびオペレータを自然言語によるプログラミング中に問合せできるように設けられたパラメータのクエリのためのメソッドを有することによって、実装しえる。オペランドおよびオペレータの数と種類はその際、バリエーションを持たせることができ、同様にプログラミング中に問合せされることができる。このようにして任意の条件付き表明を形成することができる。
if ( classX.executeCodesegment() ){
// hier wird durch Codegenerator der 
// Source Code anderer Zeichenketten-Programmcode-Komponenten
// eingetragen.
}
【０１８７】
文字列プログラムコードコンポネントでは他にも、ジェネリックスなスキーマによらず自然言語に近い、例えば "wenn es draussen hell ist, dann ..."（「もし外が明るければ、その時は...」）形の条件をチェックすることが可能である。これは文字列プログラムコードコンポネントを使って次のように実現することができる。
【０１８８】
クラス「OutdoorBrightnessSensor」は屋外照度センサーに関係する。そのメソッド「isBright()」は光度を測定し、光度が所定の強さを下回らないときは、「true」を返す。
public class MyFirstIF: SentenceComponent {
public: 
String getSentence();
/* Markierung:   controlFlow = "IF" */ 
boolean executeCodesegment();
}
public String MyFirstIF:: getSentence (){
return "Wenn es draussen hell ist, dann ..."
}
public boolean MyFirstIF:: executeCodesegment(){
OutdoorBrightnessSensor sensor = new OutdoorBrightnessSensor();
boolean brightness = sensor.isBright();
if ( brightness == true ){
return true;
}
else {
return false;
}
}
【０１８９】
コードジェネレータはこれに次のプログラムコードを C++で作成する。
#include "MyFirstIF.h"
MyFirstIF myFirstIF _1 = new MyFirstIF ();
if (myFirstIF _1.executeCodesegment() ){
// hier wird durch Codegenerator der 
// Source Code anderer Zeichenketten-Programmcode-Komponente
// eingetragen.
}
【０１９０】
メソッドexecuteCodesegment() がブーリアン真理値「true」を戻すと、ブロック内で命令が実行される。この命令は、語句「dann」（〜そうしたら）の後に入力されたプログラミング文字列に基づいて選択される文字列プログラムコードコンポネントからきている。
【０１９１】
更なる一側面によれば、文字列プログラムコードコンポネントの部分集合は技術的に一つのモジュールに集約することができる。モジュールのシステム内の登録の際、このモジュールに含まれるすべての文字列プログラムコードコンポネントはメタデータテーブルの中で一つのグループに纏められる。
【表３】
2019519870.tif 000007
【０１９２】
一つのグループ内の全ての文字列プログラムコードコンポネントは他の文字列プログラムコードコンポネントのインターフェースを知っている。一つのグループの文字列プログラムコードコンポネント間では暗黙的関係をとることができる。文字列プログラムコードコンポネント「入力フィールドを追加せよ」は暗黙的に文字列プログラムコードコンポネント「アプリケーションを作成せよ」に関連付けられる。したがって作成された入力フィールドは作成されたアプリケーションに割り当てられ、入力すべきパラメータがこれをまず明示的に指定する必要はない。また制御装置260はグループ化によって、一つの第一の文字列プログラムコードコンポネントの戻り値を同じグループ内のそれに続く文字列プログラムコードコンポネントに暗黙的に割り当てることができる。
【０１９３】
ここで提案する形での自然言語によるプログラミングによっても取得しえる更なる側面は種々の課題の並行処理である。
【０１９４】
例えば人型ロボットの制御のような複雑なシステムの制御には、複数のプログラム手順が同時に進行しなければならないことが多い。これらは一つの課題を協同で扱う複数のプロセスである。プログラム手順の並行化は先進のプログラミング言語では簡単に実現可能である。例えばJavaでは一つのプロセスのプログラミングに唯一のメソッドrun()を持つ抽象クラスが並行して実行すべきプログラムコードを実装するために用意される。
【０１９５】
一つのプロセスを生成するためには、抽象クラスThreadとそのメソッドrun() を実装する新しいクラスが作成されなければならない。その後クラスのインスタンスが作成されなければならず、クラス「Thread」のメソッドstart() が呼び出されなければならない。例えば定義文字列 "Lasse die Jalousien herunter" （「ブラインドを下げろ」）を含む文字列プログラムコードコンポネントのためには、そのクラス名が「JalousieDown」であることを前提に、次のプログラムコードが生成される。
Public MyThread_1 implements Thread{
public void run()
{
}
}
【０１９６】
定義文字列によって告げられる次の文字列プログラムコードコンポネントによって簡単な平行課題が実現できる。
Public MyThread_1 implements Thread{
public void run()
{
JalousieDown jalousieDown_1 = new JalousieDown();
jalousieDown_1.executeCodesegment();
}
}
Mache folgendes parallel: 
stelle die Helligkeit der Raumbeleuchtung auf Vollmondnacht.
Lasse die Jalousien herunter
（次を並行して行え：
室内照明の明るさをフルムーンナイトに設定しろ
ブラインドを下げろ）
【０１９７】
定義文字列 "Mache folgendes parallel" （「次を並行して行え」）の入力によってJavaコードジェネレータは各文字列プログラムコードコンポネントに対し、各々一つのプロセスを作成し、相応の文字列プログラムコードコンポネントをメソッドrun() 内に追加する。
【０１９８】
それによって両文字列プログラムコードコンポネント、つまり各プログラムコードセグメントによって実装されたファンクショナリティはメソッドstart() の実行で同時に動くであろう。
Public MyThread_1 implements Thread{
public void run()
{
LightDeamer lightDeamer_1 = new LightDeamer();
lightDeamer_1.setLight( "Vollmondnacht" );
lightDeamer_1.executeCodesegment();
}
}
Public MyThread_2 implements Thread{
public void run()
{
JalousieDown jalousieDown_1 = new JalousieDown();
jalousieDown_1.executeCodesegment();
}
}
MyThread_1.start();
MyThread_2.start();
【０１９９】
既に繰り返し示唆してきたように、上記に説明した方法によれば、既存の文字列プログラムコードコンポネントから新しい文字列プログラムコードコンポネントを作成する可能性もある。
【０２００】
新しい文字列プログラムコードコンポネントを作成するためには、新しい定義文字列のために一つまたは複数のエレメンタリーな文字列プログラムコードコンポネントを指定する。コードジェネレータ282はそれに対し当該の新しい文字列プログラムコードコンポネントのために、新しい定義文字列を戻すためのメソッド"getSentence"、および、新しい文字列プログラムコードコンポネントの作成に使われる個々の文字列プログラムコードコンポネントが用意するファンクショナリティの組合せであるところのファンクショナリティを実装するためのメソッド"executeCodesegment()"を作成する。
【０２０１】
一つの極めて簡単な、代表的な事例によれば、新しい定義文字列 "Bildschirmzeitausgabe" （「画面時刻表示」）のためには、既に説明した両文字列プログラムコードコンポネント "wie spaet ist es?" （「何時か？」）および "gebe eine Zeichenkette auf dem Bildschirm aus"（「画面に一つの文字列を出力せよ」）に基づいて、一つの文字列プログラムコードコンポネントが作成されえる。
【０２０２】
相応のプログラミング文字列は例えば次でも良い。
"Erzeuge neue Zeichenketten-Programmcode-Komponente zu der Definitionszeichenkette D und der Programmierzeichenkette P"
（「定義文字列Dおよびプログラミング文字列Pに対し新しい文字列プログラムコードコンポネントを作成せよ」）
【０２０３】
ここでDおよびPは各々文字列のタイプのパラメータとして相応している。
【０２０４】
スペシフィケーションD = "Bildschirmzeitausgabe"（「画面出力」）、P =""wie spaet ist es? gebe eine Zeichenkette auf dem Bildschirm aus"（「何時か？文字列を画面に出力せよ」）
は希望する効果をもたらす。
【０２０５】
すなわち定義文字列"Bildschirmzeitausgabe"（「画面出力」）を持つ新しい文字列プログラムコードコンポネントが作成される。自然言語によるプログラミングのために、上記に説明したように、プログラミング文字列 "wie spaet ist es? gebe eine Zeichenkette auf dem Bildschirm aus" （「何時か？文字列を画面に出力せよ」）が入力されれば、当該プログラムコードセグメントはコードジェネレータが作成したプログラムコードに相当する。
なお、本明細書において、ドイツ語特有の表記（アー・ウムラウト、ウー・ウムラウト、オー・ウムラウト、エスツェット)はアルファベットで表記した(アー・ウムラウトは「ae」、ウー・ウムラウトは「ue」、オー・ウムラウトは「oe」、エスツェットは「ss」)。
【図１】
2019519870.tif 000008
【図２】
2019519870.tif 000009
【図３】
2019519870.tif 000010
【図４】
2019519870.tif 000011
【図５】
2019519870.tif 000012
【図６】
2019519870.tif 000013
【手続補正書】
【提出日】平成30年12月27日(2018.12.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
自然言語によるシステム（100）の制御の方法であって、
- 該システム（100）内に、複数の文字列プログラムコードコンポネント（10、10'、 10''）を用意する（S1）ステップを包含し、その際に一つの文字列プログラムコードコンポネント（10）がそれぞれ
- 自然言語における表現（13）を包含する定義文字列（12）および
- 自然言語による該表現（13）に割り当てられたファンクショナリティを実装する該定義文字列（12）に一義的に割り当てられたプログラムコードセグメント（14）
を包含し、
複数の文字列プログラムコードコンポネントのうちの諸文字列プログラムコードコンポネントの少なくとも一つがパラメータ入力のためのメソッド（16）を包含し、それによってこの文字列プログラムコードコンポネントがこの文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定することができるパラメータ入力を支持するように設けられていることを特徴とする前記自然言語によるシステム（100）の制御の方法。
【請求項２】
複数の該文字列プログラムコードコンポネントのうちの諸文字列プログラムコードコンポネントの少なくとも一つの文字列プログラムコードコンポネントの該プログラムコードセグメントによって用意されたファンクショナリティが、このファンクショナリティが該システムによって実行されたときに、戻り値を供給し、その際にこの戻り値が好ましくは自然言語によってアノテーションされており、また複数の該文字列プログラムコードコンポネントのうちの少なくとも一つの更なる文字列プログラムコードコンポネントが、その更なる文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを該システムが実行したとき、特にその更なる文字列プログラムコードコンポネントの該プログラムコードセグメントによって用意された該ファンクショナリティを特定するためのパラメータとして、戻り値を使用し、その際にその戻り値の使用が該戻り値の自然言語アノテーションを基になされることができる請求項1に記載する方法。
【請求項３】
該プログラムコードセグメント（14）またはパラメータ入力のための該メソッドが該文字列プログラムコードコンポネント（10）とユーザー（42）の間のダイアログを実装し、該ダイアログが該ユーザーと該文字列プログラムコードコンポネント（10）の間の会話を支持する請求項1または2に記載する方法。
【請求項４】
次の更なるステップを包含する請求項１または2のうちの一つに記載する方法。
- 該システム（100）による入力文字列の受け取り（S2）、
- 入力文字列が所定の該類似尺度に基づく該定義文字列（12）と比較（S3）され、かつ
- 該入力文字列が所定の前記類似尺度に基づいて該定義文字列（12）に対し所定の類似性を示しているときに、システム（100）によって該プログラムコードセグメント（14）よって実装されたファンクショナリティが実行（S4）され、
- 受け取った入力文字列の保存し、
- 文字列プログラムコードコンポネント（10; 10'）のプログラムコードセグメント（14）によって実装されたファンクショナリティの後続の実行を支持するための保存された該入力文字列を読み取り、
- 該プログラムコードセグメントによって実装されたファンクショナリティによって該入力文字列からコンテキスト情報を導き出し、かつ
- 該システムへ該コンテキスト情報を保存する。
【請求項５】
自然言語によるプログラミングの方法を包含し、更なるステップとして
- 自然言語によるプログラミング文字列の入力（S602）、
- 該プログラミング文字列が該文字列プログラムコードコンポネントの該定義文字列の少なくとも部分文字列を包含する場合における複数の文字列プログラムコードコンポネントのうちの一つの文字列プログラムコードコンポネント（210）の選択（S603）、
- 選択された該文字列プログラムコードコンポネントの該プログラムコードセグメントを基にした該プログラミン文字列に割り当てられたプログラムの作成（S604）
を包含し、
その際に、該プログラミング文字列が選択された複数の文字列プログラムコードコンポネントの各文字列プログラムコードコンポネントの定義文字列の少なくとも部分文字列を包含するときに、複数の該文字列プログラムコードコンポネントの中から複数の文字列プログラムコードコンポネントが選択され、該プログラミング文字列に割り当てられたプログラムが前記の複数選択された文字列プログラムコードコンポネントのプログラムコードセグメントに基づいて作成される請求項1に記載する方法。
【請求項６】
複数の文字列プログラムコードコンポネントのうちの諸文字列プログラムコードコンポネントの少なくとも一つの文字列プログラムコードコンポネントが、該文字列プログラムコードコンポネントの定義文字列の一部分が特定すべきパラメータとして標示されるようにパラメータ入力を支持するよう設けられている請求項1に記載する方法。
【請求項７】
一つの文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定することができるパラメータに定義可能なパラメータタイプが割り当てられている請求項1に記載する方法。
【請求項８】
複数の文字列プログラムコードコンポネントの中からの諸文字列プログラムコードコンポネントのうちの少なくとも一つの文字列プログラムコードコンポネントのプログラムコードセグメントがプログラムの流れを制御する制御構造を実装している請求項1に記載する方法。
【請求項９】
一つの新たな文字列プログラムコードコンポネントを複数の文字列プログラムコードコンポネントの中の複数の文字列プログラムコードコンポネントを基に作成するステップを包含し、その際、
- その新たに作成する文字列プログラムコードコンポネントのための新たな定義文字列が指定され、
- 前記の複数の文字列プログラムコードコンポネントが請求項1に則った自然言語によるプログラミング文字列の入力によって選択され、
- その際に前記の新たに作成する文字列プログラムコードコンポネントのための一つの新たなプログラムコードセグメントが、該プログラミング文字列に割り当てられたプログラムの作成ステップにおいて作成されたプログラムコードを基に作成される
請求項5に記載する方法。
【請求項１０】
複数の文字列プログラムコードコンポネント（10; 10'; 10''）を包含し、その際に一つの文字列プログラムコードコンポネント（10）がそれぞれ 
- 自然言語による表現（13）を包含する定義文字列（12）、 
- 自然言語による該表現（13）に割り当てられたファンクショナリティを実装する該定義文字列（12）に一義的に割り当てられたプログラムコードセグメント（14） 
を包含し、複数の文字列プログラムコードコンポネント（10; 10'; 10''）のうちの諸文字列プログラムコードコンポネント（10）の少なくとも一つがパラメータ入力のためのメソッド（16）を包含し、それによってこの文字列プログラムコードコンポネントが同文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定することができるパラメータ入力を支持するように設けられていることを特徴とする自然言語の処理のために設けられたシステム（100）。
【請求項１１】
複数の文字列プログラムコードコンポネントの中の諸文字列プログラムコードコンポネントのうちの少なくとも一つの文字列プログラムコードコンポネントのプログラムコードセグメント（14）によって用意されたファンクショナリティが、該ファンクショナリティが該システム（100; 200）によって実行されるとき、戻り値を供給するように設けられており、その際にその戻り値が好ましくは自然言語によってアノテーションされており、また該複数の文字列プログラムコードコンポネントの少なくとも一つの更なる文字列プログラムコードコンポネントが、この更なる文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティが該システムによって実行されるとき、特にこの更なる文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティの特定のためのパラメータとして、該戻り値を使用し、その際、その戻り値の使用が該戻り値の自然言語アノテーションを基になされるように設けられた請求項10に記載するシステム。
【請求項１２】
トリガー信号、なかでも入力装置（40）のセンサーによって収集された周辺信号を受信し、該トリガー信号に対する反応として該トリガー信号に依存する自然言語による表現を包含する入力文字列を導き出し、該制御装置（20）に転送するように設けられた入力装置（40）を包含する請求項10または11に記載するシステム（100）。
【請求項１３】
自然言語によるプログラミングのために引き続き設けられており、
- 自然言語によるプログラミング文字列の入力のための入力装置（240）、
- 文字列プログラムコードコンポネントを保存し、入力された該プログラミング文字列を処理するように設けられ、また諸文字列プログラムコードコンポネント（210）のうちの少なくとも一つを、入力されたプログラミング文字列が該文字列プログラムコードコンポネントの定義文字列の少なくとも部分文字列を包含するときに、選択するように設けられた制御装置（260）および
- 該プログラミング文字列に割り当てられたプログラムを少なくとも一つの選択された文字列プログラムコードコンポネントのプログラムコードセグメントを基に作成するよう設けられた一つのコードジェネレータ（282）および一つのコンパイラ（284）
を包含する請求項10に記載するシステム（200）。
【請求項１４】
自然言語を処理するように設けられ、文字列プログラムコードコンポネント（10）を包含し、その際に該文字列プログラムコードコンポネント（10）が 
- 自然言語による表現（13）を包含する定義文字列（12）および 
- 同定義文字列（12）に一義的に割り当てられ、自然言語による前記表現（13）に割り当てられたファンクショナリティを実装するプログラムコードセグメント（14）
を包含するシステムのためであり、
パラメータ入力のためのメソッド（16）によって該文字列プログラムコードコンポネントが該文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定できるパラメータ入力を支持するように設けられることを特徴とするデータ構造（10）。
【請求項１５】
複数の文字列プログラムコードコンポネントを更に包含し、その際にその複数の文字列プログラムコードコンポネントの諸文字列プログラムコードコンポネントのそれぞれが
- 自然言語による表現（13）を包含する定義文字列（12）、および 
- 自然言語による該表現（13）に割り当てられたファンクショナリティを実装し該定義文字列（12）に一義的に割り当てられたプログラムコードセグメント（14）、
を包含し、
その際、複数の文字列プログラムコードコンポネントの諸文字列プログラムコードコンポネントの少なくとも一つの文字列プログラムコードコンポネントのプログラムコードセグメント（14）によって用意されたファンクショナリティが、システム（100; 200）によって該ファンクショナリティが実行されたときに、好ましくは自然言語によってアノテーションされている戻り値を供給するように設けられており、また複数の文字列プログラムコードコンポネントの少なくとも一つの更なる文字列プログラムコードコンポネントが、この更なる文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティが該システムによって実行されたとき、特にこの更なる文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティの特定のためのパラメータとして、戻り値を使用し、その際にその戻り値の使用が該戻り値の自然言語によるアノテーションを基になされるように設けられている請求項14に記載するデータ構造。
【請求項１６】
文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定することができるパラメータに定義可能なパラメータタイプが割り当てられている請求項14から15までのうちの一つに記載するデータ構造。
【国際調査報告】
2019519870.tif 000014
2019519870.tif 000015
2019519870.tif 000016
2019519870.tif 000017