以下、本発明を適用したプログラムコード自動生成システムについて、図面を参照しながら詳細に説明をする。
(プログラムコード自動生成システム100)
図1を参照して、本実施形態におけるプログラムコード自動生成システム100の構成の一例について説明する。図1は、本実施形態におけるプログラムコード自動生成システム100の全体の構成を示す模式図である。
プログラムコード自動生成システム100は、単なる業務補助ではなくプログラム開発の仕組みを根本的に変え、近い将来、慢性的なSE技術者不足が社会に甚大な影響を与えることを回避できるものである。
すなわち、プログラムコード自動生成システム100は、業務を実行するためのプログラムコードを自動生成することで、家庭や企業、官公庁内における各業務処理(例えば、メールの配信、作業者の進捗状況の収集、ファイル管理、ファイル転送等)の様々なデータ処理をコンピュータ上で自動的に行うことができる。プログラムコード自動生成システム100は、特にこのプログラムコードの自動生成を、音声又はテキストにより設定することができ、システム管理者等のような専門的知識を有しないユーザ(例えばプログラムコード自動生成システム100を利用して業務を管理する利用者等)においても、様々な業務処理をコンピュータに自動的に行わせるためのプログラムコードの自動生成を容易に実現することが可能となる。
プログラムコード自動生成システム100は、例えば図1に示すように、プログラムコード自動生成装置1を備え、ユーザがプログラムコード自動生成装置1を利用してもよい。プログラムコード自動生成システム100は、例えば通信網4を介してプログラムコード自動生成装置1と接続された端末2を備え、ユーザが端末2を介してプログラムコード自動生成装置1を利用してもよい。プログラムコード自動生成システム100は、例えば通信網4を介してプログラムコード自動生成装置1と接続されたサーバ3を備え、ユーザがプログラムコード自動生成装置1又は端末2を介してサーバ3との各種情報の送受信により、各手段を実現してもよい。
<プログラムコード自動生成装置1>
プログラムコード自動生成装置1として、例えばサーバ、パーソナルコンピュータ、スマートフォン、タブレット端末、ウェアラブル端末等の公知の電子機器が用いられる。なお、本実施形態におけるプログラムコード自動生成システム100において、プログラムコード自動生成装置1は、クラウドサーバの中枢となる。
プログラムコード自動生成装置1は、サーバ、パーソナルコンピュータ(PC)、スマートフォン、タブレット端末、ウェアラブル端末等で構成される。プログラムコード自動生成装置1の各機能は、CPUが、RAMを作業領域として、保存部等に記憶されたプログラムを実行することにより実現される。また、各機能の一部は、人工知能により制御されてもよい。ここで、いう人工知能は、いかなる周知の人工知能技術に基づくものであってもよい。
プログラムコード自動生成装置1は、文書又は会話文からテキストデータを取得する。プログラムコード自動生成装置1は、ユーザから会話文が音声により入力された場合、取得部は、公知の音声認識技術(例えば音声認識技術)を用いて、マイクロフォンを介して受け付けた音声からテキストデータを生成する。なお、音声認識技術は、例えば通信網4を介して、クラウド型の音声認識技術を用いてもよい。プログラムコード自動生成装置1は、文書からテキストデータを取得する場合、紙媒体や電子媒体に記載されている文書中の文字列からテキストデータを取得する。かかる場合には、紙媒体から読み取った文字列をOCR技術で文字認識してテキストデータ化してもよいし、電子媒体からなる文書に含まれる文字列をそのままテキストデータとして取得してもよい。かかる場合において、このプログラムコード自動生成装置1により取得されるテキストデータは、プログラムコード自動生成装置1内にあるデータベース内にあるデータやサーバ3内にあるメール文章、ドキュメントファイル等から取得するようにしてもよい。
なお、このテキストデータの取得は、プログラムコード自動生成装置1自身が行う場合以外に、端末2側において行うようにしてもよい。かかる場合には、端末2においてマイクロフォンを介して受け付けた音声からテキストデータを得るための音声認識機能が実装され、或いは紙媒体から文字列を文字認識するためのOCR機能が実装されている必要がある。
<端末2>
端末2として、例えばサーバ、PC、スマートフォン、タブレット端末、ウェアラブル端末等の公知の電子機器が用いられる。端末2は、例えばプログラムコード自動生成装置1と同様の構成及び機能の少なくとも一部を備えてもよい。端末2は、例えば複数備えてもよく、各端末2がそれぞれ通信網4を介してプログラムコード自動生成装置1と接続されてもよい。
<通信網4>
通信網4は、プログラムコード自動生成装置1が通信回路を介して接続されるインターネット網等である。通信網4は、いわゆる光ファイバ通信網で構成されてもよい。また、通信網4は、有線通信網のほか、無線通信網等の公知の通信網で実現されてもよい。
<サーバ3>
サーバ3には、例えば各種情報が記憶される。サーバ3には、例えば通信網4を介してプログラムコード自動生成装置1等から送られてきた各種情報が蓄積される。サーバ3には、例えばプログラムコード自動生成装置1の保存部と同様の情報が記憶され、通信網4を介してプログラムコード自動生成装置1等と各種情報の送受信が行われてもよい。即ち、プログラムコード自動生成システム100では、プログラムコード自動生成装置1又はプログラムコード自動生成装置1の保存部の代わりにサーバ3を用いてもよい。
また本発明においては、サーバ3において意味変換データベース(DB)31、プログラムコードデータベース(DB)32、プログラム文法解析データベース(DB)33、プログラム自動生成知識データベース(DB)34が構築されている。
意味変換データベース(DB)31は、図2に示すように、単語、指示動作、指示動作及びこれに係り受けする単語に対して、意味が関連付けて記憶される。
単語とは、テキストデータに含まれる名詞、名詞句、形容詞、副詞、その他動詞を除くあらゆる文の構成要素を構成する単語が含まれる。この単語は、それぞれ指示動作に対して係り受けすることで一つの意図する動作を形成することとなる。
指示動作は、テキストデータに含まれる動詞である。この動詞に単語が係り受けすることで、一つの意図する動作を形成することとなる。
例えば、図2(a)に示すように、「画面に出力する」であれば、単語が「画面」であり、これが係り受ける指示動作が「出力する」である。同じく「ファイルを登録する」であれば、単語が「ファイル」であり、これが係り受ける指示動作が「登録する」である。
このような単語と指示動作に対して、それぞれ意味が紐付けられる。ここでいう意味とは、実際に単語と指示動作を通じて特定される意味概念を示すものである。意味は、単なる日常生活において使用される会話の意図を示す意味ではなく、プログラムコードを決定する上で相応しい意味を示すものである。
図2(a)の例では、「画面に出力する」(単語:「画面」、指示動作:「出力する」)であれば、意味として「データを見せる」が紐付けられている。また、「ファイルを登録する」(単語:「ファイル」、指示動作:「登録する」)であれば、意味として「書き込む」が紐付けられている。
なお、この意味変換DB31では、単語とこれか係り受ける指示動作が一つのセットになり、単語と指示動作の組み合わせが意味に紐付けられている場合を例に挙げて説明をしているが、これに限定されるものでは無く。単語、又は指示動作の何れか一方のみが少なくとも意味に対して紐付けられていればよい。
このような指示動作、単語、意味は、何れもテキストデータの文脈の構成要素となる。即ち、指示動作、単語、意味は、テキストデータが何を示しているのか、その文脈につながるものと考えることができる。文脈は、指示動作、単語、意味の3つにより初めて形成されるものに限定されず、指示動作、単語、意味の少なくとも1つにより形成されるものであってもよい。
図2(b)の例では、「データを移す」というテキストデータにおける文脈を示している。かかる場合には、単語が「データ」、指示動作が「出力する」となるが、「データを移す」を構成する単語や指示動作からなる一つの組み合わせからは、「データを転送する」、「(データを)コピーする」、「(データを)移動する」等、様々な意味概念を想起することができる。かかる場合には、意味変換DB31には、想起可能な全ての意味を、この指示動作や単語に対して紐付けておく。
但し、この図2(b)の例において、指示動作が「移す」ではなく、「転送する」であれば、「データを転送する」という意味に絞り込むことができるし、指示動作又は単語に「バックアップ」という文言が含まれているのであれば、「コピーする」という意味に絞り込むことができる。このような文言が含まれている単語や指示動作には、それぞれ紐付ける意味を絞り込むことができる。
図2(c)の例も同様に「出力データを見せて」というテキストデータにおける文脈を示しているが、単語や指示動作からなる一つの組み合わせに対して様々な意味概念を想起することができる。かかる場合には、意味変換DB31には、想起可能な全ての意味を、この指示動作や単語に対して紐付けておく。但し、この図2(c)の例において、「通信回線」や「画面」、「プリンタ」等のように、意味概念を絞り込むことができるような単語が含まれている場合には、そのような文言が含まれている単語や指示動作には、それぞれ紐付ける意味を絞り込むことができる。
特に指示動作と単語の組み合わせではなく、指示動作のみ、或いは単語のみの場合には、意味概念を絞り込むことができない場合が多く、想起可能な意味概念は多岐に亘る場合があるが、かかる場合も同様に、その多岐に亘る意味概念を全て紐付けることとなる。
プログラムコードDB32は、図3に示すように、各文脈に対してプログラムコードが紐付けられているテンプレートが記憶される。つまり、文脈に含まれている、意図する処理動作に応じたプログラムコードが紐付けられている。単なる指示動作又は単語のみで文脈を構成する場合には、図3(a)に示すように、その指示動作又は単語に対してそれぞれプログラムコードが紐付けられている。また、文脈が指示動作、単語、又は指示動作とこれに係り受けする少なくとも単語の組み合わせに加え、更に意味までが割り当てられている場合には、その意味に対してそれぞれプログラムコードが紐付けられている。つまり、このプログラムコードDB32は、文脈が特定できれば、その文脈に含められた、意図する処理動作を実行するために必要なプログラムコードを特定することができるデータベースといえる。
このプログラムコードDB32においても、文脈が全く同じであっても、また文脈を構成する指示動作、単語、又は指示動作とこれに係り受けする少なくとも単語、意味が全く同じであっても、意図する処理動作を実行するために必要なプログラムコードを複数に亘り想起できる場合がある。かかる場合には、その一の文脈に対して複数のプログラムコードを紐付けるようにしてもよい。
同様に、一のプログラムコードに対して複数の文脈が成り立つ場合もある。かかる場合には、その一のプログラムコードに対して複数の文脈を紐付けるようにしてもよい。
このようなプログラムコードDB32は、プログラム言語毎に、文脈とプログラムコードを紐付けたテンプレートを予め構築しておく。また、プログラムコードDB32は、プログラム言語毎の全ての命令語(プログラムコード)が、文脈(指示動作や単語、意味等)に対応付けられた状態となっている。その結果、全てのプログラム言語の各プログラムコードが、文脈と対応付けられていることから、逆に文脈に対応するプログラムコードを全てのプログラム言語につき、探索することが可能となる。
プログラム文法解析DB33は、プログラムコード自動生成装置1において、プログラムコードDB32を参照しつつ生成したプログラムコードが文法的に正しいかを確認するためのデータベースである。プログラム文法解析DB33は、生成したプログラムコードのスペルや記述方法、命令語の配列、必要な記号やマークが挿入されているか否か、引数が正しく挿入されているか否か等、プログラムを正しく動作させる上で必要な情報が格納されている。このプログラム文法解析DB33は、例えば各プログラム言語の文法書の電子データが格納されていてもよい。プログラム言語の文法書には、通常、プログラムコードの記述方法が中心に説明がなされているが、プログラムコードの正しい文法が記述されていることから、これを参照することで、プログラムコード自動生成装置1において生成したプログラムコードが文法的に正しいかを確認することができる。また、プログラム文法解析DB33には、個別のプログラムコード(命令語)に対応した文法の正誤判断が可能なルール設定も記録されていてもよい。かかる場合には、例えばスペル、記載順序、パラメーターの内容等の正誤判断が可能なルールが予め記録されていてもよく、またそのルールに基づいて正誤判断をするためのアルゴリズムが記録されていてもよい。なお、プログラム文法解析DB33では、コンパイラやアセンブラにて行う通常の文法チェックに必要なルールや規則、正しい文法に関する情報が予め格納されていてもよい。
プログラム自動生成知識DB34は、プログラムコード又は当該プログラムコードにより実現すべき処理動作に対して、効率化されたプログラムの構造化パターンが関連付けられたデータベースである。このプログラム自動生成知識DB34は、実現すべき処理動作をプログラムコード化する上で高度な技術をもった熟練のIT技術者であればどのようなプログラムを生成するか、或いはどのようにプログラムコードを構造化するか、についての知識に関する情報が記録されている。プログラム自動生成知識DB34では、このような熟練のIT技術者による構造化パターンのルール(定義)が設定されている。
例えば、画面中に繰り返し複数行の表を表示をする場合には、熟練のIT技術者によれば、その繰り返し回数や位置を決めループ処理をすることで、プログラムコードを構造化し、より効率的で短いプログラムコードを起案する場合が多い。このような熟練のIT技術者の経験やテクニックのサンプルをルール(コード)化し、プログラム自動生成知識DB34において登録する事で構造化プログラムのコーディングが可能となる。このプログラム自動生成知識DB34には、基本的にテンプレート化されたいくつもの効率化されたプログラムの構造化パターンが登録されている。ここでいう効率化されたプログラムの構造化パターンは、上述した熟練のIT技術者の経験や知識が反映されている。そして、プログラムコード自動生成装置1において生成したプログラムコード又は当該プログラムコードにより実現すべき処理動作に対応した効率化されたプログラムの構造化パターンが選択可能とされている。かかる場合において、システムで多くのAPIを予め作り込んでおき、処理毎にそのAPIを呼び出すことで上述したプログラムの構造化パターンを選択するようにしてもよい。
図4は、プログラム自動生成知識DB34において、画面上に商品毎の売り上げデータ等を表示する場合における、通常のプログラムコードと、効率化されたプログラムコードが格納されている例を示している。
実現すべき処理動作P1が、各商品名について単価、実際に売り上げた数量、売上、更に売上合計を表形式で表示することである場合、一般的なプログラムコードP2に示すように、個々の商品毎に、単価、数量売上をそれぞれ集計処理し、これを表示することをそれぞれ実行命令として定義していく。その結果、プログラムの行数が増加してしまい、全体的に長く冗長となってしまう。
これに対して、効率化されたプログラムの構造化パターンP3では、売上の集計処理や表示処理を個々の商品毎に行うのではなく一括して行い、表示処理についても共通ロジックに基づいて構造化したものを使用し、表示用データについては、最後尾においてitem_listにおいてリスト化しておくものが例示されている。この構造化パターンP3に示されるプログラムを実行することで、プログラムコードP2と同様に、実現すべき処理動作P1としての商品毎の売り上げデータ等を画面上に表示することができる。但し、この構造化パターンP3は、熟練のIT技術者の知識や経験が反映されたものであることから、効率的され、しかも短い行数で、同様の実行すべき処理動作P1を実現することができる。
プログラム自動生成知識DB34では、このような実現すべき処理動作P1及びプログラムコードP2に対する、構造化パターンP3がそれぞれ記録されている。そして、実現すべき処理動作P1が多岐にわたる場合には、その多岐にわたる実現すべき処理動作P1毎にそのプログラムコードP2、更にこれに対応する構造化パターンP3が互いに紐付けられて記録されている。
図4に示す例では、プログラム自動生成知識DB34において、実現すべき処理動作P1と、これに対応するプログラムコードP2が紐付けられ、更にこの実現すべき処理動作P1とプログラムコードP2に対して、構造化パターンP3が互いに紐付けられる場合を示しているが、これに限定されるものではない。例えば実現すべき処理動作P1があれば、これに対して直接的に構造化パターンP3が紐付けられ、一般的なプログラムコードP2は省略してもよい。また、一般的なプログラムコードP2と構造化パターンP3のみが互いに紐付けられ、実現すべき処理動作P1は特段これらに紐付けられていなくてもよい。
また、プログラム自動生成知識DB34では、プログラムコードにより実現すべき処理動作P1に対して、一般的なプログラムコードP2から効率化されたプログラムP3へ変換するためのアルゴリズムが構造化パターンとして関連付けられるものであってもよい。かかる場合には、この実現すべき処理動作P1を特定することができれば、これに関連付けたアルゴリズムを読み出すことにより、効率化前の一般的なプログラムコードP2から効率化されたプログラムP3へ変換することが可能となる。このようなアルゴリズムは、一般的なプログラムコードP2から効率化されたプログラムP3へ遷移させる上での様々な法則や習性、知識やノウハウ、パターン等、熟練のIT技術者から取得してアルゴリズム化したものであってもよい。
また、プログラム自動生成知識DB34では、実現すべき処理動作P1から、効率化されたプログラムP3へ遷移させる上での様々な法則や習性、知識やノウハウ、パターン等の概念が記録されるものであってもよい。例えば、ある実現すべき処理動作P1から、効率化されたプログラムP3を作る上で、効率化されたプログラムP3自身が格納されることは必須ではなく、例えば熟練のIT技術者であればどのような手順からなるプログラムを作成するか、どのようなコンセプトでプログラムの起案するか等、概念的な情報が格納されていてもよい。
図5は、実現すべき処理動作P1が各種処理を行った場合にエラーが発生した場合には、それに対応した処理を実行する例における、効率化前の一般的なプログラムコードP2と、効率化されたプログラムP3を示したものである。一般的なプログラムコードP2では、プログラム中において、いくつもの箇所でエラー処理のコードを記述していることから、その分において全体的に長く冗長化したものとなっている。
これに対して、効率化されたプログラムP3は、共通ロジックを前段で構造化し、最後尾において出力データのみを記述しているが、これにより、効率化が図られ、全体的に短くまとめることができている。
この図5の例においても同様に実現すべき処理動作P1及びプログラムコードP2に対する、構造化パターンP3がそれぞれ記録されていてもよい。また実現すべき処理動作P1があれば、これに対して直接的に構造化パターンP3が紐付けられていてもよいし、一般的なプログラムコードP2と構造化パターンP3のみが互いに紐付けられていてもよい。また、実現すべき処理動作P1に対して、一般的なプログラムコードP2から効率化されたプログラムP3へ変換するためのアルゴリズムが構造化パターンとして関連付けられるものであってもよい。
このように全ての実現すべき処理動作P1又はプログラムコードP2毎に、それぞれ構造化パターンP3が、このプログラム自動生成知識DB34に蓄積されている。このとき、一の処理動作P1又はプログラムコードP2に対して複数種の構造化パターンP3が関連付けられていてもよい。また一の構造化パターンP3に対して複数種の処理動作P1又はプログラムコードP2が関連付けられていてもよい。
なお、このプログラム自動生成知識DB34では、定型的なプログラムコードのパターンが関連付けられている場合のみならず、非定型の何らかのパターンが関連付けされているものであってもよい。
次に本発明を適用したプログラムコード自動生成システム100により、プログラムコードを実際に自動生成する動作について詳細に説明をする。
図6に示すように処理動作を開始させた後、先ずステップS11に示すように、処理が終了したか否かを確認をする。この確認は、プログラムコード自動生成装置1や端末2を介して直接ユーザに処理を終了させるか否かを問い合わせるようにしてもよいし、プログラムコード自動生成システム100側において終了したか否かを自動判別するようにしてもよい。
次にステップS12に移行し、文書又は会話文からテキストデータを取得する。具体的には、音声データとして端末2又はプログラムコード自動生成装置1において会話文が取得された場合には、これを公知の音声認識技術(例えば音素認識技術)を用いテキストデータを生成する。また、電子データ化されたテキストデータをプログラムコード自動生成装置1において取得した場合には、これをそのまま利用することになる。電子データ化されたテキストデータは、例えばメール文や社内又は社外において活用している情報掲示板や各種サイトの書き込みをそのまま取り込むようにしてもよい。
端末2又はプログラムコード自動生成装置1は、ユーザの入力するタイミング毎にテキストデータを取得するほか、例えば一定期間に蓄積された複数のテキストデータを一度に取得してもよい。なお、端末2又はプログラムコード自動生成装置1を介して入力された非テキスト形式のデータから、テキストデータを生成する方法は、公知技術を用いることができる。このようにして取得されたテキストデータは、プログラムコード自動生成装置1において一時的に記憶される。
次にステップS13に移行し、S12において取得され、プログラムコード自動生成装置1において一時的に記憶されているテキストデータを読み出し、これを自然言語解析することにより文脈を抽出する。この自然言語解析は、主としてプログラムコード自動生成装置1が行う。この自然言語解析では、形態素解析や構文解析を始めとして周知のいかなる自然言語解析技術を利用するようにしてもよい。
このステップS13における自然言語解析の結果、例えばテキストデータ「データを移す」については、「データ」からなる単語と、「移す」からなる指示動作に分解することができる。またテキスト「出力データを見せて」は、「出力データ」という単語と、「見せて」という指示動作に分解することができる。つまりテキストデータを指示動作からなる動詞に係り受けする単語の組み合わせを通じて文脈を抽出することができる。このステップS13において指示動作とこれに係り受けする単語からなる組み合わせを文脈として抽出する場合に限定されるものではなく、指示動作のみ、又は単語のみを文脈を抽出するようにしてもよい。特に「見せて」や、「ファイルA」等のようにテキストデータが動詞のみ、又は単語のみで構成される場合には、指示動作のみ、又は単語のみを抽出することとなる。
このステップS13において自然言語解析を行った結果、ステップS14へ移行し、正しく解析できた場合にはステップS15へ移行する。これに対して、正しく自然言語解析できなかった場合には、ステップS11へ戻る。
ステップS15へ移行した場合、意味変換DB31を参照し、ステップS13において抽出した文脈からプログラムが実行すべき言葉の意味に再定義する。
実際に文脈を構成する単語や動詞には、日常使用される口語調の文言が含まれている場合があるが、これが、プログラムコードを決定するための意味とは乖離している場合がある。このため、このステップS15において、テキストデータに含まれている文脈をプログラムコードを決定する上で好適な意味に変換する。
意味変換は、意味変換DB31を参照し、例えば図2(a)に示すように、ステップS13において抽出された指示動作が「出力する」であり、単語が「ファイル」であれば、意味として「読み出す」に変換する。同様に指示動作が「照会する」であり、単語が「画面」であれば、意味として「データを見せる」に変換する。また図2(b)、(c)に示すように一の指示動作と単語に対して複数の意味が紐付けられている場合には、これら紐付けられている全ての意味を探索するようにしてもよいし、これらのうち一部の意味のみを探索するようにしてもよい。また、ステップS13において抽出されたものが指示動作のみ、又は単語のみである場合も同様に意味変換DB31を参照し、指示動作又は単語に紐付けられた意味を抽出することとなる。ステップS15では、このようにして抽出した意味を、テキストデータの文脈として定義し、ステップS16へ移行する。
なお、このステップS15における、プログラムが実行すべき言葉の意味に再定義する処理動作は必須ではなく、省略するようにしてもよい。かかる場合には、ステップS13において抽出した、単語、指示動作、指示動作及びこれに係り受けする単語を、テキストデータの文脈として定義し、ステップS16へ移行する。
ステップS16へ移行した場合には、ステップS15における意味変換を通じて、テキストデータの文脈を正しく定義できたか否かを判別する。その結果、テキストデータの文脈を正しく定義できた場合には、ステップS17へ移行する。これに対してテキストデータの文脈を正しく定義できなかった場合には、ステップS15へと戻る。なお、ステップS15自体を省略した場合、或いはステップS15においてプログラムが実行すべき言葉の意味に再定義する処理動作を行わなかった場合には、このステップS16を省略するようにしてもよい。
ステップS17に移行した場合には、ステップS15において定義されたテキストデータの文脈に基づいてプログラムコードを自動生成する。
かかる場合には、図3に示すプログラムコードDB32を参照する。プログラムコードDB32には、文脈(単語、指示動作、指示動作及びこれに係り受けする単語、意味)に対応する各プログラムコードが関連付けられて記憶されている。このため、ステップS17では、プログラムコードDB32を参照し、ステップS15において定義されたテキストデータの文脈に対応するプログラムコードを特定する。このとき、特定したプログラムコードそのものを自動生成すべきプログラムコードとしてもよいが、文脈に応じて、いくつかのプログラムコードを組み合わせ、或いはプログラムコード内にある変数や記号、引数等を適宜流用してもよい。この組み合わせや流用を行う場合においても同様に、プログラムコードDB32を参照する。
例えば、図3(a)に示すように、ステップS15において定義されたテキストデータの文脈が「送信」を含むものであれば、これに対応する命令語として「vary response=http.post 」等をプログラムコードDB32を参照して抽出し、これに基づいてプログラムコードを自動生成する。ステップS15において定義されたテキストデータの文脈が「画面」を含むものであれば、これに対応する命令語として「text xxxx 」等をプログラムコードDB32を参照して割り当て、これに基づいてプログラムコードを自動生成する。同様にステップS15において定義されたテキストデータの文脈が「ファイル」を含むものであれば、これに対応する命令語として「import xxxx file.write…」等をプログラムコードDB32を参照して割り当て、これに基づいてプログラムコードを自動生成する。
なお、図3(b)、(c)に示すように、一の指示動作や単語から複数の意味が紐付けられている場合もあることから、テキストデータにおいてこのような指示動作や単語で構成されている場合には、これに対応した複数の意味毎に関連付けられたプログラムコードを割り当てることで自動生成するようにしてもよい。かかる場合には、一のテキストデータに対して複数のプログラムコードが自動的に生成されることとなる。
例えば、テキストデータが「入力データを画面とUSBに出力して」であり、自然言語解析の結果、指示動作が「出力して」であり、単語が「入力データ」、「画面」、「USB」である場合、図3に示すプログラムコードDB32を参照し、“入力データの取り込み(Read)”、”画面装置への表示(print xxxx)”、”USBメモリーへのデータ保存(Disk_write)”等の意味に「出力」という語句の意味を解析しプログラムコードを決定し生成することとなる。
なお、本発明においては、指示動作や単語に対する意味を文脈として定義することは必須ではないことから、仮に意味が文脈として定義されていない場合には、指示動作又は単語に直接紐付けられているプログラムコードをプログラムコードDB32から読み出し、プログラムコードを自動生成するようにしてもよい。
次に、このステップS17においてはプログラム文法解析DB33を参照し、自動生成したプログラムコードの文法の正誤をチェックする。上述したようにプログラム文法解析DB33には、各プログラム言語の文法書の電子データが格納されていてもよいことから、これを参照することで、自動生成したプログラムコードの文法の正誤をチェックすることができる。実際には、この自動生成したプログラムコードと、文法書の電子データとを比較し、文法書に記載された語法に沿って記述されているのであれば、文法的に正しいものと判断し、文法書の記載から逸脱した形で記述されているのであれば、文法的に誤りであるものと判断することができる。
例えば、自動生成したプログラムコードにおいて命令語が連続しているとき、プログラム文法解析DB33に記憶されている文法書の内容において命令語の語法が記述されている箇所を参照する。その結果、文法書には、正しい例として命令語が立て続けに連続するものが記述されていない場合には、文法的に誤りであると判断することができる。また自動生成したプログラムコードにおいて「print」の後に「””」が入っていない場合、同じくプログラム文法解析DB33に記憶されている文法書の内容において命令語の語法が記述されている箇所を参照する。その結果、文法書には、正しい例として「print」の後に実際に表示すべき情報を「””」で囲む例が記述されていない場合には、文法的に誤りであると判断することができる。
なお、プログラム文法解析DB33において、個別のプログラムコード(命令語)に対応した文法の正誤判断が可能なルール設定が記録されている場合には、そのルール設定に基づいて正誤判断を行うようにしてもよい。またそのルールに基づいて正誤判断をするためのアルゴリズムが記録されている場合には、そのアルゴリズムに基づいて判断を行うようにしてもよい。
また、このステップS17では、コンパイラやアセンブラにて行う通常の文法チェックを行うようにしてもよい。かかる場合には、プログラム文法解析DB33において格納されている、コンパイラやアセンブラにて行う通常の文法チェックに必要なルールや規則、正しい文法に関する情報を参照することとなる。
このプログラム文法解析DB33において正誤をチェックした結果、プログラムコードが文法的に誤っているものと判断された場合には、このステップS17において修正を加えるようにしてもよい。この修正を行う場合においても同様にプログラム文法解析DB33を参照し、正しい文法の記載を引用し、これに基づいてプログラムコードを修正するようにしてもよい。
なお、このプログラム文法解析DB33を参照することによる文法の正誤のチェックは、生成すべきプログラムの文法を解析することにより行うようにしてもよい。ここでいう生成すべきプログラムとは、プログラムコードDB32に基づいて生成したプログラムコードも含まれるが、これに限定されるものではなく、後述するステップS19において、プログラム自動生成知識DB34を参照して書き換えられた、効率化されたプログラムも含まれる。即ち、プログラム文法解析DB33を参照することによる文法の正誤のチェックは、プログラムコードDB32に基づいて生成したプログラムコード、後述するステップS19において、プログラム自動生成知識DB34を参照して書き換えられた、効率化されたプログラムの何れもが対象になりえる。
また、このステップS17におけるプログラム文法解析DB33の活用方法としては、上述のような自動生成したプログラムコードの文法の正誤チェックは必須ではない。つまり、プログラムコードDB32に基づいてプログラムを生成する際において、少なくともこのプログラム文法解析DB33を参照していれば、文法の正誤チェックは省略するようにしてもよい。
かかる場合には、プログラムコードDB32に基づいてプログラムを生成する過程において、プログラム言語の文法書が格納されたプログラム文法解析DB33を参照する。これにより、現在作成中のプログラムにおいて、正しいブログラム文法を反映させることが可能となる。
ステップS17においては、このプログラム文法解析DB33によるプログラム文法の正誤判断は必須ではなく、省略するようにしてもよい。
このようなステップS17における各処理が終了した場合には、ステップS18へ移行する。ステップS18では、プログラムコードが正しいか否かを判断し、正しい場合には、ステップS19に、また正しくない場合には、再度ステップS17に戻る。
ステップS19に移行した場合には、プログラム自動生成知識DB34を参照し、ステップS17において文法的にチェックされたプログラムコードを、効率化されたプログラムに書き換える。
上述したように、プログラム自動生成知識DB34には、実現すべき処理動作P1及びプログラムコードP2に対する構造化パターンP3、実現すべき処理動作P1に対する構造化パターンP3、プログラムコードP2に対する構造化パターンP3、実現すべき処理動作P1に対する、一般的なプログラムコードP2から効率化されたプログラムP3へ変換するためのアルゴリズムが記憶されている。
つまり、ステップS19に到達した段階で、実現すべき処理動作P1、プログラムコードP2の何れかが特定されていれば、この図4に示すようなプログラム自動生成知識DB34を参照することで、構造化パターンP3を探索することができる状態となっている。
ステップS19に到達した時点において、ステップS17にて自動生成したプログラムコードが存在している。このため、ステップS17にて自動生成したプログラムコードがあれば、これに最も類似しているプログラムコードP2に関連付けられた構造化パターンP3をこのプログラム自動生成知識DB34から読み出すことができる。構造化パターンP3自体が、効率化されたプログラムコードで構成されているのであれば、これ自体を新たに書き換えるべきプログラムとすることができる。また、プログラム自動生成知識DB34から読み出した構造化パターンP3が、変数、式、定義、引数等、一部がステップS17にて自動生成したプログラムコードと相違する場合には、その構造化パターンP3に、その相違する変数や式等を修正することにより、新たに書き換えるべきプログラムを生成するようにしてもよい。つまり、ステップS19では、ステップS17にて自動生成したプログラムコードに対して、これに最も類似しているプログラムコードP2に関連付けられた構造化パターンP3に基づいて修正することでプログラムの書き換えを行うものであってもよい。
また、このステップS19におけるプログラムの書き換えは、ステップS17にて自動生成したプログラムコードに最も類似しているプログラムコードP2に関連付けられた構造化パターンP3に基づいて行う場合に限定されるものではない。ステップS17にて自動生成したプログラムコードにおいて行おうとしている処理動作を特定し、これをプログラム自動生成知識DB34に記録されている処理動作P1と照合するようにしてもよい。自動生成したプログラムコードにおいて行おうとしている処理動作を特定する方法としては、予めプログラムの命令語のパターンと、処理動作P1とを紐付けたデータテーブルを準備しておき、ステップS17にて自動生成したプログラムコードの命令語を抽出し、データテーブルを参照することで行うようにしてもよい。また、意味と、処理動作P1とを直接紐付けたデータテーブルを準備しておき、ステップS15において特定した意味から、データテーブルを参照することで特定するようにしてもよい。
このようにして処理動作P1が特定できれば、これに関連付けられている構造化パターンP3に基づいてプログラムの書き換えを行うようにしてもよい。また、これ以外には、処理動作P1が特定できれば、これに対応するプログラムコードP2から構造化パターンP3させるための遷移パターンがプログラム自動生成知識DB34に記憶されていることから、この遷移パターンを読み出し、それに沿ってステップS17にて自動生成したプログラムコードを書き換えるようにしてもよい。
また更に、プログラム自動生成知識DB34において、効率化前のプログラムコードP2から効率化されたプログラムへ変換するためのアルゴリズムが構造化パターンP3として関連付けられている場合、ステップS17にて自動生成したプログラムコードに最も類似するプログラムコードP2に関連付けられているアルゴリズムを読み出すようにしてもよい。そして、この読み出したアルゴリズムに基づいて、ステップS17にて自動生成したプログラムコードを効率化して書き換えるようにしてもよい。
このプログラム自動生成知識DB34におけるプログラムの書き換えが終了した後、ステップS20へ移行し、IT技術者やプログラマーによるコード編集が必要か否かを確認する。その結果、コード編集が必要な場合、或いはユーザ側からコード編集を希望する旨が受け付けられた場合には、ステップS21へ移行する。一方、コード編集が不要な場合、或いはユーザ側からコード編集を希望する旨が受け付けられなかった場合には、終了となる。
ステップS21に移行した場合、ステップS19において書き換えれたプログラムコードに対して、IT技術者やプログラマーによるコード編集が施される。このコード編集は、手動によるプログラムコードの編集に加え、周知の編集ツールにより自動的に編集をするようにしてもよい。このステップS21におけるコード編集が終了した後、再びステップS20に戻り、コード編集がする必要がなくなればそのまま終了となる。
このように、本発明を適用したプログラムコード自動生成システム100によれば、ステップS13~S17において説明した処理動作を通じて、意図している業務処理をコンピュータ側のシステムにおいて自動的にプログラムコードを生成することができる。このため、極めて容易に、しかも熟練のIT技術者のような技術力がなくても、自動的にプログラムコードを生成することが可能となる。
これに加えて、本発明は、ステップS19における構造化の処理を行うことができることから、熟練のIT技術者の知識や経験が反映された、スムーズで効率化が図られた短いプログラムコードを自動生成することが可能とある。これにより、プログラム開発の仕組みを根本的に変え、近い将来、慢性的なIT技術者不足が社会に甚大な影響を与えることを回避できる。
なお、プログラム自動生成知識DB34において、処理動作P1やこれに対応するプログラムコードP2に対して、複数の構造化パターンP3を関連付けておくことにより、ステップS19において、より効率化された書き換え用のプログラムを複数に亘り生成することができる。その複数に亘り生成された書き換え用のプログラムの中から自動的に、又はユーザの意図に基づいて最適なものを選択することもでき、より高精度な構造化を実現することができる。
ちなみに、上述したステップS19における構造化プロセスを導入する代替として、例えば、ステップS17におけるプログラムコードの自動生成時において、プログラム自動生成知識DB34を参照することで、当該ステップS19自体を省略するようにしてもよい。
かかる場合には、ステップS17において、プログラムコードDB32に基づいてプログラムを生成する際において、当初から一般的なプログラムコードを作るのではなく、効率化されたプログラムの作成を行う。即ち、一般的なプログラムを介さずに、直接的に効率化されたプログラムの作成を行う。
かかる場合には、少なくとも、このプログラム自動生成知識DB34において、実現すべき処理動作P1に対して効率化されたプログラムが関連付けられることが必要となる。実現すべき処理動作P1は、上述したように文脈から読み取る。そして、読み取った文脈から、実現すべき処理動作P1を特定し、この特定した実現すべき処理動作P1に応じた、効率化されたプログラムを参照する。これにより、いかなる実現すべき処理動作P2に対して、熟練のIT技術者であればどのようにプログラムを効率化するかについての知識を参照することができる。この知識を参照することで、プログラムコードDB32に基づいてプログラムを生成する際において、その効率化したプログラムの知識を反映させることができ、その結果、一般的なプログラムを介さずに、直接的に効率化されたプログラムの作成を行うことが可能となる。
このような直接的に効率化されたプログラムの作成を行う場合、作成したプログラムについて、プログラム文法解析DB33を参照することによる文法の正誤のチェックを行うようにしてもよい。即ち、この文法の正誤のチェックを行う対象としての生成すべきプログラムに、この直接的に作成されたプログラムを含めるようにしてもよい。
なお、本発明は、上述した実施の形態に限定されるものではない。例えば、意味変換DB31は、図7に示すように、人工知能による学習データを利用するようにしてもよい。入力データは、単語、指示動作、指示動作及びこれに係り受けする単語の何れかで構成され、出力が意味となる。このような学習データを予め蓄積しておくことで意味変換DB31を生成しておく。そして、ステップS13の自然言語解析においてテキストデータから単語、指示動作、指示動作及びこれに係り受けする単語の何れかが抽出された場合には、この学習データを参照し、これに見合う探索解としての意味を抽出する。
また、プログラムコードDB32は、図8に示すように、人工知能による学習データを利用するようにしてもよい。入力データは、文脈(単語、指示動作、指示動作及びこれに係り受けする単語、意味等)で構成され、出力がプログラムコードとなる。このような学習データを予め蓄積しておくことでプログラムコードDB32を生成しておく。そして、ステップS17のプログラムコードの自動生成時においてこの学習データを参照し、文脈に見合う探索解としてのプログラムコードを抽出する。
同様に、プログラム自動生成知識DB34は、図9に示すように、人工知能による学習データを利用するようにしてもよい。入力データは、実現すべき処理動作P1及び/又はプログラムコードP2であり、出力は、構造化パターンP3となる。このような学習データを予め蓄積しておくことでプログラム自動生成知識DB34を生成しておく。そして、ステップS19の構造化の実行時においてこの学習データを参照し、実現すべき処理動作及び/又はプログラムコードに見合う探索解としての構造化パターンP3を抽出する。
またプログラム文法解析DB33も同様に、人工知能による学習データを利用するようにしてもよいことは勿論である。
第1発明に係るプログラムコード自動生成システムは、文書又は会話文からテキストデータを取得するテキストデータ取得手段と、上記テキストデータ取得手段により取得されたテキストデータを自然言語解析することにより、文脈を抽出する文脈抽出手段と、各文脈に対して1以上のプログラムコードが関連付けて記憶されるプログラムコードデータベースと、プログラム言語の文法書が記録されたプログラム文法解析データベースとを参照し、上記文脈抽出手段により抽出された文脈に応じた1以上のプログラムコードを割り当てるコード割当手段と、プログラムコード又は当該プログラムコードにより実現すべき処理動作に対して、効率化されたプログラムの構造化パターンが関連付けられたプログラム自動生成知識データベースを参照し、上記コード割当手段により割り当てられたプログラムコードを効率化されたプログラムに書き換えるコード効率化手段とを備え、上記コード効率化手段は、プログラムコード又は当該プログラムコードにより実現すべき処理動作と、効率化されたプログラムの構造化パターンとを教師データとして機械学習されたモデルを用い、入力をプログラムコード又は当該プログラムコードにより実現すべき処理動作とし、出力を上記構造化パターンとするプログラム自動生成知識データベースを参照することを特徴とする。
第2発明に係るプログラムコード自動生成システムは、第1発明において、上記文脈抽出手段は、上記自然言語解析することにより、単語、指示動作、指示動作及びこれに係り受けする単語の何れかを抽出することにより、上記文脈を抽出することを特徴とする。
第3発明に係るプログラムコード自動生成システムは、第2発明において、上記文脈抽出手段は、単語、指示動作、指示動作及びこれに係り受けする単語の何れかと、意味とが互いに関連付けて記憶される意味変換データベースを参照し、新たに抽出した上記単語、指示動作、指示動作及びこれに係り受けする単語の何れかと関連する意味を探索することにより、上記文脈を抽出することを特徴とする。
第4発明に係るプログラムコード自動生成システムは、第1発明において、上記コード割当手段は、上記プログラム文法解析データベースを参照し、生成すべきプログラムの文法を解析することにより、その正誤をチェックすることを特徴とする。
第5発明に係るプログラムコード自動生成システムは、第1発明において、上記コード効率化手段は、プログラムコードに対して、効率化されたプログラムが関連付けられたプログラム自動生成知識データベースを参照し、上記コード割当手段により割り当てられたプログラムコードに関連する上記効率化されたプログラムを抽出し、これに書き換えることを特徴とする。
第6発明に係るプログラムコード自動生成システムは、第1発明において、上記コード効率化手段は、プログラムコードにより実現すべき処理動作に対して、効率化前の上記プログラムコードから効率化されたプログラムへ変換するためのアルゴリズムが上記構造化パターンとして関連付けられたプログラム自動生成知識データベースを参照し、上記コード割当手段により割り当てられたプログラムコードにより実現すべき処理動作に関連付けられた上記構造化パターンとしてのアルゴリズムに基づいて、上記書き換えを行うことを特徴とする。
第7発明に係るプログラムコード自動生成システムは、第2発明において、上記文脈抽出手段は、単語、指示動作、指示動作及びこれに係り受けする単語の何れかと、意味とを教師データとして機械学習されたモデルを用い、入力を単語、指示動作、指示動作及びこれに係り受けする単語の何れかとし、出力を意味とする意味変換データベースを参照することを特徴とする。
第8発明に係るプログラムコード自動生成システムは、第1発明~第7発明の何れかにおいて、上記コード割当手段は、文脈とプログラムコードとを教師データとして機械学習されたモデルを用い、入力を文脈とし、出力をプログラムコードとするプログラムコードデータベースを参照することを特徴とする。