JP7023008B2 - 言語によって制御されるシステム - Google Patents

言語によって制御されるシステム Download PDF

Info

Publication number
JP7023008B2
JP7023008B2 JP2019507996A JP2019507996A JP7023008B2 JP 7023008 B2 JP7023008 B2 JP 7023008B2 JP 2019507996 A JP2019507996 A JP 2019507996A JP 2019507996 A JP2019507996 A JP 2019507996A JP 7023008 B2 JP7023008 B2 JP 7023008B2
Authority
JP
Japan
Prior art keywords
program code
string
character string
code component
programming
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2019507996A
Other languages
English (en)
Other versions
JP2019519870A (ja
Inventor
マスード アムリ,
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Amri Masoud
Original Assignee
Amri Masoud
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Amri Masoud filed Critical Amri Masoud
Publication of JP2019519870A publication Critical patent/JP2019519870A/ja
Application granted granted Critical
Publication of JP7023008B2 publication Critical patent/JP7023008B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/30Semantic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L15/00Speech recognition
    • G10L15/22Procedures used during a speech recognition process, e.g. man-machine dialogue
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L25/00Speech or voice analysis techniques not restricted to a single one of groups G10L15/00 - G10L21/00
    • G10L25/48Speech or voice analysis techniques not restricted to a single one of groups G10L15/00 - G10L21/00 specially adapted for particular use
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Multimedia (AREA)
  • Acoustics & Sound (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Signal Processing (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)
  • Machine Translation (AREA)
  • Devices For Executing Special Programs (AREA)
  • User Interface Of Digital Computer (AREA)

Description

本発明は自然言語を使用して一つのシステムを制御またはプログラミングする方法および相応に設けられたシステムに関する。
人間環境の中で運用され人とインターアクティブにコミュニケーションする技術システムに関係し、その複雑性から簡易なアリゴリズムをベースにしたのでは一般的に解決することができない課題が発生する。その一例としては人型ロボットの制御を挙げることができる。そこで発生する技術問題とその問題に対処するための解決方法の量が非常に膨大であり、大規模なエキスパート集団が取り組まなければ対応しきれないほどである。
技術システムや技術アプリケーションの言語をベースとする制御は、それ自体としては、モバイル端末用アプリケーションやロボット制御の関連などで既に知られている。
また自然言語によるプログラミング方法も長年にわたって、特にマン・マシーン・コミュニケーションの関連で、研究開発の対象となってきた。その目的は、プログラミング技術に関する特別な教育を受けていない利用者に対しても、自然言語を使って技術システムを制御する可能性を与えるというものである。
その際、問題となるのが多くの場合、自然言語が多義的であり、必ずしも明確または直接的にあるのではないコンテキスト情報に基づいて理解されるものであるということである。また、現在のソフトウェアは普通の利用者にとっては理解しにくいオブジェクト指向になっていることが多いのに対し、人間はプロシージャルに思考する傾向が強い。
本発明の課題は前述の問題に対処し、自然言語による技術システムの制御またはプログラミングを更に改善し、簡略化することにある。
この課題は並列列挙請求項の特徴を有する方法、システムおよびデータ構造によって解決される。好ましい態様および進化形態については従属請求項に記述する。
本発明は、本発明の関係において文字列プログラムコードコンポネントと呼ばれる特殊なデータ構造を主要なベースとしている。このデータ構造は、一方において、自然言語の一つの表現を含む定義文字列を含んでいる。
他方において、この文字列プログラムコードコンポネントは、前記自然言語の表現に対して割り当てられたファンクショナリティを実装し、前記定義文字列に対して一義的に割り当てられた一つのプログラムコードセグメントを包含する。
その定義文字列と前記プログラムコードセグメントは不可分的に連結され、一つの機能統一体を形成する。該プログラムコードセグメントはいうなれば該定義文字列のセマンティクス、すなわち、自然言語による該表現が規定しているものを実装する。
「自然言語における表現」という概念は、本発明において、該表現が一つまたは複数の自然言語の単語を包含する、という意味で理解すべきものとする。該表現はその際、一つまたは複数の基本形における単語を包含できるにすぎない。しかし該表現は自然言語における文法的に正しい文を包含することが好ましい。中間形態もまた可能である。
そのようなデータ構造、すなわち本発明による文字列プログラムコードコンポネントは完結した、高度にカプセル化された機能的統一体を提供するものである。該文字列プログラムコードコンポネントの内的実装は対外的に遮蔽されることができる。詳細に後述するように、該文字列プログラムコードコンポネントは簡単な方法、例えばプラグ・アンド・プレイによって、前記システムに組み込まれ、自然言語によって呼び出すことが可能である。このようにして該システムは第三者によって任意に拡張および補足されることができる。該文字列プログラムコードコンポネントのスペシフィケーションの必要性は最小限に限定される。前記プログラムコードセグメントのプログラミングにはJava や C++などの一般に知られたプログラミング言語を使用することができる。
そのため、自然言語によるシステム制御方法の好ましい一つの実施形態は、特に該システム内に前述の文字列プログラムコードコンポネントを複数用意するステップを含む。
本発明の好ましい実施形態によれば、複数の前記文字列プログラムコードコンポネントのうち少なくとも一つは、該文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されるファンクショナリティを特定するためのパラメータ入力を支持するように発展形成されている。
別の言葉で言えば、前記文字列プログラムコードコンポネントの前記プログラムコードセグメントによって実装される前記ファンクショナリティは固定的不変的である必要はなく、パラメータ入力によって特定することができるものである。該プログラムコードセグメントによって実装されているファンクショナリティ、例えばデータバンクから日付を読み取るという基本ファンクショナリティは、該パラメータによって、どのテーブルの同テーブル内のどの欄を読み取るのかという形で特定できる。
より詳しく述べれば、この少なくとも一つの文字列プログラムコードコンポネントは、パラメータ入力のための固有のメソッドを用意することができる。この文字列プログラムコードコンポネントが前記システムの制御装置によって処理されると、該パラメータ入力メソッドが呼び出され、同文字列プログラムコードコンポネント自身が、いうなれば必要なパラメータの入力処理も引き受ける。
別の代替的な実施形態によれば、複数の文字列プログラムコードコンポネントの中の一つの文字列プログラムコードコンポネントは、該文字列プログラムコードコンポネントを処理するシステムの制御装置のための文字列プログラムコードコンポネントの定義文字列の一部を明示的に特定するパラメータとして標記することにより、パラメータ入力を支持するように設けられることができる。それにはソフトウェア技術において基本的に知られている「マーキング」や「アノテーション」などの概念と関連しているテクノロジーを使用することができる。その、または、それらのパラメータの取得はこの場合、前記文字列プログラムコードコンポネントの該定義文字列内の特定の標記に基づいて制御装置が行う。本文書において使用する概念「マーキング」の実現が、ソフトウェア技術において原則として知られているアノテーション、XML、JSONなどのテクノロジーのみに限定されるものではないことは当然である。それには「マーキング」と同様の目的を充たす新しいテクノロジーを使用することも可能である。それに属するものとしては、例えばプログラミング言語のソースコード内の予約されたキーワードを相応のコンパイラまたはインタプリタによって使用することなどが挙げられる。
一実施形態によれば、文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定できるパラメータに、追加的に自由に定義可能なパラメータタイプを割り当てることができる。そのようなパラメータタイプは特に、従来のプログラミング言語で知られているString、Integer、Float、Date、Booleanなどのプリミティブタイプと違うものでありえる。パラメータタイプはこの関係で特に寸法単位などでありえる。また自由に定義可能なカテゴリー、例えば「Gemuese」(野菜)などもパラメータタイプとして予定されることができる。更に一つまたは複数の「標準パラメータ」および一つまたは複数の自由に定義可能なパラメータの組合せからなるパラメータタイプを定義し割り当てることも可能である。温度を表わすパラメータには、例えば浮動小数点数(Float)と具体的な度量衡単位(摂氏)を包含するパラメータタイプを定義することができる。
システム側で -または好ましくは前記文字列プログラムコードコンポネント自身の側で― 前述のパラメータ入力メソッドによってパラメータ取得が行われるという事実は、例えばパラメータのタイプや値に関する誤入力が直接、入力の際にチェックされえるという更なる利点を有する。特定の、自由に定義可能なパラメータタイプが予定されていることは、例えば一つのパラメータがある数であるとき、追加のパラメータタイプとして割り当て可能であり、これに付嘱する度量衡単位(「m」や「km」等)が重要である場合などにおいて有用である。誤ったパラメータ入力によるエラーは、通常の場合、ランタイムなどの後の時点で発生するが、これにより早期に認識され、捉えることができる。文字列プログラムコードコンポネントの特定のメソッドを使ったパラメータの入力、収集およびチェックは特に有益である。そのメソッドは当該文字列プログラムコードコンポネントのプログラムコードに特定して適合化することが可能である。システムをこの観点で適合化する必要はない。プログラマーであれば誰でも、相応の文字列プログラムコードコンポネントに適合化したパラメータ入力のメソッドを付け加え、当該文字列プログラムコードコンポネントのプログラムコードの要求条件に対し特定して適合化することができる。
追加の自由に定義可能なパラメータタイプを予定することには更なるメリットがある。すなわち、それぞれ異なるパラメータタイプが割り当てられている種々のパラメータを任意の順序で入力することが可能になることである。正しい割り当ては、該パラメータタイプをよりどころとするだけで、パラメータ入力のメソッド側、またはシステム側でなされることができる。
パラメータタイプのチェックには、後に詳細に説明するパターン・マッチング法を使用することができる。これは一般に入力文字列と文字列プログラムコードコンポネントの定義文字列とを比較する際に使用されるものである。
好ましい一実施形態によれば、複数の文字列プログラムコードコンポネントのうちの少なくとも一つの文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されるファンクショナリティは戻り値を供給することができる。戻り値はシンプルな論理値または数値、文字列等であっても良く、しかしまた複雑な諸構造や諸ファンクショナリティでさえありえる。
そのような戻り値は自然言語によるマーキングによってマークまたはアノテーションされることができ、システム側でそのために固有に予定されたメモリー領域に保存されることができる。この領域に保存された値は、ある意味で一種のヒストリーないし記憶に当たるものである。マーキングに基づいて、文字列プログラムコードコンポネント側から簡単な方法で、自然言語で、保存された戻り値を一義的な方法で呼び出すことができる。したがってコンテキストを作成、保存し、簡単で一義的な方法で使用することが可能である。
一つの戻り値には、パラメータ同様、例えば割り当てられた度量衡単位に関し、同戻り値を特徴付ける自由に定義可能な戻り値タイプを割り当てることができる。
後に制御構造の関係で詳しく説明するように、二つ目の文字列プログラムコードコンポネントは一つ目の文字列プログラムコードコンポネントの戻り値を使うことができ、特に二つ目の文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定するためのパラメータとして、使用することができる。この仕方は特に、以前の文字列プログラムコードコンポネントの戻り値を使うことができる条件付き分岐命令との関連において、使用されることが好ましい。
第一の好ましい一実施形態によれば、前記システムはその際、通常においては自然言語の表現を含む入力文字列を受け取った際に、該入力文字列が所定の類似尺度に従って文字列プログラムコードコンポネントの定義文字列に対し所定の類似性を示している場合に、プログラムコードセグメントによって実装されたファンクショナリティを実行するように設けられている。簡単に言えば、文字列プログラムコードコンポネントのファンクショナリティは、システムが、主要な部分において文字列プログラムコードコンポネントの定義文字列に相当する自然言語的入力を受け取ることによって呼び出される。
入力文字列を文字列プログラムコードコンポネントの定義文字列と比較するための類似尺度としては、従来技術として既知の諸類似尺度を使用することができる。同様のことが入力文字列を定義文字列と比較するための方法にも言える。これについては従来技術において従来のパターン・マッチング法など多くの方式が知られている。例えば使用する類似尺度に依存して0~1の数値によって表されることができる所定の類似性は、どのような方法で入力文字列がシステムによって取得されたかに依存して、様々でありえる。その際、言語入力および文字列への変換による入力か、またはキーボード等による文字列の直接入力か、は区別されなければならない。固有の類似尺度や比較方法は本発明の対象ではない。最も簡単なケースにおいては、入力文字列が、定義文字列の自然言語による表現の所定の割合を正確に、または近似的に包含するか否かを分析することができる。近似的にとは、文法的逸脱(単数形/複数形、格、語形変化等)を許容し、カンマ等の句読点を無視することを意味することが可能である。
一実施形態によれば、文字列プログラムコードコンポネントのプログラムコードセグメントはシステムと連結した装置の制御をするためのファンクショナリティを実装する。好ましい利用ケースは家庭用機器の制御である。また他の好ましい利用ケースはロボットの制御その他である。また例えば一般にアクセス可能な公共のオンライン図書館における情報検索が、前述の方法を使用することによって簡略化されることも想定しえる。
更に別の一実施形態によれば、パラメータ入力のメソッドが文字列プログラムコードコンポネントとユーザーとの間のダイアログを実装する。代替的にダイアログを文字列プログラムコードコンポネントのプログラムコードセグメントによって実装することもできる。すなわち、パラメータ入力のためのメソッドまたはプログラムコードセグメントによって実装されるファンクショナリティが、ユーザーが質問または入力要請として理解する自然言語のアウトプットを作成する。ユーザーはその質問に対し相応の入力で答え、その答えをメソッドまたはファンクショナリティ側で更なる入力文字列として受け取り、処理することができる。この質問・回答の流れは複数回、繰り返されることができる。その際、文字列プログラムコードコンポネントは後述する方法で、ユーザーの以前の入力をダイアログ制御に活用することができる。この実施形態はエキスパートシステムの提供などに適している。
第一の一変形形態によれば、パラメータ入力のダイアログをプログラムコードセグメントによって実装されたファンクショナリティの特定に使うことができる。そのようなパラメータ入力は、記入されたパラメータが期待されるパラメータタイプ、パラメータ値その他に関してファンクショナリティの側またはパラメータ入力のためのメソッド側でチェックされるという形で形成されることができる。それによって誤入力を認識し回避することができる。
二つ目の変形形態によれば、当該ダイアログはユーザーとシステムの間の自由な会話をサポートすることができる。自由な会話とは本発明の関係においては、ファンクショナリティ側からユーザーに向けられた質問または入力要請とそれに応じたユーザー側から出された答えの交換を指し、その際、答えはフォーマットに関しても、セマンティクスに関しても制限されない。ユーザーの答えは入力文字列をシステムに入力することで成され、システムはその入力文字列を文字列プログラムコードコンポネントのファンクショナリティに引き渡す。この入力文字列も通常、自然言語の表現を包含する。
更に別の一実施形態によれば、文字列プログラムコードコンポネントのプログラムコードセグメントは入力文字列をシステムに伝達するためのファンクショナリティを実装する。別の言葉で言えば、文字列プログラムコードコンポネントのファンクショナリティ側でも、システム内に既に用意されている更なる文字列プログラムコードコンポネントの呼び出しにつながるシステムへの入力を作成する。
ここにおいて、本発明による文字列プログラムコードコンポネントの使用の更なる重要な利点が見いだされる。これら文字列プログラムコードコンポネントのそれぞれが、カプセル化された形で、相応の文字列プログラムコードコンポネントの定義文字列によって自然言語で認識および呼び出しが可能な特定のファンクショナリティを用意することができる。従来の言語制御機能を可能にするシステムは、通常、閉鎖型システムとして設計されており、そのためその複雑性および拡張性において大きな制約を受けている。それに対し、本発明によれば、一つのシステムを簡単に文字列プログラムコードコンポネントをシステムに付け加えることによって拡張することができる。それによって、知識レプレゼンテーションやロボット制御などの複雑な技術内容を、関心を持つ第三者が解決すべき問題の個々の側面について、システムに付け加えることができる特定の文字列プログラムコードコンポネントを提供することによって、分散的方法で改善することができる。これらの文字列プログラムコードコンポネントは上記に示唆したように、既存の文字列プログラムコードコンポネントのファンクショナリティを使用することができ、また自らも更なる文字列プログラムコードコンポネントを呼び出すための自己のファンクショナリティを提供する。それによって相応のシステムはオープンとなり、かつ簡単な方法で任意の方向へ拡張可能となる。
その主な理由は文字列プログラムコードコンポネントのコンセプトにある。従来の言語制御システムは通常、例えばインターネット検索の開始、メッセージの送信、予定をカレンダーに登録するといった既存の標準ファンクショナリティの呼び出しを許しているに過ぎない。それに対し本発明の枠内においては、プログラムコードセグメントを使って、また自然言語における定義文字列に適合化して、任意のファンクショナリティを用意しシステムに組み込むことが可能である。つまり従来技術による言語制御が各々のシステムのエルゴノミーを向上するに過ぎなかったのに対し、本発明では、プログラムコードセグメントによって、各々において特定的に、定義文字列に包含されている自然言語による表現のセマンティクスをプログラム技術的に実施するファンクショナリティを提供する。したがって文字列プログラムコードコンポネントの本発明で提案するデータ構造は、自然言語的表現のカプセル化された機能的統一体および同表現に一義的かつ不可分に割り当てられたプログラムコードセグメントによって、いわば自然言語的諸表現のセマンティクスの機能的実施を許すものである。
一つの文字列プログラムコードコンポネントのプログラムコードセグメントが同時に、前記に説明した様々な諸ファンクショナリティを実装できることは自明である。特に一つのプログラムコードセグメントはダイアログのファンクショナリティも、入力文字列のシステムへの伝達のファンクショナリティも実装できる。このことは、ダイアログの途中で、受け取ったユーザーの入力を基に、更に先につながるファンクショナリティを有する別の文字列プログラムコードコンポネントの呼び出しが有意義である場合に、常に有用である。
ある意味で、このシステムは間接的に種々の文字列プログラムコードコンポネントのコミュニケーションを自然言語を使って支持している。一つの第一の側面によれば、一つの文字列プログラムコードコンポネントは、前述に説明した通り、自身が自然言語による表現を含む入力文字列をシステムに伝達し、それによって間接的にその定義文字列が充分にその入力文字列と一致する更なる文字列プログラムコードコンポネントを「呼び出」すように構成されえる。自然言語を使った種々の文字列プログラムコードコンポネントのコミュニケーションをシステム側で支持する更なる側面は以下の記述で明確になる。
具体的には、自然言語を使ったシステムの制御の方法は次の更なるステップを包含することができる。
当該システムは入力文字列を受け取る。同入力文字列は通常、自然言語による表現を包含する。
更なるステップにおいて、同システムは入力文字列をシステム内に既に用意されている文字列プログラムコードコンポネントの定義文字列とを、従来のパターン・マッチング法などを用いて、所定の類似尺度に基づいて、比較する。
当該入力文字列が所定の類似尺度に基づいて定義文字列に対し所定の類似性を有する場合は、当該システムはプログラムコードセグメントによって実装されたファンクショナリティを実行する。
好ましい一実施形態によれば、少なくとも一つのシステム側で受け取られた入力文字列の一部は保存されることができる。これには、一方において、文字列プログラムコードコンポネントのファンクショナリティの実行につながった入力文字列が該当する。それに代わるものとして、または、それに追加で、ユーザーによって文字列プログラムコードコンポネントとのダイアログの一環として入力された入力文字列の少なくとも一部が保存されることも可能である。
その際、一実施形態によれば、受け取られた入力文字列の少なくとも一部は、一つの文字列プログラムコードコンポネント自体の内部に保存されることができる。その文字列プログラムコードコンポネントはそのために適したコンテキスト保存データ構造を包含することができる。当該の文字列プログラムコードコンポネントに保存された情報は、該文字列プログラムコードコンポネントのプログラムコードセグメントによって実装されたファンクショナリティの後続の実行を支持するために、該文字列プログラムコードコンポネント自身によって読み取られる。
このようにして保存された入力文字列の部分は、一つの文字列プログラムコードコンポネントのファンクショナリティの後続の実行を支持するために、読み取られることができる。このようにして、例えばユーザーと文字列プログラムコードコンポネントとのダイアログを、当該文字列プログラムコードコンポネントがダイアログの流れをダイアログ中に取得し保存したユーザーの情報に依存させることによって、制御することができる。
あるいは代替として、受け取った入力文字列の一部をシステム内に集積保存することもできる。この変形形態によれば、このようにして(通常、自然言語による表現を包含する入力文字列からなる)保存情報を後続に実施された更なる文字列プログラムコードコンポネントによって、ある種のコンテキスト知識または背景知識として、利用することができる。集中的にシステム内に保存された入力文字列の部分は、文字列プログラムコードコンポネントが適した方法で使用することができる、いわばシステムの短期記憶または長期記憶として利用することができる。ここにおいて、自然言語による種々の文字列プログラムコードコンポネントのコミュニケーションをシステムが間接的にサポートすることの二つ目の側面が明確になる。すなわち、一つの文字列プログラムコードコンポネントはそれに割り当てられたファンクショナリティの実行時点において、別の文字列プログラムコードコンポネントのファンクショナリティのより以前の実行最中にシステム内に保存された入力文字列という形の自然言語情報を活用することができる。
既に前述の通り、文字列プログラムコードコンポネントのプログラムコードセグメントによって実装されたファンクショナリティが戻り値を供給することが可能であり、それを例えばシステム内に保存し、後続で実行された諸文字列プログラムコードコンポネントがそれを活用することができる。そのような戻り値は、自然言語による一つの表現を包含することができ、あるいは自然言語による表現を使ってアノテーションされていることが可能である。数値または論理値も戻り値として使える。この戻り値が自然言語でアノテーションされている場合は、それを簡単に自然言語によって、例えば後に呼び出された文字列プログラムコードコンポネントのパラメータとして、使用することができる。
更なる一実施形態によれば、一つの文字列プログラムコードコンポネントのプログラムコードセグメントによって実装されたファンクショナリティは、受け取った保存済入力文字列からコンテキスト情報を導き出し、そのコンテキスト情報をシステム内に保存するように設けられていても良い。コンテキスト情報の導き出しは、例えば文字列プログラムコードコンポネント内に保存されているデータおよび/または導き出しルールを使うことによって可能である。それにより、そのコンテキスト情報は後に実行する別の諸文字列プログラムコードコンポネントに対して、追加的な情報ベースとして利用提供される。コンテキスト情報は自然言語による表現を包含することが望ましい。したがって、このような文字列プログラムコードコンポネントは、ある意味で入力文字列から結論を引き出すように設けられているといえる。
第一の一実施形態によれば、文字列プログラムコードコンポネントは、適したプログラミング言語を使って作成することができる。プログラミングのこの形態は通常、ベーシックファンクショナリティを用意するために選択される。条件付き命令、ループ等の簡単な制御構造がそれに数えられる。
すなわち、複数の文字列プログラムコードコンポネントのうちの少なくとも一つの文字列プログラムコードコンポネントのプログラムコードセグメントは、分岐、ループや条件付き命令のようなプログラムの進行を制御する制御構造を実装することができる。原則としてそのような制御構造も文字列プログラムコードコンポネントのプログラムコードセグメントを使って実装される。後に説明するように、制御構造が一般的または特定の方法で文字列プログラムコードコンポネントを使って実装されることができることによって、一つのシステムの制御のための方法および後記に説明する自然言語によるプログラミング方法は、原則としてより高次元なプログラム言語の全ファンクショナリティを用意することができる。
文字列プログラムコードコンポネントのプログラムコードセグメントは、例えばIFクエリ等の条件付き命令を実装することができる。条件付き命令を定義する条件は、第一の一変形形態によれば、文字列プログラムコードコンポネントのプログラムコードセグメントによって実装されたファンクショナリティによって問い合わされることができる。このようにして極めて特有の条件も簡単に実装し問い合わせることが可能である。
このことは特に、「もしa < bのときは」等の一般的な形態をもって掌握することができない、または非常な困難を伴ってしか掌握できないような条件に該当する。
例えば「もし外が明るければ...」といった条件は、屋外に設置された光度センサーに問い合わせるというファンクショナリティを実装したプログラムコードセグメントを持つ文字列プログラムコードコンポネントを使って問い合わせることができる。この条件をベースとした制御構造を用意するためには、一つのコードジェネレータがプログラミング文字列に割り当てられたプログラムのためのプログラムコードを作成の際に、単に一つのIFクエリを作成し、文字列プログラムコードコンポネントのプログラムコードセグメントを呼び出すメソッドexecuteCodesegment()をIFクエリの条件として登録するだけで良い。
第二の一変形形態によれば、少なくとも一つの文字列プログラムコードコンポネントのプログラムコードセグメントが一つの条件付き命令を実装している場合、条件付き命令を定義している条件は少なくとも一つのオペレータおよび少なくとも一つのオペランドによって定義されることができる。別の言葉で言えば、条件はこの場合、一般形式「オペランド1 オペレータ オペランド2」、つまり例えば「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」(イベントハンドリングルーチン)も文字列プログラムコードコンポネントによって表されることができる。同じことは様々な手順の並行処理についても該当する。
後述するように本発明は更に自然言語のみを使ってプログラミングする可能性を提供している。すなわち既に存在している文字列プログラムコードコンポネントを基に更なる新たな文字列プログラムコードコンポネントを作成することができる。このようにして、言うなれば自然言語による、実質的にほとんどプログラミング経験を必要とせず、したがって広範囲に及ぶ利用者に開かれた新規な自然言語によるプログラミングを可能にしている。文字列プログラムコードコンポネントの原則的コンセプトとの組み合わせで、既存のシステムの拡張がそれによって更に簡略化される。
一実施形態によれば、自然言語によるプログラミングの方法は次のステップを含む。
上記に説明したごとき文字列プログラムコードコンポネントが複数用意される。すなわち、複数の文字列プログラムコードコンポネントのうちの一つの文字列プログラムコードコンポネントは、その際、自然言語の一つの表現を含む各々一つの定義文字列を包含するとともに、該定義文字列に対し一義的に割り当てられ、自然言語の表現に割り当てられたファンクショナリティを実装するプログラムコードセグメント包含する。
更なるステップにおいて自然言語によるプログラミング文字列は、複数の文字列プログラムコードコンポネントを保存し処理するように設けられたシステムに入力される。
その際「自然言語によるプログラミング文字列」とは本発明との関係において、上記に説明した概念「自然言語による表現 」と同様、原則として自然言語の一つまたは複数の単語を包含する表現を指す。その際、単語はその基本形であってもよく、また該表現は一つの少なくとも部分において文法的に正しい文または複数のそのような文を包含することができる。「プログラミング文字列」とこの表現が呼ばれるのは、この表現が以下に説明するように、プログラミングに、すなわち計算ユニットによって実行可能なプログラムの作成に使用されるからであり、その意味で、一つの「プログラミング言語」の「プログラムコード」と見なすことができる。その際、本発明の関係における前記プログラミング言語とは自然言語である。
前記プログラミング文字列の入力中または入力後に、複数の文字列プログラムコードコンポネントの中から一つまたは複数の文字列プログラムコードコンポネントが、プログラミング文字列が少なくとも文字列プログラムコードコンポネントの定義文字列の少なくとも一つの部分文字列を -主要部分において- 包含する場合に、選択される。別の言葉で言えば、該プログラミング文字列と該文字列プログラムコードコンポネントの該定義文字列との間の一致を、 -文字列ベース- で検索し、そのような一致がある場合は、相応の文字列プログラムコードコンポネントが選択される。更に別の言葉で言えば、文字列プログラムコードコンポネントはプログラミング文字列によって、いわば「呼び出される」のである。
それぞれ自然言語が対象であるので、プログラミング文字列の一部と文字列プログラムコードコンポネントの部分文字列との一致が百パーセントとは限らないのは自明である。そのような一致が所定の類似尺度に基づいて所定の敷居値を超えなければならないというように設定しておくことが可能である。プログラミング文字列と文字列プログラムコードコンポネントの定義文字列を比較するための類似性尺度として、システムの制御に関する本発明の方法の第一の変型形態との関係で前述した通り、従来技術で既知の類似性尺度を使用することができる。同様のことはプログラミング文字列と定義文字列を比較する方法に対しても有効である。これに関しては現在技術において、従来式のパターン・マッチング法等の多くの方式が知られている。例えば使用する類似性尺度に依存し0から1の間の数値によって指定されることができる所定の敷居値は変化しえる。特定の類似尺度または比較方法は本発明の対象ではない。最も簡単なケースにおいては、プログラミング文字列を、定義文字列の自然言語における表現の所定の割合を正確または近似的に包含するかどうかという観点で分析することができる。正確とは単語同一性等である。近似的とは、例えば文法的偏差(単数/複数、格、語形変化等)を許容し、例えばコンマ等の句読点等を無視する、等の意味でありえる。類義語または概念も類似と見なすことができる。
それに続くプロセスステップにおいて、少なくとも一つの選択された文字列プログラムコードコンポネントの一つまたは複数のプログラムコードセグメントを基に、プログラミング文字列に割り当てられたプログラムを作成する。
自然言語によるプログラミング用の相応のシステムは、複数の前述の文字列プログラムコードコンポネントを包含する。また該システムは更に自然言語によるプログラミング文字列の入力用の入力装置および同入力装置と連結された制御装置を包含する。
入力装置は特に、後記に更に詳細に説明するように、一つの選択された文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティの特定のためのパラメータの入力または選択に関してプログラミング文字列を編集できるように設けられたエディタを含むことができる。
前記制御装置は文字列プログラムコードコンポネントを保存し、入力したプログラミング文字列を処理するように構成されている。更に該制御装置は、入力されたプログラミング文字列が文字列プログラムコードコンポネントの定義文字列の少なくとも一つの部分文字列を前述のような形で包含するときに、文字列プログラムコードコンポネントの少なくとも一つを選択するように設置されている。
更に、少なくとも一つの所定のプログラミング言語のために、少なくとも一つの選択された文字列プログラムコードコンポネントの一つまたは複数のプログラムコードセグメントを基に、プログラミング文字列に割り当てられたプログラムを作成するように設けられたコードジェネレータおよびコンパイラーがシステムの部分を構成する。
本発明のこの側面は、このように従来技術とは抜本的に異なっている。従来技術では大抵の場合、人工知能のプロセスに基づいて、自然言語による入力を「理解」しようと試みるもので、すなわち言語学的に分析し、それによって入力の意味を把握しようと試みるものである。そして次のステップで、その意味をプログラムコードに転換しようと試みるものである。本発明が提案するアプローチはそれに対し原則的に「理解」することを拠り所としておらず、厳格に決定論的であり、入力のセマンティクス上の誤解釈の危険を全く伴わない。入力されたプログラミング文字列は、言語学的または意味論的分析が行われるのではなく、単に保存されている文字列プログラムコードコンポネントの定義文字列との文字列比較を基に比較されるに過ぎない。これはほとんど計算時間を要しないばかりか、極めて簡単な方法で実装することが可能である。
本発明は他の利点も提供している。提案されるアプローチは高度にモジュラ化されている。文字列プログラムコードコンポネントは相互に独立している。様々な開発者が相互に独立して様々な場所と異なる時間に新たな文字列プログラムコードコンポネントを開発しシステムに付け加えることができる。詳細に後述するように、各々一つのエレメンタリーな、狭く限定された基本ファンクショナリティを実装するシンプルな文字列プログラムコードコンポネントから、簡単な方法で、自然言語によるプログラミングによって、新たなより複雑な文字列プログラムコードコンポネントを作成し、システムに追加することが可能である。
本発明の方法による文字列プログラムコードコンポネントのプログラムコードセグメントはおおよそにおいて機械言語で実現された、より高度な言語におけるエレメンタリーなメソッドに相当する。システムが包含する文字列プログラムコードコンポネントが多くなればなるほど、またそれが多様になればなるほど、本発明において提案するシステムの枠内における自然言語によるプログラミングの可能性はより大きく、可変的になる。
本発明のこの側面における主目的方向は、特別なプログラミング知識を持たない利用者が、 -自然言語を用いて、開発者側から用意された文字列プログラムコードコンポネントを基に- 自らプログラムを作成できるようにすることにある。この方法によって各種のアプリケーション分野におけるソフトウェアシステムの複雑性が、それと関連する開発時間および開発費用と合わせて、明確に減少されることができると期待される。既存のシステムにおける新しい要求条件または小規模な変更は、場合によっては既に長くケアされ複数回適合化されてきたベーシックアーキテクチャーの変更を原則として必要せず、単にここそこの文字列プログラムコードコンポネントを補足し、自然言語により簡単な方法で作成されたプログラムを用いて、それに基づく補足を作成すれば済む。更に -原則として非常に時間を要する- 作成したプログラムコードのアノテーションが実際上必要なくなる。自然言語でプログラミングされるので、プログラムは言うなれば自らを説明するものだからである。
既に冒頭で言及したように、一つの優先される実施形態によれば、選択された文字列プログラムコードコンポネントの少なくとも一つは、パラメータ入力を支持するように設けられている。それを使って選択された文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティは自然言語によるプログラミング最中にダイナミックに指定されることができる。これはパラメータ入力のための固有のメソッドを用いてするのが好ましい。
この実施形態によれば、この方法は選択された文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティの指定のための少なくとも一つのパラメータの入力の一ステップを包含する。このステップはプログラミング文字列の入力中または入力後およびプログラミング文字列に割り当てられたプログラムの作成のステップ前に行われる。既に前述したように、パラメータ入力は特定的に様々な方法でなされえる。
上記に説明する方法は、例えば携帯端末機器のいわゆるアプリのプログラミング等、従来のアプリケーションのプログラミングに使用することができる。そのためにはプログラミング文字列に割り当てられたプログラムの作成のステップにおいて、所定のプラットフォームで実行可能なプログラムコードが作成される。既に触れたようにシステムはあらゆる任意のプログラミング言語と実施環境のためのコードジェネレータおよびコンパイラを包含することができる。
他方において、自然言語によるプログラミングによって、前述したように、既存の文字列プログラムコードコンポネントを基に新しい文字列プログラムコードコンポネントを作成することができる。そのためには新たに作成する文字列プログラムコードコンポネントのための定義文字列を指定し、当該の複数の文字列プログラムコードコンポネントは自然言語による適したプログラミング文字列の入力によって前述した方法で選択する。新たに作成すべき文字列プログラムコードコンポネント用の新しいプログラムコードセグメントは、プログラミング文字列に割り当てられたプログラムの作成ステップにおいて自動的に生成されるプログラムコードを基に作成される。
自然言語の処理のために設けられたシステムの好ましい一実施形態は、システムに統合されている複数の前記文字列プログラムコードコンポネントを包含する。当該文字列プログラムコードコンポネントはその際、前述のように、自然言語による表現を包含する定義文字列と、自然言語による表現に対し割り当てられたファンクショナリティを実装する定義文字列に対して一義的に割り当てられたプログラムコードセグメントを包含する。複数の文字列プログラムコードコンポネントのうちの少なくとも一つの文字列プログラムコードコンポネントはパラメータ入力のためのメソッドを包含する。これにより当該文字列プログラムコードコンポネントは、この文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを指定することができるパラメータ入力を支持するよう設けられている。
前記システムは一実施形態によれば、所定の類似尺度に基づいて定義文字列に対し所定の類似性を有する入力文字列を受け取った際に、プログラムコードセグメントによって実装されたファンクショナリティを実行するように設けられている。
既に前述の通り、前記システムは任意の数のそのような文字列プログラムコードコンポネントを組み込むことができる。これらは各々カプセル化された機能単位を構成し、そのため独立した開発者によって用意されることができ、そうして全体システムのファンクショナリティを拡張することができる。また同じく前述の通り、相応の入力文字列を作成し入力文字列として前記システムに渡すことで、一つの文字列プログラムコードコンポネントのファンクショナリティが更なる文字列プログラムコードコンポネントのファンクショナリティを呼び出すことが可能である。別の言葉に置き換えて言えば、一つの文字列プログラムコードコンポネントの他の文字列プログラムコードコンポネントによる呼び出しは直接行われるのではなく、システムを介して、常に間接的に行われる。したがって個々の文字列プログラムコードコンポネントの間に、文字列プログラムコードコンポネントの実装に際して考慮されなければならないような依存関係はない。文字列プログラムコードコンポネントの各々が特定の部分問題の特定の解決策を提供することができる。このように様々な文字列プログラムコードコンポネントのファンクショナリティの適した組合せによって、複雑な内容を包括的に取り扱うことができる。これまで欠けていたファンクショナリティはいつでも、既存の文字列プログラムコードコンポネントやシステム自体を変更する必要を伴うことなく、新たな文字列プログラムコードコンポネントを組み込むことによって補足することができる。
一実施形態によれば前記システムは、自然言語による表現を包含する入力文字列を受け取るように設けられた制御装置を包含する。同制御装置は更に、入力文字列を前記システム内に用意されている文字列プログラムコードコンポネントの定義文字列と所定の類似尺度に基づいて比較し、当該の文字列プログラムコードコンポネントのプログラムコードセグメントによって実装されたファンクショナリティを、入力文字列が所定の類似尺度に基づいて所定の類似性を示した場合に、実行するように設けられている。
更なる一実施形態によれば、前記システムは入力装置を包含する。同入力装置は、自然言語によるユーザー入力を受け取り、そこから自然言語による表現を包含する入力文字列を導き出し、同入力文字列を制御装置に転送するように設けられている。そのような入力装置は、例えばマイクロフォンによって収集された音声言語を相応文字列に転換する従来型の音声言語認識装置を包含することができる。更にキーボード等による入力を許すエディタが前記システムの入力装置として利用されても良い。
前記システムは一実施形態によれば、例えばセンサーを使って周辺信号を受信し、そこから自然言語による表現を包含する入力文字列を導き出し、その入力文字列を前記システムの制御装置に転送するように設けられた更なる入力装置の部類を包含することができる。更により一般的に、任意の所定のトリガー信号を受信し、同トリガー信号に依存する自然言語による表現を包含する入力文字列を導き出し、同入力文字列を同システムに転送するように設けられた入力装置を予定しても良い。前記トリガー信号は例えば(光度、温度、騒音等に関する等の)環境の変化を表示する環境信号であっても良い。代替的にそのようなトリガー信号は(例として照明装置の場合の「オン/オフ」、窓の場合の「開/閉」等の)入力装置の現在のシステム状態を表わす入力文字列を作成するよう前記入力装置を促すために、前記システムから発信されても良い。
ここにおいて本発明に係るシステムの更なる特徴が示される。人間のユーザーのみならず、技術機器もユーザーとして前記システムの制御装置と自然言語による表現に基づいてコミュニケーションする。同システムの同制御装置は人間のユーザーの入力と技術機器という形のユーザーによる入力との間で区別せず、自然言語の表現を含む受け取った入力文字列を同じ方法で処理する。例えば光度、湿度、騒音その他の類似する環境パラメータを収集し、自然言語で表現し、前記システムの制御装置に転送する入力装置が用意されることができる。それに対する反応として同システムは相応の文字列プログラムコードコンポネントを呼び出し、それにより例えば呼び出しをしている装置および/またはその他の装置のファンクショナリティを制御することができる。
前記システムは更に、ユーザーと文字列プログラムコードコンポネントの間のダイアログを支持するために自然言語によるユーザーへの出力信号を出力するように設けられた出力装置を包含することができる。同出力装置はその際、特に従来のスピーカー等を介した音声言語出力を提供することができる。またディスプレイ等を介したテキスト出力も可能である。前記システムが入出力組合せ装置も包含できることは自明である。
既に繰り返し触れたように、前記システムは文字列プログラムコードコンポネントのプログラムコードセグメントによって実装されるファンクショナリティによって制御されるように設けられた任意の技術機器を包含することができる。前述の方法は特にロボットの制御に適している。また家電機器や娯楽用電気機器の制御も前述の方法ですることができる。更に前述の方法はエキスパートシステムの実装に利用するのにも有利である。特に、文字列プログラムコードコンポネントが様々な利用者によって簡単な方法で前記システムに組み込まれることができることによって、個々の利用者によってカバーされる種々の知識分野が簡単な方法でネットワーク化され、それによって、これまでばらばらに存在していたに過ぎない種々の知識分野を簡単な方法で統合することができる。
以下にいくつかの実施例をもとに添付の図を参照しつつ本発明を例示的に説明する。当該の諸図は以下を示すものである。
本発明によるデータ構造の好ましい実施形態を示す概略図。
本発明によるシステムの第一の好ましい一実施形態の様々なコンポネントの概略図。
図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!)";
}
Figure 0007023008000001
ユーザーはそれに応じて彼が入力した「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";
}
Figure 0007023008000002
パラメータ入力のためのメソッド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を足し、足し算結果の平方根を求めよ」などの形で自然言語によるプログラミング文字列によって指定しても良いし、あるいは ―数学で一般的であるように― 例えば次のような数学表記を使っても良い。
Figure 0007023008000003
Figure 0007023008000004
全ての数学記号を式表によって表示することもできるがそれに並び、前に得られた結果を定式における変数として、更なる計算に使用することも可能である。
個々の文字列プログラムコードコンポネントのプログラムコードセグメントを作成するプログラミング言語が、プログラムコードのコードジェネレータが自然言語によって前述の方法でプログラミングしたプログラムのためにプログラムコードを作成する際のプログラミング言語とは異なることが可能であることは自明である。両プログラミング言語が異なるときは、コードジェネレータは目的のプログラミング言語のプログラムコード内に、例えばプロキシを介して、外のプログラミング言語によるプログラムコードセグメントを呼び出すことを可能にするメカニズムを追加することができる。
既に触れたように、前記システムはユーザーが選択して使用することができる様々な目的プログラミング言語(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」(~そうしたら)の後に入力されたプログラミング文字列に基づいて選択される文字列プログラムコードコンポネントからきている。
更なる一側面によれば、文字列プログラムコードコンポネントの部分集合は技術的に一つのモジュールに集約することができる。モジュールのシステム内の登録の際、このモジュールに含まれるすべての文字列プログラムコードコンポネントはメタデータテーブルの中で一つのグループに纏められる。
Figure 0007023008000005
一つのグループ内の全ての文字列プログラムコードコンポネントは他の文字列プログラムコードコンポネントのインターフェースを知っている。一つのグループの文字列プログラムコードコンポネント間では暗黙的関係をとることができる。文字列プログラムコードコンポネント「入力フィールドを追加せよ」は暗黙的に文字列プログラムコードコンポネント「アプリケーションを作成せよ」に関連付けられる。したがって作成された入力フィールドは作成されたアプリケーションに割り当てられ、入力すべきパラメータがこれをまず明示的に指定する必要はない。また制御装置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」)。

Claims (12)

  1. システム(100)における、自然言語によるプログラミングのための方法であって、
    前記システムは、制御装置と、入力装置と、コードジェネレータ(282)およびコンパイラ(284)のうちの少なくとも1つとを備え、
    前記方法は、
    - 該システム(100)内に、複数の文字列プログラムコードコンポネント(10、10'、10'')を用意し保存するステップ(S1)であって、各前記文字列プログラムコードコンポネント(10)は、自然言語における表現(13)を包含する定義文字列(12)と、自然言語による該表現(13)に割り当てられたファンクショナリティを実装する該定義文字列(12)に一義的に割り当てられたプログラムコードセグメント(14)とを備える、ステップと、
    - 自然言語によるプログラミング文字列を前記入力装置により受け取る受け取りステップ(S602)と、
    - 前記プログラミング文字列が前記複数の文字列プログラムコードコンポネントのうちの少なくとも1つの文字列プログラムコードコンポネント(210)の前記定義文字列の少なくとも1つの部分文字列を包含する場合に、前記少なくとも1つの文字列プログラムコードコンポネントを前記制御装置により選択する選択ステップ(S603)と、
    - 選択された前記文字列プログラムコードコンポネントの前記プログラムコードセグメントを基に前記プログラミング文字列に割り当てられたプログラムを前記コードジェネレータまたは前記コンパイラにより作成する作成ステップ(S604)か、又は選択された前記文字列プログラムコードコンポネントの前記プログラムコードセグメントによって実装された前記ファンクショナリティを前記制御装置により実行する実行ステップと、を備え、
    前記複数の文字列プログラムコードコンポネントのうちの少なくとも1つの文字列プログラムコードコンポネントは、パラメータ入力のためのメソッド(16)を包含し、
    この文字列プログラムコードコンポネントが、この文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定することを可能にするパラメータ入力を支持するように設けられていることを特徴とする、方法。
  2. システム(100)における、自然言語によるプログラミングのための方法であって、
    前記システムは、制御装置と、入力装置と、コードジェネレータ(282)およびコンパイラ(284)のうちの少なくとも1つとを備え、
    前記方法は、
    - 該システム(100)内に、複数の文字列プログラムコードコンポネント(10、10'、10'')を用意し保存するステップ(S1)であって、各前記文字列プログラムコードコンポネント(10)は、自然言語における表現(13)を包含する定義文字列(12)と、自然言語による該表現(13)に割り当てられたファンクショナリティを実装する該定義文字列(12)に一義的に割り当てられたプログラムコードセグメント(14)とを備える、ステップと、
    - 自然言語によるプログラミング文字列を前記入力装置により受け取る受け取りステップ(S602)と、
    - 前記プログラミング文字列が前記複数の文字列プログラムコードコンポネントのうちの少なくとも1つの文字列プログラムコードコンポネント(210)の前記定義文字列の少なくとも1つの部分文字列を包含する場合に、前記少なくとも1つの文字列プログラムコードコンポネントを前記制御装置により選択する選択ステップ(S603)と、
    - 選択された前記文字列プログラムコードコンポネントの前記プログラムコードセグメントを基に前記プログラミング文字列に割り当てられたプログラムを前記コードジェネレータまたは前記コンパイラにより作成する作成ステップ(S604)か、又は選択された前記文字列プログラムコードコンポネントの前記プログラムコードセグメントによって実装された前記ファンクショナリティを前記制御装置により実行する実行ステップと、を備え、
    複数の該文字列プログラムコードコンポネントのうちの少なくとも一つの文字列プログラムコードコンポネントの該プログラムコードセグメントによって用意されたファンクショナリティが、このファンクショナリティが該システムによって実行されたときに、戻り値を供給し、その際にこの戻り値が好ましくは自然言語によってアノテーションされており、また複数の該文字列プログラムコードコンポネントのうちの少なくとも一つの更なる文字列プログラムコードコンポネントが、その更なる文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを該システムが実行したとき、戻り値を使用し、その際にその戻り値の使用が該戻り値の自然言語アノテーションを基になされることができる、方法。
  3. 前記選択ステップにおいて、前記プログラミング文字列が前記複数の文字列プログラムコードコンポネントのうちの2以上の文字列プログラムコードコンポネント各々の前記定義文字列の少なくとも1つの部分文字列を包含する場合に、前記2以上の文字列プログラムコードコンポネントを選択し、
    前記方法が前記作成ステップを備える場合において、選択された前記2以上の文字列プログラムコードコンポネントの前記プログラムコードセグメントを基に前記プログラミング文字列に割り当てられたプログラムが作成され、
    前記方法が前記実行ステップを備える場合において、選択された前記2以上の文字列プログラムコードコンポネントの前記プログラムコードセグメントによって実装された前記ファンクショナリティが実行される、請求項1又は請求項2に記載する方法。
  4. 該プログラムコードセグメント(14)またはパラメータ入力のための該メソッドが該文字列プログラムコードコンポネント(10)とユーザー(42)の間のダイアログを実装し、該ダイアログが該ユーザーと該文字列プログラムコードコンポネント(10)の間の会話を支持する請求項に記載する方法。
  5. 次の更なるステップを包含する請求項1から請求項の何れか一つに記載する方法。
    - 受け取ったプログラミング文字列を保存し、
    - 文字列プログラムコードコンポネント(10;10')のプログラムコードセグメント(14)によって実装されたファンクショナリティの後続の実行を支持するための保存された該プログラミング文字列を読み取り、
    - 該プログラムコードセグメントによって実装されたファンクショナリティによって該プログラミング文字列からコンテキスト情報を導き出し、かつ
    - 該システムへ該コンテキスト情報を保存する。
  6. 前記複数の文字列プログラムコードコンポネントのうちの少なくとも一つの文字列プログラムコードコンポネントが、該文字列プログラムコードコンポネントの定義文字列の一部分が特定すべきパラメータとして標示されるようにパラメータ入力を支持するよう設けられている請求項に記載する方法。
  7. 一つの文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定することができるパラメータに定義可能なパラメータタイプが割り当てられている請求項に記載する方法。
  8. 前記複数の文字列プログラムコードコンポネントのうちの少なくとも一つの文字列プログラムコードコンポネントのプログラムコードセグメントがプログラムの流れを制御する制御構造を実装している請求項1又は請求項2に記載する方法。
  9. 一つの新たな文字列プログラムコードコンポネントを複数の文字列プログラムコードコンポネントの中の複数の文字列プログラムコードコンポネントを基に作成するステップを包含し、その際、
    - その新たに作成する文字列プログラムコードコンポネントのための新たな定義文字列が指定され、
    - 前記の複数の文字列プログラムコードコンポネントが自然言語によるプログラミング文字列の入力によって選択され、
    - その際に前記の新たに作成する文字列プログラムコードコンポネントのための一つの新たなプログラムコードセグメントが、該プログラミング文字列に割り当てられたプログラムの作成ステップにおいて作成されたプログラムコードを基に作成される
    請求項1又は請求項2に記載する方法。
  10. 自然言語の処理のために設けられたシステム(100)であって、
    制御装置と、入力装置と、コードジェネレータ(282)およびコンパイラ(284)のうちの少なくとも1つと、複数の文字列プログラムコードコンポネント(10;10';10'')とを包含し、
    前記複数の文字列プログラムコードコンポネントに含まれる各文字列プログラムコードコンポネント(10)は、自然言語による表現(13)を包含する定義文字列(12)と、自然言語による該表現(13)に割り当てられたファンクショナリティを実装する前記定義文字列(12)に一義的に割り当てられたプログラムコードセグメント(14)とを備え、
    前記入力装置(240)は、自然言語によるプログラミング文字列を入力するために構成され、
    前記制御装置(260)は、前記文字列プログラムコードコンポネントを保存し、入力された前記プログラミング文字列を処理するように構成され、
    前記制御装置は、入力された前記プログラミング文字列が前記複数の文字列プログラムコードコンポネントのうちの少なくとも1つの文字列プログラムコードコンポネントの前記定義文字列の少なくとも1つの部分文字列を包含する場合に、前記少なくとも1つの文字列プログラムコードコンポネントを選択するように構成され、
    前記コードジェネレータ(282)またはコンパイラ(284)が、選択された前記少なくとも1つの文字列プログラムコードコンポネントの前記プログラムコードセグメントを基に前記プログラミング文字列に割り当てられたプログラムを作成するように構成されるか、又は、前記制御装置が、選択された前記少なくとも1つの前記文字列プログラムコードコンポネントの前記プログラムコードセグメントによって実装された前記ファンクショナリティを実行するように構成され、
    前記複数の文字列プログラムコードコンポネント(10;10';10'')のうちの少なくとも1つの文字列プログラムコードコンポネント(10)は、パラメータ入力のためのプロセス(16)を包含し、
    この文字列プログラムコードコンポネントが、この文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティを特定することを可能にするパラメータ入力を支持するように設けられていることを特徴とする、システム。
  11. 自然言語の処理のために設けられたシステム(100)であって、
    制御装置と、入力装置と、コードジェネレータ(282)およびコンパイラ(284)のうちの少なくとも1つと、複数の文字列プログラムコードコンポネント(10;10';10'')とを包含し、
    前記複数の文字列プログラムコードコンポネントに含まれる各文字列プログラムコードコンポネント(10)は、自然言語による表現(13)を包含する定義文字列(12)と、自然言語による該表現(13)に割り当てられたファンクショナリティを実装する前記定義文字列(12)に一義的に割り当てられたプログラムコードセグメント(14)とを備え、
    前記入力装置(240)は、自然言語によるプログラミング文字列を入力するために構成され、
    前記制御装置(260)は、前記文字列プログラムコードコンポネントを保存し、入力された前記プログラミング文字列を処理するように構成され、
    前記制御装置は、入力された前記プログラミング文字列が前記複数の文字列プログラムコードコンポネントのうちの少なくとも1つの文字列プログラムコードコンポネントの前記定義文字列の少なくとも1つの部分文字列を包含する場合に、前記少なくとも1つの文字列プログラムコードコンポネントを選択するように構成され、
    前記コードジェネレータ(282)またはコンパイラ(284)が、選択された前記少なくとも1つの文字列プログラムコードコンポネントの前記プログラムコードセグメントを基に前記プログラミング文字列に割り当てられたプログラムを作成するように構成されるか、又は、前記制御装置が、選択された前記少なくとも1つの前記文字列プログラムコードコンポネントの前記プログラムコードセグメントによって実装された前記ファンクショナリティを実行するように構成され、
    複数の文字列プログラムコードコンポネントのうちの少なくとも一つの文字列プログラムコードコンポネントのプログラムコードセグメント(14)によって用意されたファンクショナリティが、該ファンクショナリティが該システム(100)によって実行されるとき、戻り値を供給するように設けられており、その際にその戻り値が好ましくは自然言語によってアノテーションされており、また該複数の文字列プログラムコードコンポネントの少なくとも一つの更なる文字列プログラムコードコンポネントが、この更なる文字列プログラムコードコンポネントのプログラムコードセグメントによって用意されたファンクショナリティが該システムによって実行されるとき、該戻り値を使用し、その際、その戻り値の使用が該戻り値の自然言語アノテーションを基になされるように設けられる、システム。
  12. トリガー信号を受信し、該トリガー信号に対する反応として該トリガー信号に依存する自然言語による表現を包含する入力文字列を導き出し、該制御装置(20)に転送するように設けられた入力装置(40)を包含する請求項10又は請求項11に記載するシステム(100)。
JP2019507996A 2016-04-28 2017-04-06 言語によって制御されるシステム Active JP7023008B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
DE102016107892.1 2016-04-28
DE102016107892 2016-04-28
DE102016115243.9A DE102016115243A1 (de) 2016-04-28 2016-08-17 Programmieren in natürlicher Sprache
DE102016115243.9 2016-08-17
PCT/EP2017/058239 WO2017186469A1 (de) 2016-04-28 2017-04-06 Sprachgesteuertes system

Publications (2)

Publication Number Publication Date
JP2019519870A JP2019519870A (ja) 2019-07-11
JP7023008B2 true JP7023008B2 (ja) 2022-02-21

Family

ID=60081578

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019507996A Active JP7023008B2 (ja) 2016-04-28 2017-04-06 言語によって制御されるシステム

Country Status (11)

Country Link
US (1) US10915709B2 (ja)
EP (1) EP3365891B1 (ja)
JP (1) JP7023008B2 (ja)
KR (1) KR102421274B1 (ja)
CN (1) CN109155129B (ja)
AU (1) AU2017258454B9 (ja)
CA (1) CA3022884A1 (ja)
DE (1) DE102016115243A1 (ja)
ES (1) ES2887998T3 (ja)
RU (1) RU2741622C2 (ja)
WO (1) WO2017186469A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109921880B (zh) * 2019-01-25 2020-10-23 北京航空航天大学 基于询问的目标定位方法、装置与电子设备
CN112162738B (zh) * 2020-10-26 2022-11-29 广东粤港澳大湾区硬科技创新研究院 数据转化方法、装置、终端设备及存储介质
WO2023209857A1 (ja) * 2022-04-27 2023-11-02 ファナック株式会社 機械動作指令プログラム検索装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000322245A (ja) 1999-05-13 2000-11-24 Murata Mach Ltd プログラミング装置および記憶媒体
JP2008020242A (ja) 2006-07-11 2008-01-31 Shimadzu Corp オートサンプラ制御プログラム作成支援システム及び作成支援プログラム
JP2008145769A (ja) 2006-12-11 2008-06-26 Hitachi Ltd 対話シナリオ生成システム,その方法およびプログラム

Family Cites Families (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01121934A (ja) * 1987-11-06 1989-05-15 Hitachi Ltd 日本語メッセージの処理方式
JPH034331A (ja) * 1989-06-01 1991-01-10 Fujitsu Ltd 宣言的に定義された数論的関数処理方式
JPH07311677A (ja) * 1994-05-18 1995-11-28 Nec Corp 操作処理装置
US5774860A (en) * 1994-06-27 1998-06-30 U S West Technologies, Inc. Adaptive knowledge base of complex information through interactive voice dialogue
US20050005266A1 (en) * 1997-05-01 2005-01-06 Datig William E. Method of and apparatus for realizing synthetic knowledge processes in devices for useful applications
JP2002523828A (ja) * 1998-08-24 2002-07-30 ビーシーエル コンピューターズ, インコーポレイテッド 適応型自然言語インターフェース
US6173441B1 (en) * 1998-10-16 2001-01-09 Peter A. Klein Method and system for compiling source code containing natural language instructions
US6374226B1 (en) * 1999-08-06 2002-04-16 Sun Microsystems, Inc. System and method for interfacing speech recognition grammars to individual components of a computer program
US7305345B2 (en) * 2001-02-15 2007-12-04 Livewire Acquisition, Inc. Methods, systems, and computer program products for providing automated customer service via an intelligent virtual agent that is trained using customer-agent conversations
DE10251112A1 (de) * 2002-11-02 2004-05-19 Philips Intellectual Property & Standards Gmbh Verfahren und System zur Spracherkennung
US6980949B2 (en) * 2003-03-14 2005-12-27 Sonum Technologies, Inc. Natural language processor
EP1680780A1 (en) * 2003-08-12 2006-07-19 Philips Intellectual Property & Standards GmbH Speech input interface for dialog systems
KR100725719B1 (ko) * 2005-02-04 2007-06-08 주식회사 유진로봇 음성과 태스크 오브젝트 기반의 대화시스템
US7930168B2 (en) 2005-10-04 2011-04-19 Robert Bosch Gmbh Natural language processing of disfluent sentences
US7966182B2 (en) * 2006-06-20 2011-06-21 Lunis Orcutt Voiced programming system and method
US8589874B2 (en) 2007-06-11 2013-11-19 Microsoft Corporation Visual interface to represent scripted behaviors
US10095985B2 (en) * 2008-07-24 2018-10-09 Hamid Hatami-Hanza Assisted knowledge discovery and publication system and method
CN101196883A (zh) * 2008-01-07 2008-06-11 刘莎 一种互联网信息自然语言翻译通用方法和系统
US8229736B2 (en) * 2008-04-16 2012-07-24 International Business Machines Corporation Transforming a natural language request for modifying a set of subscriptions for a publish/subscribe topic string
US8218397B2 (en) * 2008-10-24 2012-07-10 Qualcomm Incorporated Audio source proximity estimation using sensor array for noise reduction
JP5363589B2 (ja) * 2008-12-19 2013-12-11 インターナショナル・ビジネス・マシーンズ・コーポレーション データ・メタモデルから音声ユーザ・インタフェース・コードを生成するための方法およびシステム
FR2947923B1 (fr) * 2009-07-10 2016-02-05 Aldebaran Robotics Systeme et procede pour generer des comportements contextuels d'un robot mobile
CN102687529B (zh) * 2009-11-30 2016-10-26 诺基亚技术有限公司 用于处理音频信号的方法和装置
FR2963132A1 (fr) * 2010-07-23 2012-01-27 Aldebaran Robotics Robot humanoide dote d'une interface de dialogue naturel, methode d'utilisation et de programmation de ladite interface
US9930225B2 (en) * 2011-02-10 2018-03-27 Villmer Llc Omni-directional camera and related viewing software
US9201859B2 (en) * 2011-12-15 2015-12-01 Microsoft Technology Licensing, Llc Suggesting intent frame(s) for user request(s)
WO2013104504A1 (en) * 2012-01-12 2013-07-18 Thomson Licensing Method and device for compiling a source program
FR2989209B1 (fr) * 2012-04-04 2015-01-23 Aldebaran Robotics Robot apte a integrer des dialogues naturels avec un utilisateur dans ses comportements, procedes de programmation et d'utilisation dudit robot
US9110659B2 (en) 2012-11-20 2015-08-18 International Business Machines Corporation Policy to source code conversion
RU2530267C2 (ru) * 2012-11-28 2014-10-10 Общество с ограниченной ответственностью "Спиктуит" Способ коммуникации пользователя с информационной диалоговой системой
KR20240132105A (ko) * 2013-02-07 2024-09-02 애플 인크. 디지털 어시스턴트를 위한 음성 트리거
CN104239002B (zh) * 2013-06-07 2019-06-14 上海能感物联网有限公司 一种用汉语自然语语音控制智能电磁炉的方法
US9324025B2 (en) * 2013-06-27 2016-04-26 International Business Machines Corporation Automating natural-language interactions between an expert system and a user
CN103885783A (zh) * 2014-04-03 2014-06-25 深圳市三脚蛙科技有限公司 一种应用程序的语音控制方法及装置
US9430461B2 (en) * 2014-04-11 2016-08-30 International Business Machines Corporation Mobile based lexicon and forecasting
CN103957635A (zh) * 2014-04-28 2014-07-30 梁涛 开关装置及其控制实现方法
CN107209780A (zh) * 2015-01-16 2017-09-26 普华永道会计事务所 医疗数据交换系统和方法
WO2016161119A1 (en) * 2015-04-01 2016-10-06 Smartcare Consultants, Llc System for determining behavioral patterns and deviations from determined behavioral patterns
US10860549B2 (en) * 2015-08-05 2020-12-08 Equifax Inc. Building and managing data-processing attributes for modeled data sources
US20180039829A1 (en) * 2016-08-04 2018-02-08 Roger D. Summers Continuous, self-executing verification worksheet system
US10832684B2 (en) * 2016-08-31 2020-11-10 Microsoft Technology Licensing, Llc Personalization of experiences with digital assistants in communal settings through voice and query processing
US10469884B2 (en) * 2016-12-12 2019-11-05 The Directv Group, Inc. Devices for presenting video program segments in accordance with definition documents
US10372597B2 (en) * 2017-05-03 2019-08-06 International Business Machines Corporation Software testing and verification
US20190066000A1 (en) * 2017-08-31 2019-02-28 Selfie Stub LLC Systems and methods for creating a personalized digital or physical item
US10621978B2 (en) * 2017-11-22 2020-04-14 International Business Machines Corporation Dynamically generated dialog

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000322245A (ja) 1999-05-13 2000-11-24 Murata Mach Ltd プログラミング装置および記憶媒体
JP2008020242A (ja) 2006-07-11 2008-01-31 Shimadzu Corp オートサンプラ制御プログラム作成支援システム及び作成支援プログラム
JP2008145769A (ja) 2006-12-11 2008-06-26 Hitachi Ltd 対話シナリオ生成システム,その方法およびプログラム

Also Published As

Publication number Publication date
ES2887998T3 (es) 2021-12-29
RU2018137557A3 (ja) 2020-05-28
CN109155129B (zh) 2023-05-12
KR20190042490A (ko) 2019-04-24
RU2018137557A (ru) 2020-05-28
RU2741622C2 (ru) 2021-01-29
AU2017258454A1 (en) 2018-12-06
AU2017258454B9 (en) 2022-06-16
AU2017258454B2 (en) 2022-04-14
CN109155129A (zh) 2019-01-04
KR102421274B1 (ko) 2022-07-15
WO2017186469A1 (de) 2017-11-02
CA3022884A1 (en) 2017-11-02
EP3365891B1 (de) 2021-06-09
DE102016115243A1 (de) 2017-11-02
EP3365891A1 (de) 2018-08-29
US10915709B2 (en) 2021-02-09
US20190121854A1 (en) 2019-04-25
JP2019519870A (ja) 2019-07-11

Similar Documents

Publication Publication Date Title
Gabbrielli et al. Programming languages: principles and paradigms
US8117022B2 (en) Method and system for machine understanding, knowledge, and conversation
RU2509350C2 (ru) Способ семантической обработки естественного языка с использованием графического языка-посредника
JP7023008B2 (ja) 言語によって制御されるシステム
Basu et al. Knowledge-driven natural language understanding of english text and its applications
JP2024501045A (ja) 共通仕様書からの多くのプログラミング言語のための慣用語ソフトウェアドキュメンテーションの作成
Alexandru et al. Replicating parser behavior using neural machine translation
Steedman Evolutionary basis for human language: Comment on “toward a computational framework for cognitive biology: Unifying approaches from cognitive neuroscience and comparative cognition” by tecumseh fitch
Perzylo et al. Generating grammars for natural language understanding from knowledge about actions and objects
Zimmerer et al. Semantic Fusion for Natural Multimodal Interfaces using Concurrent Augmented Transition Networks
Dombayci et al. Improving automation standards via semantic modelling: Application to ISA88
Gradl et al. Data integration for the arts and humanities: a language theoretical concept
Paine Spreadsheet structure discovery with logic programming
Hromei et al. Embedding contextual information in seq2seq models for grounded semantic role labeling
TW201537372A (zh) 動作設計裝置及動作設計程式產品
Weigelt et al. How to Prepare an API for Programming in Natural Language.
Kunic Cognitive program compiler
Noh et al. Using UIMA to Structure An Open Platform for Textual Entailment.
CN112347793B (zh) 一种基于规则与学习的语义解析方法、装置和电子设备
Wheatman Programming without program or how to program in natural language utterances
Gordon et al. English for spoken programming
Deveci Transformer models for translating natural language sentences into formal logical expressions
Heldal et al. Chatbot Generation for Open Data Accessibility
Cremers NL from logic: connecting entailment and generation
KR20200079702A (ko) 서비스 패키지 생성 방법 및 이를 수행하는 로봇 서비스 개발 시스템

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181227

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200204

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210317

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210323

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210608

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210706

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20211005

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211125

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220118

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220201

R150 Certificate of patent or registration of utility model

Ref document number: 7023008

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150