以下、自然言語文変換装置等の実施形態について図面を参照して説明する。なお、実施の形態において同じ符号を付した構成要素は同様の動作を行うので、再度の説明を省略する場合がある。
(実施の形態1)
本実施の形態において、自然言語で記載された文を、関数表現の中間言語文に変換する自然言語文変換装置1について説明する。自然言語文変換装置1が取得した中間言語文は、関数表現であるため、極めてコンピュータ処理が容易である、という特性を有する。なお、コンピュータ処理の例として、実施の形態2で説明する翻訳処理、実施の形態3で説明するアニメーション化する処理があるが、コンピュータ処理は、自然言語文の整合性をチェックしたり、入力された自然言語の文に対して、解説を自動取得したりする、他の処理でも良いことは言うまでもない。また、他の処理とは、例えば、「named tag recognition(名前付タグ認識問題)」を解決する処理がある。この処理は、文中から人名や地名、組織名などの固有名詞を自動的に抜き出す処理である。従来の技術においては、人名や地名等の固有名詞の文字列の特徴を使って、辞書だけでは抽出困難な固有名詞を抽出する、というものであったが、中間言語文を用いる自然言語文変換装置1の方法では、埋め込み語句の属性として、タグに相当するものが既に入っており、容易に名前付タグ認識問題が解ける。
ここで、関数表現(「関数の構造」とも言う)とは、一般的には、以下の4種類の情報を有する。1)関数を一意に識別する情報である関数名やメソッド名などの関数識別子、2)文や句のパターンを表現する文型パターン情報、3)引数として関数に埋め込まれる「埋め込み語句」、および4)話者の属性(性別、年齢、職業、宗教など)を識別する記号や、話者と聞き手との関係などの非言語情報識別子、である。
つまり、関数表現は、「関数識別子(関数名)」+「文型パターン情報」+「引数列(埋め込み語句関係子の列)」+「非言語情報識別子の集合」となる。4種類の情報のうち、言語に従属したものは、「文型パターン情報」だけである。その他のものは、言語独立である。なお、埋め込み語句関係子とは、埋め込み語句の種類を示す情報である。
図1は、本実施の形態における自然言語文変換装置1のブロック図である。
自然言語文変換装置1は、原言語文型辞書11、原言語文関数辞書12、原言語語句辞書13、原言語共起辞書14、受付部16、関数化部17、中間言語文作成部18、出力部19を備える。
中間言語文作成部18は、原言語関数識別子取得手段181、語句取得手段182、変形語句取得手段183、非言語情報識別子取得手段184、語句識別子取得手段185、中間言語文構成手段186を備える。
原言語文型辞書11は、原言語文型情報を1以上格納し得る。原言語文型情報は、原言語型情報と非言語情報識別子とを対に有する情報である。原言語型情報は、原言語関数識別子と文型パターンと1以上の語句を有する情報である。語句とは、例えば、単語、句、述語、文などである。また、原言語型情報は、原言語関数識別子と文型パターンと1以上の引数である語句を有しても良い。また、原言語型情報は、語句の種類(品詞や、主体、客体などの動詞との関係)を有しても良い。なお、語句は埋め込まれる情報であり、埋め込み語句と言っても良い。語句の種類とは、例えば、文[S]や、名詞または名詞句[N]などである。ここで、語句や埋め込み語句関係子は、原言語関数識別子で識別される関数の引数を示す情報である。原言語関数識別子は、原言語の関数を識別する情報である。文型パターンは、文のパターンを示す情報である。文型パターンは、中心語、機能語、および埋め込み語句(引数)の挿入位置を含み得る。中心語とは、その関数を代表する動詞、形容詞、副詞、接続詞などである。また、機能語とは、中心語を修飾する補語(目的補語、方向補語、時間補語)などを示す前置詞、助詞、助動詞などである。また、引数情報(原言語関数識別子)は、埋め込み語句の分類コードを有しても良い。埋め込み語句の分類コードは、agent,object,placeなどの挿入可能な語句の意味を表す情報である。なお、原言語とは、処理対象(処理前)の文の言語であり、機械翻訳の対象の言語とは限らない。原言語は、例えば、日本語、英語、中国語などである。ただし、原言語は問わないことは言うまでもない。
文型パターンは、引数の挿入場所を示す引数挿入情報(例えば、「_」や「_」)を有しても良い。引数挿入情報は、変化がない埋め込み語句を埋め込む場所を示す。また、文型パターンは、活用や複数型など、語句が変形する可能性があることを示す変化フラグ(例えば、「@」や「@」)を有しても良い。なお、埋め込み文の主体(agent)や目的語(object)などを文中に埋め込む必要がある場合に、他の埋め込みフラグを用意し、当該埋め込みフラグを、当該埋め込み場所を示すフラグとして利用しても良い。また、他の埋め込みフラグは、変化フラグと同じにするなど、他のフラグと共用しても良い。さらに、非言語情報識別子は、言語非依存の関数を識別する情報である。非言語情報識別子は、文中には明示的に表れない情報であり、例えば、話者の属性(例えば、性別、年齢、職業、宗教など)を識別する記号や、話者と聞き手との関係(例えば、目上、目下、師弟関係など)を示す情報などである。また、非言語情報識別子は、例えば、英数字列である。なお、原言語文型情報等の具体例は、後述する。
原言語文型辞書11は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。原言語文型辞書11に原言語文型情報が記憶される過程は問わない。例えば、記録媒体を介して原言語文型情報が原言語文型辞書11で記憶されるようになってもよく、通信回線等を介して送信された原言語文型情報が原言語文型辞書11で記憶されるようになってもよく、あるいは、入力デバイスを介して入力された原言語文型情報が原言語文型辞書11で記憶されるようになってもよい。
原言語文関数辞書12は、原言語文関数情報を1以上格納し得る。原言語文関数情報は、原言語関数情報と非言語情報識別子とを対に有する情報である。原言語関数情報は、原言語の文字列を含む原言語関数識別子と原言語関数識別子で識別される関数の引数を示す情報である0または1以上の引数情報とを有する情報である。ここでの非言語情報識別子は、原言語関数情報に対応する情報であり、言語非依存の識別子である。詳細には、非言語情報識別子は、原言語関数情報に対応する情報であるが、表現に明示的に表れていない情報を言語非依存にコード化した識別子である。また、原言語文関数情報は、属性値をとり得る。属性値とは、例えば、非言語情報(文や句として明示的に表れない情報)を表すコードである。また、原言語関数情報は、中心語識別記号を含んでも良い。中心語識別記号とは、中心語を識別する記号である。原言語関数情報において、中心語識別記号の後、英語のように語が空白で区切られている場合は「空白」までが中心語となる。また、日本語や韓国語のように動詞や形容詞の語尾が変化する場合は、語幹の終わりを示す記号(例えば、「/」)までが中心語となる。また、ベトナム語のように音節区切り記号が「空白」で、語の区切り記号が無いものは、音節を記号(例えば、「=」)でつないで、語の終わりの「空白」までが中心語となる。
引数情報とは、例えば、語句の種類(品詞や主体など)や原言語関数識別子などである。引数情報は、例えば、引数である原言語関数識別子で識別される原言語関数情報の種類(文[S]や、名詞または名詞句[N])などを有しても良い。なお、原言語文関数情報等の具体例は、後述する。
原言語文関数辞書12は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。原言語文関数辞書12に原言語文関数情報が記憶される過程は問わない。原言語文関数情報は、例えば、関数化部17により生成され、蓄積される。
原言語語句辞書13は、原言語の語句と、語句を識別する語句識別子とを対に有する原言語語句情報を1以上格納し得る。原言語語句辞書13は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。原言語語句辞書13に原言語語句情報が記憶される過程は問わない。
原言語共起辞書14は、原言語関数識別子と1以上の語句との共起を示す情報である共起情報を1以上格納し得る。共起情報は、例えば、原言語関数識別子と1以上の各語句との共起確率を示す情報や、共起頻度を示す情報などである。共起情報の具体例についても後述する。原言語共起辞書14は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。原言語共起辞書14に共起情報が記憶される過程は問わない。共起情報は、例えば、関数化部17により生成され、蓄積される。
受付部16は、原言語の文を受け付ける。受付部16は、原言語の文および文のタイプを受け付けても良い。受付部16は、複数の文を一度に受け付けても良い。そして、複数の文を一度に受け付ける場合、受付部16は、文ごとに文のタイプをも受け付けても良い。また、受付部16は、一部の文についてのみ、文のタイプをも受け付けても良い。ここで、受け付けとは、キーボードやマウス、タッチパネルなどの入力デバイスから入力された情報の受け付け、有線もしくは無線の通信回線を介して送信された情報の受信、光ディスクや磁気ディスク、半導体メモリなどの記録媒体から読み出された情報の受け付けなどを含む概念である。
文等の入力手段は、テンキーやキーボードやマウスやメニュー画面によるもの等、何でも良い。受付部16は、テンキーやキーボード等の入力手段のデバイスドライバーや、メニュー画面の制御ソフトウェア等で実現され得る。
関数化部17は、原言語文型情報から原言語文関数情報を生成する。例えば、関数化部17は、原言語文型情報が有する関数の引数を示す情報である1以上の語句を、1以上の引数情報に変更することにより、原言語文関数情報を生成する。かかる場合、関数化部17は、原言語文型情報が有する原言語関数識別子は変更せずに、原言語文関数情報に含める。関数化部17は、例えば、原言語文型情報「N1:a-*connected-_([N: graph]);」から語句「graph」を消去し、かつ、原言語文型情報の識別子「N1」から種類の情報である「N」のみを取り出し「N1」を「N」に変更し、原言語文関数情報「N a-*connected-_([N]);」を得ても良い。また、関数化部17は、例えば、原言語文型情報「S5:もし、@S:S1ていれば、@S:S2である([S:S4],[S:S3]);」から引数の具体的な値である「S4」「S5」(原言語文型情報の識別子)を消去し、かつ、原言語文型情報の識別子「S4」「S5」を「S1」「S2」に変更し、原言語文関数情報「S もし、@S:S1ていれば、@S:S2である([S1],[S2]);」を得ても良い。
また、関数化部17は、原言語文型情報から、共起情報を生成する。例えば、関数化部17は、原言語文型情報の原言語関数識別子と、その引数である語句を取り出し、当該原言語関数識別子と語句との共起頻度を1、インクリメントして、原言語共起辞書14に記録する。関数化部17は、例えば、原言語文型情報「N1:a-*connected-_([N: graph]);」から、原言語関数識別子「a-*connected-_」と語句「graph」の共起頻度を1、インクリメントして、原言語共起辞書14に記録する。
さらに、関数化部17は、原言語文型情報から原言語語句情報の一部を生成しても良い。例えば、関数化部17は、原言語文型情報にマッチする語句が、原言語語句辞書13に格納されているか否かを検査し、格納されていない場合に、原言語文型情報にマッチする語句を、原言語語句辞書13に蓄積する。そして、新たに原言語語句辞書13に蓄積された語句に対応する語句識別子は、例えば、ユーザが入力する。関数化部17は、例えば、原言語文型情報「N1:a-*connected-_([N: graph]);」から、語句「graph」を取得し、原言語語句辞書13に語句「graph」が格納されているか否かを検査し、格納されていない場合に、語句「graph」を、原言語語句辞書13に蓄積する。そして、例えば、ユーザが、語句「graph」に対応する語句識別子「w001」を、原言語語句辞書13に入力する。
関数化部17は、通常、MPUやメモリ等から実現され得る。関数化部17の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
中間言語文作成部18は、受付部16が受け付けた文と、原言語文関数辞書12に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子と対になる1以上の非言語情報識別子を取得する。また、中間言語文作成部18は、受付部16が受け付けた文と、原言語語句辞書13に格納されている1以上の原言語の語句とのマッチングをとり、マッチする1以上の語句識別子を取得する。そして、中間言語文作成部18は、取得した1以上の非言語情報識別子と1以上の語句識別子とを用いて、関数の構造を有する1以上の中間言語文を構成する。ここで、マッチングとは、例えば、パターンマッチングである。また、例えば、受付部16が受け付けた文と1以上の原言語の語句とのマッチングをとる処理は、受付部16が受け付けた文にマッチする原言語関数識別子に対応する引数に対応する文字列と、1以上の原言語の語句とのマッチングをとることである。
また、中間言語文作成部18は、次のように処理を行っても良い。つまり、中間言語文作成部18は、受付部16が受け付けた文と、1以上の原言語関数識別子とのマッチングをとる。なお、この1以上の原言語関数識別子は、原言語文関数辞書12に格納されている原言語関数識別子および原言語文型辞書11に格納されている原言語関数識別子である。そして、中間言語文作成部18は、マッチする1以上の原言語関数識別子と対になる1以上の非言語情報識別子を取得する。そして、中間言語文作成部18は、原言語語句辞書13に格納されている1以上の原言語の語句とのマッチングをとり、マッチする1以上の語句識別子を取得する。次に、中間言語文作成部18は、取得した1以上の非言語情報識別子と1以上の語句識別子とを用いて、関数の構造を有する1以上の中間言語文を構成する。
また、中間言語文作成部18は、原言語共起辞書14に格納されている1以上の共起情報をも用いて、1以上の非言語情報識別子と1以上の語句識別子とを取得し、取得した1以上の非言語情報識別子と1以上の語句識別子とを用いて、関数の構造を有する1以上の中間言語文を構成しても良い。つまり、中間言語文作成部18は、非言語情報識別子に対応する原言語関数識別子と、共起情報が示す共起頻度や共起確率が大きい語句に対応する語句識別子を取得し、当該語句識別子を用いて、中間言語文を構成することは好適である。
また、中間言語文作成部18は、引数挿入情報を用いて、受付部16が受け付けた文と、原言語文関数辞書12に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子と対になる1以上の非言語情報識別子を取得する。さらに具体的には、中間言語文作成部18は、引数挿入情報を用いて、原言語関数識別子に引数の情報を挿入し、文字列のパターンを取得する。そして、中間言語文作成部18は、かかる文字列のパターンと受付部16が受け付けた文とのマッチングをとり、マッチする1以上の原言語関数識別子と対になる1以上の非言語情報識別子を取得する。
また、中間言語文作成部18は、1以上の非言語情報識別子を取得する場合に、変形語句取得手段183が取得した1以上の変形語句をも用いて、受付部16が受け付けた文と、原言語文関数辞書12に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子と対になる1以上の非言語情報識別子を取得する。さらに具体的には、中間言語文作成部18は、変形語句取得手段183が取得した1以上の変形語句と語句の原型のうちから適切な語句を選択し、当該選択した語句を変形語句の位置に配置し、文字列のパターンを取得する。そして、中間言語文作成部18は、かかる文字列のパターンと受付部16が受け付けた文とのマッチングをとり、マッチする1以上の原言語関数識別子と対になる1以上の非言語情報識別子を取得する。
また、中間言語文作成部18は、1以上の非言語情報識別子を取得する場合に、不定語句フラグをも用いて、受付部16が受け付けた文と、原言語文関数辞書12に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子と対になる1以上の非言語情報識別子を取得する。
また、中間言語文作成部18は、非言語情報識別子を取得する場合に、受付部16が受け付けた属性値を含む原言語文関数情報または原言語文型情報の中から、原言語関数識別子を取得し、原言語関数識別子と対になる1以上の非言語情報識別子を取得する。属性値を用いて原言語文関数情報または原言語文型情報を早期に絞り込むことにより、処理が速くなり、処理の精度も向上する。
原言語文関数情報または原言語文型情報は、属性値を有することは好適である。また、属性値(attribute)は、関数に付加されても良い。また、属性値が存在しない関数もあり得ることは言うまでもない。また、属性値には、「関数タイプ」、「非言語情報」、「態・アスペクト・モード」などがある。関数タイプとは、関数のタイプまたは文型のタイプを示す情報である。関数タイプは、例えば、「S」、「N」、「P」である。「S」とは文である。「N」とは名詞または名詞句を示す。「P」とは述語である。非言語情報は、言語に表れない情報である。非言語情報とは、例えば、話者属性(男性、女性、年齢、立場など)、話者と聞き手との関係(上下関係、友人関係、親族関係など)、時制、季節、時間帯、文が登場する場所、文の目的など、文が登場するいずれかの環境を特定する情報である。非言語情報の具体例は、「話者男性(speaker-man)」、「話者(下)・聞き手(上)の関係(respect)」、「昼間(daytime)」などである。また、「態・アスペクト・モード」のうちの態(voice)は、能動態や受動態などを示す。また、アスペクト(aspect)は、時間関係の情報である。さらに、モード(modality)は、意思や感情などの情報である。モードは、意思を示す「Intend」、感情を示す「Emotion」などがある。また、「Verb」属性は、その関数が動詞型であることを示す。関数タイプは、「動詞型、形容詞型」のいずれかであり、2つを区別するために、属性値は「動詞型(Verb)」、「形容詞型(Adlective)」をとり得る。
中間言語文作成部18は、通常、MPUやメモリ等から実現され得る。中間言語文作成部18の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
原言語関数識別子取得手段181は、受付部16が受け付けた文と、原言語文関数辞書12に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子を取得する。また、原言語関数識別子取得手段181は、受付部16が受け付けた文と、原言語文関数辞書12に格納されている1以上の原言語関数識別子および原言語文型辞書11に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子を、原言語文関数辞書12および原言語文型辞書11から取得する。
語句取得手段182は、受付部16が受け付けた文に含まれる1以上の語句であり、原言語関数識別子取得手段181が取得した原言語関数識別子で識別される関数の引数に対応する1以上の語句と、原言語語句辞書13に格納されている1以上の原言語の語句とのマッチングをとり、マッチする1以上の語句を、原言語語句辞書13から取得する。
変形語句取得手段183は、変化フラグが付与された語句の変形語句を取得する。例えば、日本語や韓国語の場合、変形語句取得手段183は、変化形(変化のルール)を保持しており、変化形を用いて活用形を生成することにより、変形語句を取得する。また、英語の場合、変形語句取得手段183は、時制、人称、複数変形などによる規則変化の場合は、変化のルールを保持しており、当該ルールを適用し、変形語句を取得する。また、不規則変化の場合は、不規則変化の情報を、それぞれ個別に保持しており、変形語句取得手段183は、かかる情報を用いて、変形語句を取得する。また、変形語句取得手段183は、変化フラグが付与された語句をキーとして、図示しない原言語変化語句辞書を検索し、1以上の変形語句を、原言語変化語句辞書から取得しても良い。つまり、語句から変化語句を取得する方法は問わない。
非言語情報識別子取得手段184は、原言語関数識別子取得手段181が取得した1以上の原言語関数識別子のそれぞれに対応する1以上の非言語情報識別子を、原言語文関数辞書12から取得する。非言語情報識別子取得手段184は、原言語関数識別子取得手段181が取得した1以上の原言語関数識別子のそれぞれに対応する1以上の非言語情報識別子を、原言語文型辞書11から取得しても良い。
語句識別子取得手段185は、語句取得手段182が取得した1以上の語句のそれぞれに対応する1以上の語句識別子を、原言語語句辞書13から取得する。
中間言語文構成手段186は、非言語情報識別子取得手段184が取得した1以上の非言語情報識別子と語句識別子取得手段185が取得した1以上の語句識別子とを用いて、関数の構造を有する1以上の中間言語文を構成する。なお、中間言語文構成手段186は、1以上の語句識別子を用いずに、1以上の中間言語文を構成しても良い。また、中間言語文構成手段186は、非言語情報識別子取得手段184が取得した1以上の非言語情報識別子と、他の中間言語文を識別する1以上の中間言語文識別子とを用いて、1以上の中間言語文を構成しても良い。また、中間言語文構成手段186は、受け付けられた一つの原言語の文に対して、通常、一つの中間言語文を構成する。中間言語文の構成方法の具体例は後述する。
出力部19は、中間言語文作成部18が構成した1以上の中間言語文を出力する。ここで、出力とは、ディスプレイへの表示、プロジェクターを用いた投影、プリンタへの印字、外部の装置への送信、記録媒体への蓄積、他の処理装置や他のプログラムなどへの処理結果の引渡しなどを含む概念である。
出力部19は、ディスプレイやスピーカー等の出力デバイスを含むと考えても含まないと考えても良い。出力部19は、出力デバイスのドライバーソフトまたは、出力デバイスのドライバーソフトと出力デバイス等で実現され得る。また、出力部19は、中間言語文を蓄積するソフトウェアにより実現されても良い。
次に、自然言語文変換装置1の動作について、図2のフローチャートを用いて説明する。
(ステップS201)受付部16は、文、または文と文のタイプを受け付けたか否かを判断する。文等を受け付ければステップS202に行き、文等を受け付けなければステップS201に戻る。
(ステップS202)中間言語文作成部18は、カウンタiに1を代入する。
(ステップS203)中間言語文作成部18の原言語関数識別子取得手段181は、原言語文関数辞書12に、i番目の原言語文関数情報が存在するか否かを判断する。i番目の原言語文関数情報が存在すればステップS204に行き、存在しなければステップS212に行く。
(ステップS204)原言語関数識別子取得手段181は、原言語文関数辞書12から、i番目の原言語文関数情報を読み出す。
(ステップS205)中間言語文構成手段186等は、文とi番目の原言語文関数情報とのマッチング処理を行う。マッチング処理とは、文とi番目の原言語文関数情報とがマッチするか否かを判断する処理である。なお、マッチング処理の対象の文は、受付部16が受け付けた文や、後述するステップS210で一部変形された文である。
(ステップS206)中間言語文構成手段186は、ステップS205における判断結果が「マッチする(例えば、マッチフラグ=ON)」との判断結果である場合はステップS207に行き、「マッチしない(例えば、マッチフラグ=OFF)」との判断結果である場合はステップS211に行く。
(ステップS207)中間言語文構成手段186は、i番目の原言語文関数情報を取得する。
(ステップS208)中間言語文構成手段186は、ステップS207で取得した原言語文関数情報と、文とマッチした箇所の情報(文字列)から、原言語型情報を構成する。なお、原言語型情報は、例えば、原言語文関数情報が有する原言語関数識別子と、当該原言語関数識別子に対応する関数の引数となる1以上の語句とを有する。1以上の語句は、文とマッチした箇所の1以上の語句である。また、原言語型情報は、例えば、原言語文関数情報が有する原言語関数識別子と、他の原言語型情報を識別する情報とを有する。他の原言語型情報を識別する情報は、原言語関数識別子に対応する関数の引数となる。
(ステップS209)中間言語文構成手段186は、ステップS208で構成した原言語型情報を、バッファに少なくとも一時蓄積する。
(ステップS210)中間言語文構成手段186は、処理対象の文(例えば、受付部16が受け付けた文や、一部変形された文)を変形する。例えば、中間言語文構成手段186は、処理対象の文のうち、マッチしたパターンの箇所を、原言語型情報を識別する情報に置き換え、変形した文を取得する。
(ステップS211)中間言語文作成部18は、カウンタiを1、インクリメントする。ステップS203に戻る。
(ステップS212)中間言語文作成部18は、カウンタiに1を代入する。
(ステップS213)中間言語文構成手段186は、バッファに、i番目の原言語型情報が存在するか否かを判断する。i番目の原言語型情報が存在すればステップS214に行き、存在しなければ処理を終了する。
(ステップS214)中間言語文構成手段186は、i番目の原言語型情報の原言語関数識別子に対応する言語非依存の識別子である非言語情報識別子を、原言語文関数辞書12または原言語文型辞書11から取得する。そして、中間言語文構成手段186は、原言語関数識別子を、取得した非言語情報識別子に置き換える。
(ステップS215)中間言語文構成手段186は、カウンタjに1を代入する。
(ステップS216)中間言語文構成手段186は、i番目の原言語型情報の中に、j番目の引数が存在するか否かを判断する。j番目の引数が存在すればステップS217に行き、j番目の引数が存在しなければステップS221に行く。
(ステップS217)中間言語文構成手段186は、j番目の引数が語句であるか否かを判断する。j番目の引数が語句であればステップS218に行き、語句でなければステップS220に行く。
(ステップS218)語句識別子取得手段185は、j番目の引数である語句をキーとして、原言語語句辞書13を検索し、語句識別子を取得する。
(ステップS219)中間言語文構成手段186は、ステップS218で取得された語句識別子を、i番目の原言語型情報の引数の箇所に配置する。ここで、配置とは、通常、語句に代えて語句識別子を上書きすることである。
(ステップS220)中間言語文構成手段186は、カウンタjを1、インクリメントする。ステップS216に戻る。
(ステップS221)出力部19は、中間言語文を出力する。ここでの出力は、例えば、予め決められたファイルへの蓄積である。
(ステップS222)中間言語文作成部18は、カウンタiを1、インクリメントする。ステップS213に戻る。
なお、図2のフローチャートにおいて、中間言語文作成部18は、原言語文関数辞書12のみを検索して、中間言語文を構成した。つまり、中間言語文作成部18は、原言語文型辞書11を検索して、中間言語文を構成しなかった。しかし、中間言語文作成部18は、原言語文型辞書11を検索して、中間言語文を構成しても良い。
また、図2のフローチャートにおいて、原言語共起辞書14を用いなかった。しかし、中間言語文作成部18は、複数の語句の候補、複数の原言語関数識別子の候補が存在する場合、対応する原言語関数識別子と共起確率が高いまたは共起頻度が大きい語句を取得したり、対応する語句と共起確率が高いまたは共起頻度が大きい原言語関数識別子を取得したりすることは好適である。つまり、中間言語文作成部18は、原言語共起辞書14に格納されている1以上の共起情報をも用いて、1以上の非言語情報識別子と1以上の語句識別子とを取得し、取得した1以上の非言語情報識別子と1以上の語句識別子とを用いて、関数の構造を有する1以上の中間言語文を構成しても良い。複数の語句の候補、複数の原言語関数識別子の候補が存在する場合に、一の語句や、一の原言語関数識別子を取得する処理は、中間言語文作成部18の選択候補一意化手段187(図示しない)が行う、とする。
また、図2のフローチャートにおいて、文のタイプをも受け付けられた場合、ステップS203やステップS204において、当該文のタイプと所定の関係にある関数タイプに対応する原言語文関数情報の集合のみから、i番目の原言語文関数情報を取得するようにしても良い。かかることにより、早期に原言語文関数情報の絞り込みが行え、処理速度が向上する。
次に、ステップS205のマッチング処理について、図3のフローチャートを用いて説明する。
(ステップS301)中間言語文構成手段186は、受け付けられた文にタイプが存在するか否かを判断する。タイプが存在すればステップS302に行き、タイプが存在しなければステップS303に行く。
(ステップS302)中間言語文構成手段186は、受け付けられた文のタイプと、処理対象の原言語関数情報の関数タイプが所定の関係にあるか否かを判断する。文のタイプと関数タイプとが所定の関係にあればステップS303に行き、所定の関係になければステップS314に行く。ここで、所定の関係とは、例えば、文のタイプと関数タイプとが同じであることである。また、所定の関係とは、例えば、文のタイプと関数タイプとが同じである、または関数タイプが空(文のタイプと異なる関数タイプを有しない)であることである。
(ステップS303)中間言語文構成手段186は、処理対象の原言語文関数情報が有する原言語関数情報が1以上の引数を有するか否かを判断する。1以上の引数を有すればステップS304に行き、1以上の引数を有しなければステップS305に行く。
(ステップS304)中間言語文構成手段186は、処理対象の原言語関数情報が有する原言語関数識別子の、引数挿入情報が示す引数の箇所を、任意の文字列がマッチする符号(例えば、「*」)に変換する。
(ステップS305)中間言語文構成手段186は、処理対象の原言語関数情報(原言語関数識別子)が1以上の変化フラグを有するか否かを判断する。1以上の変化フラグを有すればステップS306に行き、1以上の変化フラグを有しなければステップS307に行く。
(ステップS306)変形語句取得手段183は、変化フラグが付された語句から、予め決められたルールを適用し、1以上の変形語句を、変化フラグが付された語句ごとに取得する。
(ステップS307)中間言語文構成手段186は、処理対象の原言語関数情報から、文字列のパターンを、1以上取得する。中間言語文構成手段186は、例えば、ステップS304で取得した原言語関数情報に対して、ステップS306で取得した1以上の語句(検索キーとなった語句)および変形語句を、各々、語句の箇所に挿入し、1以上の語句および変形語句の組み合わせの数だけ、文字列のパターンを取得する。また、変化フラグが存在しない場合、中間言語文構成手段186は、例えば、ステップS304で取得した原言語関数情報が有する原言語関数識別子を、文字列のパターンとして取得する。
(ステップS308)中間言語文構成手段186は、カウンタiに1を代入する。
(ステップS309)中間言語文構成手段186は、ステップS307で取得した文字列のパターンのうち、i番目のパターンが存在するか否かを判断する。i番目のパターンが存在すればステップS310に行き、i番目のパターンが存在しなければステップS314に行く。
(ステップS310)中間言語文構成手段186は、i番目のパターンと、文とのマッチングをとる。なお、このマッチングとは、例えば、任意の文字列を許す「*」などの正規表現も加味した、パターンマッチングである。
(ステップS311)中間言語文構成手段186は、ステップS310におけるマッチングの結果、i番目のパターンと文とがマッチしたか否かを判断する。マッチすればステップS312に行き、マッチしなければステップS313に行く。
(ステップS312)中間言語文構成手段186は、マッチフラグに「ON」を代入する。上位処理にリターンする。
(ステップS313)中間言語文構成手段186は、カウンタiを1、インクリメントする。ステップS309に戻る。
(ステップS314)中間言語文構成手段186は、マッチフラグに「OFF」を代入する。上位処理にリターンする。
以下、本実施の形態における自然言語文変換装置1の具体的な動作について説明する。以下、原言語が英語である場合の具体例1、および原言語が日本語である場合の具体例2について説明する。
(具体例1)
今、原言語文関数辞書12は、図4に示す原言語文関数辞書を格納している。原言語文関数辞書は、「ID」「原言語文関数情報」「索引」を有するレコードを1以上格納している。「原言語文関数情報」は「種類」「原言語関数情報」「非言語情報識別子」「属性値」を有する。「種類」とは、「原言語関数情報」の種類を示す情報であり、関数タイプと同意義である。また、「種類」は、ここでは、名詞または名詞句を示す「N」、または文を示す「S」などの値を採り得る。「原言語関数情報」は、原言語関数識別子および0または1以上の引数情報を有する。原言語関数識別子は、マッチする文字列のパターンを示す情報である。原言語関数識別子「a-*connected-_」の「-」は、スペースを示す。「*」は、任意の文字列(1以上の語句)を示す。さらに詳細には、「*」は、副詞から作られる文型関数を、他の文に埋め込む位置を示している。「_」は、引数情報に対応する引数が入ることを示す。原言語関数識別子「_-@be:a1-_」の「@」は変化フラグであり、「@」に続く語句である「be」が変化し得ることを示す。「a1」は、第一番目の引数を示し、「a1」の表記により、「be」が第一番目の引数により変化することを示す。つまり、「@be:a1」は第一番目の引数により、語句「be」が変化し得ることを示す。また、引数情報は、引数の種類を示す引数種類情報を有する。引数種類情報「N」は、引数が名詞または名詞句であることを示す。引数種類情報[a-object]は、引数が属性を有する主体であることを示す。引数種類情報[object]は、引数が対象物であることを示す。引数種類情報[agent]は、引数が主体であることを示す。引数種類情報[S]は、引数が文であることを示す。つまり、原言語関数情報「a-*connected-_([N])」は、例えば、「a connected graph」に合致することを示す。つまり、原言語関数情報は、マッチする文字列を特定する情報である。また、「非言語情報識別子」は、ここでは数字列であるが、英文字やその他の文字などを用いても良いことは言うまでもない。「非言語情報識別子」は、原言語関数情報を特定できれば良い。さらに、ここでは、「属性値」は、空である。つまり、「ID=1」から「ID=7」のレコードにおいて、「属性値」は定義されていない。また、「索引」とは、原言語関数情報を検索する場合のキーであり、原言語関数情報を構成する1文字である。「索引」は、関数名イニシャル索引とも言う。
また、図5は、原言語語句辞書13の例を示す図である。原言語語句辞書13は、「ID」「語句」「語句識別子」を有するレコードを1以上格納している。「語句」「語句識別子」は、原言語語句情報である。
かかる状況において、文「If G is a connected graph and every vertex has even degree, then G has an Euler cycle.」が入力され、受付部16が当該文を受け付けた、とする。
次に、原言語関数識別子取得手段181は、1番目の原言語文関数情報を、図4の原言語文関数辞書から読み出す。
次に、中間言語文構成手段186は、文のタイプが存在しないので、1番目の原言語文関数情報が有する原言語関数識別子「a-*connected-_」の引数挿入情報「_」の箇所を任意の文字列がマッチする符号「*」に変換し、「a-*connected-*」を得る。なお、記号「*」は、この文型関数の「中心語」がどれであるかを示している。
次に、中間言語文構成手段186は、処理対象の原言語関数識別子「a-*connected-*」が1以上の変化フラグを有しない、と判断する。そして、中間言語文構成手段186は、文字列のパターン「a-*connected-*」を一つ取得する。
次に、中間言語文構成手段186は、パターン「a-*connected-*」と、文「If G is a connected graph and every vertex has even degree, then G has an Euler cycle.」とのマッチングをとる。そして、中間言語文構成手段186は、文の「a connected graph」の文字列が、パターン「a-*connected-*」にマッチする、と判断する。そして、中間言語文構成手段186は、マッチフラグに「ON」を代入する。
次に、中間言語文構成手段186は、1番目の原言語文関数情報が有する原言語関数情報「a-*connected-_([N]);」と、文とマッチした箇所の情報(文字列)「a connected graph」を用いて、原言語型情報「N1:a-*connected-_([N:graph]);」を構成する。なお、中間言語文構成手段186は、原言語関数情報「a-*connected-_([N]);」に対応する種類「N」を取得し、かつ、1番目の「N」の出現を検知し、「N1」を構成する。中間言語文構成手段186は、種類「N」の1番目の原言語関数情報に対して、「N1」を取得する。また、中間言語文構成手段186は、「a-*connected-_([N]);」の[N]の箇所には、マッチングにより語句「graph」を取得し、「a-*connected-_([N:graph]);」を得る。そして、中間言語文構成手段186は、「a-*connected-_([N:graph]);」に「N1」を付加して、原言語型情報「N1:a-*connected-_([N:graph]);」を得る。
そして、中間言語文構成手段186は、構成した原言語型情報「N1:a-*connected-_([N:graph]);」を、バッファに、少なくとも一時蓄積する。
次に、中間言語文構成手段186は、受付部16が受け付けた文「If G is a connected graph and every vertex has even degree, then G has an Euler cycle.」を変形し、「If G is N1 and every vertex has even degree, then G has an Euler cycle.」を得る。つまり、中間言語文構成手段186は、マッチした箇所の情報(文字列)「a connected graph」を、原言語型情報の識別子「N1」に置き換える。
次に、原言語関数識別子取得手段181は、2番目の原言語文関数情報を、図4の原言語文関数辞書から読み出す。
次に、中間言語文構成手段186は、文のタイプが存在しないので、2番目の原言語文関数情報が有する原言語関数識別子「_-@be:a1-_」の引数挿入情報「_」の箇所を任意の文字列がマッチする符号「*」に変換し、「*-@be:a1-*」を得る。
次に、中間言語文構成手段186は、処理対象の原言語関数識別子が変化フラグ「@」を有すると、判断する。
次に、変形語句取得手段183は、変化フラグ「@」が付された語句「be」をキーとして、保持している、語句「be」に対する変化のルールを読み出し、当該ルールを適用し、変形語句「is」を取得する。なお、ルールとは、例えば、「a1」が単数であり時制が現在の場合は「is」、「a1」が複数であり時制が現在の場合は「are」、「a1」が単数であり時制が過去の場合は「was」、「a1」が複数であり時制が過去の場合は「were」となる、というルールである。「a1」に該当する語句が単数か複数かは、原言語語句辞書13を検索することにより取得できる、とする。原言語語句辞書13の各語句には、単数形か複数形かを示す情報が付与されている。また、時制が現在か過去かについて、文の動詞をキーとして原言語語句辞書13を検索することにより、取得できる、とする。原言語語句辞書13の動詞には、現在形、過去形などの語句が記載されているものとする。
次に、中間言語文構成手段186は、「be」を「is」に置き換えたパターン「*-is-*」と、文「If G is N1 and every vertex has even degree, then G has an Euler cycle.」とのマッチングをとる。
そして、中間言語文構成手段186は、パターン「*-is-*」と、文「If G is N1 and every vertex has even degree, then G has an Euler cycle.」とはマッチする、と判断する。中間言語文構成手段186は、パターン「*-is-*」と文を構成する文字列「G is N1」がマッチするので、このパターンと文とがマッチする、と判断する。そして、中間言語文構成手段186は、マッチフラグに「ON」を代入する。
次に、中間言語文構成手段186は、2番目の原言語文関数情報が有する原言語関数情報「_-@be:a1-_([a-object],[object]);」と、文とマッチした箇所の情報(文字列)「G is N1」を用いて、原言語型情報「S1:_-@be:a1-_([a-object:G],[object:N1]);」を構成する。なお、中間言語文構成手段186は、原言語関数情報「_-@be:a1-_([a-object],[object]);」に対応する種類「S」を取得し、かつ、1番目の「S」の出現を検知し、「S1」を構成する。そして、中間言語文構成手段186は、「_-@be:a1-_([a-object:G],[object:N1]);」に「S1」を付加して、原言語型情報「S1:_-@be:a1-_([a-object:G],[object:N1]);」を得る。
そして、中間言語文構成手段186は、構成した原言語型情報「S1:_-@be:a1-_([a-object:G],[object:N1]);」を、バッファに、少なくとも一時蓄積する。
次に、中間言語文構成手段186は、上記と同様に、処理対象の文「If G is N1 and every vertex has even degree, then G has an Euler cycle.」を変形し、「If S1 and every vertex has even degree, then G has an Euler cycle.」を得る。
次に、原言語関数識別子取得手段181は、3番目の原言語文関数情報を、図4の原言語文関数辞書から読み出す。
次に、中間言語文構成手段186は、文のタイプが存在しないので、3番目の原言語文関数情報が有する原言語関数識別子「every-_」の引数挿入情報「_」の箇所を任意の文字列がマッチする符号「*」に変換し、「every-*」を得る。
次に、中間言語文構成手段186は、処理対象の原言語関数識別子が変化フラグ「@」を有しないと、判断する。そして、中間言語文構成手段186は、文字列のパターン「every-*」を一つ取得する。
次に、中間言語文構成手段186は、パターン「every-*」と、変形後の文「If S1 and
every vertex has even degree, then G has an Euler cycle.」とのマッチングをとる。そして、中間言語文構成手段186は、文の「every vertex」の文字列が、パターン「every-*」にマッチする、と判断する。そして、中間言語文構成手段186は、マッチフラグに「ON」を代入する。
次に、中間言語文構成手段186は、3番目の原言語文関数情報が有する原言語関数情報「every-_([N]);」と、文とマッチした箇所の情報(文字列)「every vertex」を用いて、原言語型情報「N2:every-_([N:vertex]);」を構成する。なお、中間言語文構成手段186は、原言語関数情報「every-_([N]);」に対応する種類「N」を取得し、かつ、2番目の「N」の出現を検知し、「N2」を構成する。そして、中間言語文構成手段186は、「every-_([N:vertex]);」に「N2」を付加して、原言語型情報「N2:every-_([N:vertex]);」を得る。
そして、中間言語文構成手段186は、構成した原言語型情報「N2:every-_([N:vertex]);」を、バッファに、少なくとも一時蓄積する。
次に、中間言語文構成手段186は、文「If S1 and every vertex has even degree, then G has an Euler cycle.」を変形し、「If S1 and N2 has even degree, then G has
an Euler cycle.」を得る。
次に、原言語関数識別子取得手段181は、4番目の原言語文関数情報を、図4の原言語文関数辞書から読み出す。
次に、中間言語文構成手段186は、文のタイプが存在しないので、4番目の原言語文関数情報が有する原言語関数識別子「even-_」の引数挿入情報「_」の箇所を任意の文字列がマッチする符号「*」に変換し、「even-*」を得る。
次に、中間言語文構成手段186は、処理対象の原言語関数識別子が変化フラグ「@」を有しないと、判断する。そして、中間言語文構成手段186は、文字列のパターン「even-*」を一つ取得する。
次に、中間言語文構成手段186は、パターン「even-*」と、変形後の文「If S1 and N2 has even degree, then G has an Euler cycle.」とのマッチングをとる。そして、中間言語文構成手段186は、文の「even degree」の文字列が、パターン「even-*」にマッチする、と判断する。そして、中間言語文構成手段186は、マッチフラグに「ON」を代入する。
次に、中間言語文構成手段186は、4番目の原言語文関数情報が有する原言語関数情報「even-_([N]);」と、文とマッチした箇所の情報(文字列)「even degree」を用いて、原言語型情報「N3:even-_([N:degree]);」を構成する。なお、中間言語文構成手段186は、原言語関数情報「even-_([N]);」に対応する種類「N」を取得し、かつ、3番目の「N」の出現を検知し、「N3」を構成する。そして、中間言語文構成手段186は、「even-_([N:degree]);」に「N3」を付加して、原言語型情報「N3:even-_([N:degree]);」を得る。
そして、中間言語文構成手段186は、構成した原言語型情報「N3:even-_([N:degree]);」を、バッファに、少なくとも一時蓄積する。
次に、中間言語文構成手段186は、文「If S1 and N2 has even degree, then G has
an Euler cycle.」を変形し、「If S1 and N2 has N3, then G has an Euler cycle.」を得る。
次に、原言語関数識別子取得手段181は、5番目の原言語文関数情報を、図4の原言語文関数辞書から読み出す。
次に、中間言語文構成手段186は、文のタイプが存在しないので、5番目の原言語文関数情報が有する原言語関数識別子「_-@have:a1-_」の引数挿入情報「_」の箇所を任意の文字列がマッチする符号「*」に変換し、「*-@have:a1*」を得る。
次に、中間言語文構成手段186は、処理対象の原言語関数識別子が変化フラグ「@」を有すると、判断する。
次に、変形語句取得手段183は、変化フラグ「@」が付された語句「have」に対する変化のルールを読み出し、当該ルールを適用し、変形語句を取得する。ここで、変化のルールは「a1」が三人称単数であり、時制が現在の場合は「has」に変形されると言うルール、「a1」が三人称以外であり、時制が現在の場合は「have」のままであると言うルール、時制が過去の場合は「had」に変形されると言うルール等である。そして、変形語句取得手段183は、「a1」が三人称単数であり、時制が現在であると認識し、語句「have」を「has」に変形する。
次に、中間言語文構成手段186は、文字列のパターン「*-has-*」を取得する。
次に、中間言語文構成手段186は、パターン「*-has-*」と、文「If S1 and N2 has N3, then G has an Euler cycle.」とのマッチングをとる。
そして、中間言語文構成手段186は、2番目のパターン「*-has-*」と、文「If S1 and N2 has N3, then G has an Euler cycle.」とはマッチする、と判断する。中間言語文構成手段186は、パターン「*-has-*」と文を構成する文字列「N2 has N3」がマッチするので、このパターンと文とがマッチする、と判断する。そして、中間言語文構成手段186は、マッチフラグに「ON」を代入する。
次に、中間言語文構成手段186は、5番目の原言語文関数情報が有する原言語関数情報「_-@have:a1-_([agent],[object]);」と、文とマッチした箇所の情報(文字列)「N2 has N3」を用いて、原言語型情報「S2:_-@have:a1-_([object:N2],[object:N3]);」を構成する。なお、中間言語文構成手段186は、原言語関数情報「_-@have:a1-_([object],[object]);」に対応する種類「S」を取得し、かつ、2番目の「S」の出現を検知し、「S2」を構成する。そして、中間言語文構成手段186は、「_-@have:a1-_([object:N2],[object:N3]);」に「S2」を付加して、原言語型情報「S2:_-@have:a1-_([object:N2],[object:N3]);」を得る。
そして、中間言語文構成手段186は、構成した原言語型情報「S2:_-@have:a1-_([object:N2],[object:N3]);」を、バッファに、少なくとも一時蓄積する。
また、中間言語文構成手段186は、パターン「*-has-*」と、文「If S1 and N2 has N3, then G has an Euler cycle.」を構成する文字列「G has an Euler cycle」がマッチする、と判断する。
次に、中間言語文構成手段186は、5番目の原言語文関数情報が有する原言語関数情報「_-@have:a1-_([agent],[object]);」と、文とマッチした箇所の情報(文字列)「G has an Euler cycle」を用いて、原言語型情報「S3:_-@have:a1-_([object:G],[object:Euler cycle]);」を構成する。なお、中間言語文構成手段186は、原言語関数情報「_-@have:a1-_([object],[object]);」に対応する種類「S」を取得し、かつ、3番目の「S」の出現を検知し、「S3」を構成する。そして、中間言語文構成手段186は、「_-@have:a1-_([object:G],[object:Euler cycle]);」に「S3」を付加して、原言語型情報「S3:_-@have:a1-_([object:G],[object:Euler cycle]);」を得る。このように、一の原言語関数情報が複数の箇所にマッチする場合もあり得る。
そして、中間言語文構成手段186は、構成した原言語型情報「S3:_-@have:a1-_([object:G],[object:Euler cycle]);」を、バッファに、少なくとも一時蓄積する。
次に、中間言語文構成手段186は、処理対象の文「If S1 and N2 has N3, then G has an Euler cycle.」を変形し、「If S1 and S2, then S3.」を得る。
次に、原言語関数識別子取得手段181は、6番目の原言語文関数情報を、図4の原言語文関数辞書から読み出す。
次に、中間言語文構成手段186は、文のタイプが存在しないので、6番目の原言語文関数情報が有する原言語関数識別子「_-and-_」の引数挿入情報「_」の箇所を任意の文字列がマッチする符号「*」に変換し、「*-and-*」を得る。
次に、中間言語文構成手段186は、処理対象の原言語関数識別子が変化フラグ「@」を有しないと、判断する。そして、中間言語文構成手段186は、文字列のパターン「*-and-*」を一つ取得する。
次に、中間言語文構成手段186は、パターン「*-and-*」と、変形後の文「If S1 and
S2, then S3.」とのマッチングをとる。そして、中間言語文構成手段186は、文の「S1 and S2」の文字列が、パターン「*-and-*」にマッチする、と判断する。そして、中間言語文構成手段186は、マッチフラグに「ON」を代入する。
次に、中間言語文構成手段186は、6番目の原言語文関数情報が有する原言語関数情報「_-and-_([S],[S]);」と、文とマッチした箇所の情報(文字列)「S1 and S2」を用いて、原言語型情報「S4:_-and-_([S:S1],[S:S2]);」を構成する。なお、中間言語文構成手段186は、原言語関数情報「_-and-_([S],[S]);」に対応する種類「S」を取得し、かつ、4番目の「S」の出現を検知し、「S4」を構成する。そして、中間言語文構成手段186は、「_-and-_([S:S1],[S:S2]);」に「S4」を付加して、原言語型情報「S4:_-and-_([S:S1],[S:S2]);」を得る。
そして、中間言語文構成手段186は、構成した原言語型情報「S4:_-and-_([S:S1],[S:S2]);」を、バッファに、少なくとも一時蓄積する。
次に、中間言語文構成手段186は、文「If S1 and S2, then S3.」を変形し、「If S4, then S3.」を得る。
次に、原言語関数識別子取得手段181は、7番目の原言語文関数情報を、図4の原言語文関数辞書から読み出す。
次に、中間言語文構成手段186は、文のタイプが存在しないので、7番目の原言語文関数情報が有する原言語関数識別子「If-_-,then-_」の引数挿入情報「_」の箇所を任意の文字列がマッチする符号「*」に変換し、「If-*-,then-*」を得る。
次に、中間言語文構成手段186は、処理対象の原言語関数識別子が変化フラグ「@」を有しないと、判断する。そして、中間言語文構成手段186は、文字列のパターン「If-*-,then-*」を一つ取得する。
次に、中間言語文構成手段186は、パターン「If-*-,then-*」と、変形後の文「If S4, then S3.」とのマッチングをとる。そして、中間言語文構成手段186は、文の「If S4, then S3」の文字列が、パターン「If-*-,then-*」にマッチする、と判断する。そして、中間言語文構成手段186は、マッチフラグに「ON」を代入する。
次に、中間言語文構成手段186は、7番目の原言語文関数情報が有する原言語関数情報「If-_-,then-_([S],[S]);」と、文とマッチした箇所の情報(文字列)「If S4, then S3」を用いて、原言語型情報「S5:If-_-,then-_([S:S4],[S:S3]);」を構成する。なお、中間言語文構成手段186は、原言語関数情報「If-_-,then-_([S],[S]);」に対応する種類「S」を取得し、かつ、5番目の「S」の出現を検知し、「S5」を構成する。そして、中間言語文構成手段186は、「If-_-,then-_([S:S4],[S:S3]);」に「S5」を付加して、原言語型情報「S5:If-_-,then-_([S:S4],[S:S3]);」を得る。
そして、中間言語文構成手段186は、構成した原言語型情報「S5:If-_-,then-_([S:S4],[S:S3]);」を、バッファに、少なくとも一時蓄積する。
次に、中間言語文構成手段186は、文「If S4, then S3」を変形し、「S5」を得る。ここで、入力された文が、一つの原言語型情報の識別子に置き換えられたので、原言語型情報への変換処理を終了する。つまり、入力された一文が、一つの原言語型情報の識別子に置き換えられるまで、上記の置き換え処理を繰り返す。
そして、中間言語文構成手段186は、図6に示す8つの原言語型情報をバッファに格納した。
次に、上記の8つの原言語型情報を非言語情報識別子と、語句識別子に変換する。つまり、中間言語文構成手段186は、図6に示すバッファ内の情報から、「ID=1」の原言語型情報「N1:a-*connected-_([N: graph]);」を読み出す。
次に、中間言語文構成手段186は、1番目の原言語型情報の原言語関数識別子「a-*connected-_」に対応する言語非依存の識別子である非言語情報識別子「1002002」を、図4の原言語文関数辞書12から取得し、原言語関数識別子「a-*connected-_」を非言語情報識別子「1002002」に置き換え、「N1:1002002([N:graph]);」を得る。
次に、中間言語文構成手段186は、1番目の原言語型情報の引数[N:graph]を取得する。
次に、語句識別子取得手段185は、引数である語句「graph」をキーとして、図6の原言語語句辞書13を検索し、語句識別子「w001」を取得する。
次に、中間言語文構成手段186は、取得された語句識別子「w001」を、1番目の原言語型情報の引数の箇所に挿入し、「N1:1002002([N:w001]);」を得る。
同様に、図6に示すバッファ内の2番目以降の原言語型情報を処理し、8つの中間言語文(図7参照)を得る。中間言語文は、非言語情報識別子と語句識別子を有する。また、非言語情報識別子で識別され得る関数の引数は、語句識別子や中間言語文の識別子や未知語である。中間言語文の識別子とは、図7の「N1」「S1」「N2」などである。未知語とは、原言語語句辞書13に存在しない語句であり、ここでは「G」である。未知語の場合、語句識別子には置き換えられず、そのまま表記される。
次に、出力部19は、図7の8つの中間言語文を出力する。ここでの出力は、例えば、予め決められたファイルへの蓄積である。
(具体例2)
図8は、日本語の原言語文型辞書11を示す。図8の原言語文型辞書は、原言語文関数辞書は、「ID」「原言語文関数情報」を有するレコードを1以上格納している。なお、引数種類情報[a-object]は、引数が主体であることを示す。図8において「-」で囲まれた文字列は、変化することを示す。例えば、「持-つ-」の「つ」は、活用により変化することを示す。
また、図9は、日本語の原言語語句辞書13の例を示す図である。また、図10は、日本語の原言語変化語句辞書の例を示す図である。原言語変化語句辞書は、例えば、動詞の活用や形容詞の活用や形容動詞の活用に関する情報を保持している。
かかる状況において、文「もし、Gが接続グラフで、かつすべての節点が偶数次数を持っていれば、Gはオイラー回路を持つ。」が入力され、受付部16が当該文を受け付けた、とする。
次に、原言語関数識別子取得手段181は、1番目の原言語文関数情報を、図8の原言語文関数辞書から読み出す。
次に、中間言語文構成手段186は、文のタイプが存在しないので、1番目の原言語文関数情報が有する原言語関数識別子「接続_」の引数挿入情報「_」の箇所を任意の文字列がマッチする符号「*」に変換し、「接続*」を得る。
次に、中間言語文構成手段186は、処理対象の原言語関数識別子「接続*」が1以上の変化フラグを有しない、と判断する。そして、中間言語文構成手段186は、文字列のパターン「接続*」を一つ取得する。
次に、中間言語文構成手段186は、パターン「接続*」と、文「もし、Gが接続グラフで、かつすべての節点が偶数次数を持っていれば、Gはオイラー回路を持つ。」とのマッチングをとる。そして、中間言語文構成手段186は、文の「接続グラフ」の文字列が、パターン「接続*」にマッチする、と判断する。そして、中間言語文構成手段186は、マッチフラグに「ON」を代入する。
次に、中間言語文構成手段186は、1番目の原言語文関数情報が有する原言語関数情報「接続-_([N]);」と、文とマッチした箇所の情報(文字列)「接続グラフ」を用いて、原言語型情報「N1:接続_([N:グラフ]);」を構成する。なお、中間言語文構成手段186は、原言語関数情報「接続_([N]);」に対応する種類「N」を取得し、かつ、1番目の「N」の出現を検知し、「N1」を構成する。そして、中間言語文構成手段186は、「接続_([N:グラフ]);」に「N1」を付加して、原言語型情報「N1:接続_([N:グラフ]);」を得る。
そして、中間言語文構成手段186は、構成した原言語型情報「N1:接続_([N:グラフ]);」を、バッファに、少なくとも一時蓄積する。
次に、中間言語文構成手段186は、受付部16が受け付けた文「もし、Gが接続グラフで、かつすべての節点が偶数次数を持っていれば、Gはオイラー回路を持つ。」を変形し、「もし、GがN1で、かつすべての節点が偶数次数を持っていれば、Gはオイラー回路を持つ。」を得る。
次に、原言語関数識別子取得手段181は、2番目の原言語文関数情報を、図8の原言語文関数辞書から読み出す。
次に、中間言語文構成手段186は、文のタイプが存在しないので、2番目の原言語文関数情報が有する原言語関数識別子「_が_で-ある-」の引数挿入情報「_」の箇所を任意の文字列がマッチする符号「*」に変換し、「*が*で-ある-」を得る。
次に、中間言語文構成手段186は、処理対象の原言語関数識別子が変化フラグ「-」「-」を有すると、判断する。
次に、変形語句取得手段183は、変化フラググ「-」「-」で囲まれた語句「ある」をキーとして、図10の原言語変化語句辞書を検索し、1以上の変形語句「 (空),あり,ある,あれ,あろ,あっ」を取得する。
次に、中間言語文構成手段186は、処理対象の原言語関数識別子「_が_で-ある-」から、文字列のパターンを6つ取得する。ここで取得した文字列のパターンは、語句「ある」と変形語句「 (空),あり,ある,あれ,あろ,あっ」のぞれぞれを、順に、「*が*で-ある-」の位置に配置した文字列のパターンである。つまり、6つの文字列のパターンは「*が*で」「*が*であり」「*が*である」「*が*であれ」「*が*であろ」「*が*であっ」である。
次に、中間言語文構成手段186は、1番目のパターン「*が*で」と、文「もし、GがN1で、かつすべての節点が偶数次数を持っていれば、Gはオイラー回路を持つ。」とのマッチングをとる。なお、ここでの文は、変形後の文である。そして、中間言語文構成手段186は、1番目のパターン「*が*で」と文とはマッチする、と判断する。つまり、中間言語文構成手段186は、1番目のパターン「*が*で」と文を構成する文字列「GがN1で」がマッチするので、1番目のパターンと文とがマッチする、と判断する。そして、中間言語文構成手段186は、マッチフラグに「ON」を代入する。
次に、中間言語文構成手段186は、2番目の原言語文関数情報が有する原言語関数情報「_が_で-ある-([a-object],[object]);」と、文とマッチした箇所の情報(文字列)「GがN1で」を用いて、原言語型情報「S1:_が_で-ある-([a-object:G],[object:N1]);」を構成する。なお、中間言語文構成手段186は、原言語関数情報「_が_で-ある-([a-object],[object]);」に対応する種類「S」を取得し、かつ、1番目の「S」の出現を検知し、「S1」を構成する。そして、中間言語文構成手段186は、「_が_で-ある-([a-object:G],[object:N1]);」に「S1」を付加して、原言語型情報「S1:_が_で-ある-([a-object:G],[object:N1]);」を得る。
そして、中間言語文構成手段186は、構成した原言語型情報「S1:_が_で-ある-([a-object:G],[object:N1]);」を、バッファに、少なくとも一時蓄積する。
次に、中間言語文構成手段186は、処理対象の文「もし、GがN1で、かつすべての節点が偶数次数を持っていれば、Gはオイラー回路を持つ。」を変形し、「もし、S1、かつすべての節点が偶数次数を持っていれば、Gはオイラー回路を持つ。」を得る。
次に、原言語関数識別子取得手段181は、3番目の原言語文関数情報を、図9の原言語文関数辞書から読み出す。
次に、中間言語文構成手段186は、文のタイプが存在しないので、3番目の原言語文関数情報が有する原言語関数識別子「すべての_」の引数挿入情報「_」の箇所を任意の文字列がマッチする符号「*」に変換し、「すべての*」を得る。
次に、中間言語文構成手段186は、処理対象の原言語関数識別子が変化フラグ「@」を有しないと、判断する。そして、中間言語文構成手段186は、文字列のパターン「すべての*」を一つ取得する。
次に、中間言語文構成手段186は、パターン「すべての*」と、変形後の文「もし、S1、かつすべての節点が偶数次数を持っていれば、Gはオイラー回路を持つ。」とのマッチングをとる。そして、中間言語文構成手段186は、文の「すべての節点」の文字列が、パターン「すべての*」にマッチする、と判断する。そして、中間言語文構成手段186は、マッチフラグに「ON」を代入する。
次に、中間言語文構成手段186は、3番目の原言語文関数情報が有する原言語関数情報「すべての_([N]);」と、文とマッチした箇所の情報(文字列)「すべての節点」を用いて、原言語型情報「N2:すべての_([N:節点]);」を構成する。なお、中間言語文構成手段186は、原言語関数情報「すべての_([N]);」に対応する種類「N」を取得し、かつ、2番目の「N」の出現を検知し、「N2」を構成する。そして、中間言語文構成手段186は、「すべての_([N:節点]);」に「N2」を付加して、原言語型情報「N2:すべての_([N:節点]);」を得る。
そして、中間言語文構成手段186は、構成した原言語型情報「N2:すべての_([N:節点]);」を、バッファに、少なくとも一時蓄積する。
次に、中間言語文構成手段186は、文「もし、S1、かつすべての節点が偶数次数を持っていれば、Gはオイラー回路を持つ。」を変形し、「もし、S1、かつN2が偶数次数を持っていれば、Gはオイラー回路を持つ。」を得る。
次に、原言語関数識別子取得手段181は、4番目の原言語文関数情報を、図8の原言語文関数辞書から読み出す。
次に、中間言語文構成手段186は、文のタイプが存在しないので、4番目の原言語文関数情報が有する原言語関数識別子「偶数_」の引数挿入情報「_」の箇所を任意の文字列がマッチする符号「*」に変換し、「偶数*」を得る。
次に、中間言語文構成手段186は、処理対象の原言語関数識別子が変化フラグ「@」を有しないと、判断する。そして、中間言語文構成手段186は、文字列のパターン「偶数*」を一つ取得する。
次に、中間言語文構成手段186は、パターン「偶数*」と、変形後の文「もし、S1、かつすべての節点が偶数次数を持っていれば、Gはオイラー回路を持つ。」とのマッチングをとる。そして、中間言語文構成手段186は、文の「偶数次数」の文字列が、パターン「偶数*」にマッチする、と判断する。そして、中間言語文構成手段186は、マッチフラグに「ON」を代入する。
次に、中間言語文構成手段186は、4番目の原言語文関数情報が有する原言語関数情報「偶数_([N]);」と、文とマッチした箇所の情報(文字列)「偶数次数」を用いて、原言語型情報「N3:偶数_([N:次数]);」を構成する。なお、中間言語文構成手段186は、原言語関数情報「偶数_([N]);」に対応する種類「N」を取得し、かつ、3番目の「N」の出現を検知し、「N3」を構成する。そして、中間言語文構成手段186は、「偶数_([N:次数]);」に「N3」を付加して、原言語型情報「N3:偶数_([N:次数]);」を得る。
そして、中間言語文構成手段186は、構成した原言語型情報「N3:偶数_([N:次数]);」を、バッファに、少なくとも一時蓄積する。
次に、中間言語文構成手段186は、文「もし、S1、かつN2が偶数次数を持っていれば、Gはオイラー回路を持つ。」を変形し、「もし、S1、かつN2がN3を持っていれば、Gはオイラー回路を持つ。」を得る。
次に、原言語関数識別子取得手段181は、5番目の原言語文関数情報を、図8の原言語文関数辞書から読み出す。
次に、中間言語文構成手段186は、文のタイプが存在しないので、5番目の原言語文関数情報が有する原言語関数識別子「_が_を持-つ-」の引数挿入情報「_」の箇所を任意の文字列がマッチする符号「*」に変換し、「*が*を持-つ-」を得る。
次に、中間言語文構成手段186は、処理対象の原言語関数識別子が変化フラグ「-」「-」を有すると、判断する。
次に、変形語句取得手段183は、変化フラグ「-」「-」で囲まれた語「つ」を語尾に有する語句「持つ」をキーとして、図10の原言語変化語句辞書を検索し、1以上の変形語句「持つ」「持ち」「持て」「持っ」「持た」を取得する。
次に、中間言語文構成手段186は、処理対象の原言語関数識別子「*が*を持-つ-」から、文字列のパターンを5つ取得する。ここで取得した文字列のパターンは、語句「持つ」「持ち」「持て」「持っ」「持た」のぞれぞれを、順に、「*が*を持-つ-」の位置に配置した文字列のパターンである。つまり、5つの文字列のパターンは「*が*を持つ」「*が*を持ち」「*が*を持て」「*が*を持っ」「*が*を持た」である。
次に、中間言語文構成手段186は、上記の5つのパターンと、文「もし、S1、かつN2がN3を持っていれば、Gはオイラー回路を持つ。」とのマッチングをとる。なお、ここでの文は、変形後の文である。そして、中間言語文構成手段186は、4番目のパターン「*が*を持っ」と文とはマッチする、と判断する。中間言語文構成手段186は、4番目のパターン「*が*を持っ」と文を構成する文字列「N2がN3を持っ」がマッチするので、4番目のパターンと文とがマッチする、と判断する。そして、中間言語文構成手段186は、マッチフラグに「ON」を代入する。
次に、中間言語文構成手段186は、5番目の原言語文関数情報が有する原言語関数情報「_が_を持-つ-([agent],[object]);」と、文とマッチした箇所の情報(文字列)「N2がN3を持っ」を用いて、原言語型情報「S2:_が_を持-つ-([object:N2],[object:N3]);」を構成する。なお、中間言語文構成手段186は、原言語関数情報「_が_を持-つ-([agent],[object]);」に対応する種類「S」を取得し、かつ、2番目の「S」の出現を検知し、「S2」を構成する。そして、中間言語文構成手段186は、「_が_を持-つ-([object:N2],[object:N3]);」に「S2」を付加して、原言語型情報「S2:_が_を持-つ-([object:N2],[object:N3]);」を得る。
そして、中間言語文構成手段186は、構成した原言語型情報「S2:_が_を持-つ-([object:N2],[object:N3]);」を、バッファに、少なくとも一時蓄積する。
また、中間言語文構成手段186は、1番目のパターン「*が*を持つ」と、文「もし、S1、かつN2がN3を持っていれば、Gはオイラー回路を持つ。」を構成する文字列「Gはオイラー回路を持つ」がマッチする、と判断する。
次に、中間言語文構成手段186は、5番目の原言語文関数情報が有する原言語関数情報「_が_を持-つ-([agent],[object]);」と、文とマッチした箇所の情報(文字列)「Gはオイラー回路を持つ」を用いて、原言語型情報「S3:_が_を持-つ-([object:G],[object:オイラー回路]);」を構成する。なお、中間言語文構成手段186は、原言語関数情報「_が_を持-つ-([object],[object]);」に対応する種類「S」を取得し、かつ、3番目の「S」の出現を検知し、「S3」を構成する。そして、中間言語文構成手段186は、「_が_を持-つ-([object:G],[object:オイラー回路]);」に「S3」を付加して、原言語型情報「S3:_が_を持-つ-([object:G],[object:オイラー回路]);」を得る。このように、一の原言語関数情報が複数の箇所にマッチする場合もあり得る。
そして、中間言語文構成手段186は、構成した原言語型情報「S3:_が_を持-つ-([object:G],[object:オイラー回路]);」を、バッファに、少なくとも一時蓄積する。
次に、中間言語文構成手段186は、処理対象の文「もし、S1、かつN2がN3を持っていれば、Gはオイラー回路を持つ。」を変形し、「もし、S1、かつS2ていれば、S3。」を得る。
次に、原言語関数識別子取得手段181は、6番目の原言語文関数情報を、図8の原言語文関数辞書から読み出す。
次に、中間言語文構成手段186は、文のタイプが存在しないので、6番目の原言語文関数情報が有する原言語関数識別子「_@S:S1、かつ_」の引数挿入情報「_」の箇所を任意の文字列がマッチする符号「*」に変換し、「*@S:S1、かつ*」を得る。
次に、中間言語文構成手段186は、処理対象の原言語関数識別子が変化フラグ「-」「-」を有しないと、判断する。そして、中間言語文構成手段186は、文字列のパターン「*@S:S1、かつ*」を一つ取得する。なお、「*@S:S1」は第一の引数が変化し得ることを示す。
次に、中間言語文構成手段186は、パターン「*@S:S1、かつ*」と、変形後の文「もし、S1、かつS2ていれば、S3。」とのマッチングをとる。そして、中間言語文構成手段186は、文の「S1、かつS2」の文字列が、パターン「*@S:S1、かつ*」にマッチする、と判断する。そして、中間言語文構成手段186は、マッチフラグに「ON」を代入する。
次に、中間言語文構成手段186は、6番目の原言語文関数情報が有する原言語関数情報「_@S:S1、かつ_([S],[S]);」と、文とマッチした箇所の情報(文字列)「S1、かつS2」を用いて、原言語型情報「S4:_@S:S1、かつ_([S:S1],[S:S2]);」を構成する。なお、中間言語文構成手段186は、原言語関数情報「_@S:S1、かつ_([S],[S]);」に対応する種類「S」を取得し、かつ、4番目の「S」の出現を検知し、「S4」を構成する。そして、中間言語文構成手段186は、「_@S:S1、かつ_([S:S1],[S:S2]);」に「S4」を付加して、原言語型情報「S4:_@S:S1、かつ_([S:S1],[S:S2]);」を得る。
そして、中間言語文構成手段186は、構成した原言語型情報「S4:_@S:S1、かつ_([S:S1],[S:S2]);」を、バッファに、少なくとも一時蓄積する。
次に、中間言語文構成手段186は、文「もし、S1、かつS2ていれば、S3。」を変形し、「もし、S4ていれば、S3。」を得る。
次に、原言語関数識別子取得手段181は、7番目の原言語文関数情報を、図8の原言語文関数辞書から読み出す。
次に、中間言語文構成手段186は、文のタイプが存在しないので、7番目の原言語文関数情報が有する原言語関数識別子「もし、@S:S1ていれば、@S:S2である」の引数挿入情報「_」の箇所が存在しないので、そのまま「もし、@S:S1ていれば、@S:S2である」を得る。
次に、中間言語文構成手段186は、処理対象の原言語関数識別子が変化フラグ「-」「-」を有しないと、判断する。そして、中間言語文構成手段186は、文字列のパターン「If-*-,then-*」を一つ取得する。
次に、中間言語文構成手段186は、パターン「もし、@S:S1ていれば、@S:S2である」と、変形後の文「もし、S4ていれば、S3。」とのマッチングをとる。そして、中間言語文構成手段186は、文の「もし、S4ていれば、S3」の文字列が、パターン「もし、@S:S1ていれば、@S:S2である」にマッチする、と判断する。なお、「@S:S2である」は、「@」により、変化し得ることを示し、かかる場合、「@S:S2である」は「S2」(引数だけ)にもなり得ることを示す。そして、中間言語文構成手段186は、マッチフラグに「ON」を代入する。
次に、中間言語文構成手段186は、7番目の原言語文関数情報が有する原言語関数情報「もし、@S:S1ていれば、@S:S2である([S],[S]);」と、文とマッチした箇所の情報(文字列)「もし、S4ていれば、S3」を用いて、原言語型情報「S5:もし、@S:S1ていれば、@S:S2である([S:S4],[S:S3]);」を構成する。なお、中間言語文構成手段186は、原言語関数情報「もし、@S:S1ていれば、@S:S2である([S],[S]);」に対応する種類「S」を取得し、かつ、5番目の「S」の出現を検知し、「S5」を構成する。そして、中間言語文構成手段186は、「もし、@S:S1ていれば、@S:S2である([S:S4],[S:S3]);」に「S5」を付加して、原言語型情報「S5:もし、@S:S1ていれば、@S:S2である([S:S4],[S:S3]);」を得る。
そして、中間言語文構成手段186は、構成した原言語型情報「S5:もし、@S:S1ていれば、@S:S2である([S:S4],[S:S3]);」を、バッファに、少なくとも一時蓄積する。
次に、中間言語文構成手段186は、文「もし、S4ていれば、S3。」を変形し、「S5。」を得る。ここで、入力された文が、一つの原言語型情報の識別子に置き換えられたので、原言語型情報への変換処理を終了する。
そして、中間言語文構成手段186は、図11に示す8つの原言語型情報をバッファに格納した。
次に、上記の8つの原言語型情報を非言語情報識別子と、語句識別子に変換する。つまり、中間言語文構成手段186は、図11に示すバッファ内の情報から、「ID=1」の原言語型情報「N1:接続_([N:グラフ]);」を読み出す。
次に、中間言語文構成手段186は、1番目の原言語型情報の原言語関数識別子「接続_」に対応する言語非依存の識別子である非言語情報識別子「1002002」を、図8の原言語文関数辞書12から取得し、原言語関数識別子「接続_」を非言語情報識別子「1002002」に置き換え、「N1:1002002([N: グラフ]);」を得る。
次に、中間言語文構成手段186は、1番目の原言語型情報の引数[N:グラフ]を取得する。
次に、語句識別子取得手段185は、引数である語句「グラフ」をキーとして、図9の原言語語句辞書13を検索し、語句識別子「w001」を取得する。
次に、中間言語文構成手段186は、取得された語句識別子「w001」を、1番目の原言語型情報の引数の箇所に挿入し、「N1:1002002([N:w001]);」を得る。
同様に、図11に示すバッファ内の2番目以降の原言語型情報を処理し、8つの中間言語文(図7参照)を得る。
次に、出力部19は、図7の8つの中間言語文を出力する。ここでの出力は、例えば、予め決められたファイルへの蓄積である。
以上、本実施の形態によれば、自然言語文をコンピュータ処理するための中間言語に、精度高く変換できる。
また、本実施の形態によれば、構文(syntax)と意味(semantics)との両方を含む原言語文型情報を用いて、自然言語文をコンピュータ処理するための中間言語に変換するので、極めて精度高く、自然言語文を中間言語に変換できる。なお、構文とは原言語文型情報が有するパターンであり、意味とは原言語文型情報が有する語句などである。つまり、本実施の形態によれば、語句を内部に有する構文を用いて、自然言語文とマッチングを取ることにより、極めて精度高く、自然言語文を中間言語に変換できる。
なお、本実施の形態で説明した中間言語文は、関係型中間言語(relational interlingua)により表現される文である。関係型中間言語は、文の構文構造と意味構造の両方を合わせた情報を、関数の形式で表現する言語である。したがって、中間言語文は、構文解析と意味解析が同時に曖昧性なく、文を解析した結果である、と言える。したがって、非言語情報を関係の要素に加えることにより、実施の形態2で述べるように、目的文(翻訳文)の生成が一意にできる。
なお、本実施の形態において、自然言語文変換装置1は、一の文を処理したが、2以上の文を連続して処理しても良いことは言うまでもない。かかることは他の実施の形態においても同様である。
また、本実施の形態における処理は、ソフトウェアで実現しても良い。そして、このソフトウェアをソフトウェアダウンロード等により配布しても良い。また、このソフトウェアをCD−ROMなどの記録媒体に記録して流布しても良い。なお、このことは、本明細書における他の実施の形態においても該当する。なお、本実施の形態における自然言語文変換装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、記憶媒体に、原言語の文字列を含む原言語関数識別子と当該原言語関数識別子で識別される関数の引数を示す情報である1以上の引数情報とを有する原言語関数情報と、前記原言語関数情報に対応する情報であり、言語非依存の識別子である非言語情報識別子とを対に有する原言語文関数情報を1以上有する原言語文関数辞書と、原言語の語句と、当該語句を識別する語句識別子とを対に有する原言語語句情報を1以上有する原言語語句辞書とを格納しており、コンピュータを、原言語の文を受け付ける受付部と、前記受付部が受け付けた文と、前記原言語文関数辞書に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子と対になる1以上の非言語情報識別子を取得し、かつ、前記原言語語句辞書に格納されている1以上の原言語の語句とのマッチングをとり、マッチする1以上の語句識別子を取得し、当該取得した1以上の非言語情報識別子と1以上の語句識別子とを用いて、関数の構造を有する1以上の中間言語文を構成する中間言語文作成部と、前記中間言語文作成部が構成した1以上の中間言語文を出力する出力部として機能させるためのプログラムである。
また、上記プログラムにおいて、コンピュータを、前記中間言語文作成部は、前記受付部が受け付けた文と、前記原言語文関数辞書に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子を取得する原言語関数識別子取得手段と、前記受付部が受け付けた文に含まれる1以上の語句であり、前記原言語関数識別子取得手段が取得した原言語関数識別子で識別される関数の引数に対応する1以上の語句と、前記原言語語句辞書に格納されている1以上の原言語の語句とのマッチングをとり、マッチする1以上の語句を取得する語句取得手段と、前記原言語関数識別子取得手段が取得した1以上の原言語関数識別子のそれぞれに対応する1以上の非言語情報識別子を取得する非言語情報識別子取得手段と、前記語句取得手段が取得した1以上の語句のそれぞれに対応する1以上の語句識別子を取得する語句識別子取得手段と、前記非言語情報識別子取得手段が取得した1以上の非言語情報識別子と前記語句識別子取得手段が取得した1以上の語句識別子とを用いて、関数の構造を有する1以上の中間言語文を構成する中間言語文構成手段とを具備するものとして機能させるためのプログラム、であることは好適である。
また、上記プログラムにおいて、記録媒体に、原言語の文字列を含む原言語関数識別子と当該原言語関数識別子で識別される関数の引数を示す情報である1以上の語句とを有する原言語型情報と、前記原言語型情報に対応する情報であり、言語非依存の識別子である非言語情報識別子とを対に有する原言語文型情報を1以上有する原言語文型辞書をさらに格納し、前記中間言語文作成部を、前記受付部が受け付けた文と、前記原言語文関数辞書に格納されている1以上の原言語関数識別子、および前記原言語文型辞書に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子と対になる1以上の非言語情報識別子を取得し、かつ、前記原言語語句辞書に格納されている1以上の原言語の語句とのマッチングをとり、マッチする1以上の語句識別子を取得し、当該取得した1以上の非言語情報識別子と1以上の語句識別子とを用いて、関数の構造を有する1以上の中間言語文を構成するものとして、コンピュータを、機能させるためのプログラム、であることは好適である。
また、上記プログラムにおいて、記録媒体に、原言語関数識別子と1以上の語句との共起を示す情報である共起情報を1以上有する原言語共起辞書をさらに格納し、前記中間言語文作成部は、前記原言語共起辞書に格納されている1以上の共起情報をも用いて、1以上の非言語情報識別子と1以上の語句識別子とを取得し、当該取得した1以上の非言語情報識別子と1以上の語句識別子とを用いて、関数の構造を有する1以上の中間言語文を構成するものとして、コンピュータを機能させるためのプログラム、であることは好適である。
また、上記プログラムにおいて、前記原言語関数識別子は、引数の挿入場所を示す引数挿入情報を有し、前記中間言語文作成部は、当該引数挿入情報を用いて、前記受付部が受け付けた文と、前記原言語文関数辞書に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子と対になる1以上の非言語情報識別子を取得するものとして、コンピュータを機能させるためのプログラム、であることは好適である。
また、上記プログラムにおいて、記憶媒体に、語句の原型および当該語句の変形である1以上の変形語句とを対応付けた変化語句情報を1以上有する原言語変化語句辞書をさらに格納し、原言語関数識別子は、語句が変形する可能性があることを示す変化フラグを有し、前記中間言語文作成部は、前記変化フラグが付与された語句をキーとして、前記原言語変化語句辞書を検索し、1以上の変形語句を取得する変形語句取得手段をさらに具備し、前記中間言語文作成部は、1以上の非言語情報識別子を取得する場合に、前記変形語句取得手段が取得した1以上の変形語句をも用いて、前記受付部が受け付けた文と、前記原言語文関数辞書に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子と対になる1以上の非言語情報識別子を取得するものとして、コンピュータを機能させるためのプログラム、であることは好適である。
また、上記プログラムにおいて、原言語関数識別子は、何らかの語句が挿入され得ることを示す不定語句フラグを有し、前記中間言語文作成部は、1以上の非言語情報識別子を取得する場合に、不定語句フラグをも用いて、前記受付部が受け付けた文と、前記原言語文関数辞書に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子と対になる1以上の非言語情報識別子を取得するものとしてコンピュータを機能させるためのプログラム、であることは好適である。
また、上記プログラムにおいて、前記原言語文関数情報または前記原言語文型情報は、関数または文型のタイプを示す関数タイプを有し、前記受付部は、原言語の文および文のタイプを受け付け、前記中間言語文作成部は、非言語情報識別子を取得する場合に、前記受付部が受け付けたタイプに対応する関数タイプを含む前記原言語文関数情報または前記原言語文型情報の中から、原言語関数識別子を取得し、当該原言語関数識別子と対になる1以上の非言語情報識別子を取得するものとして、コンピュータを機能させるためのプログラム、であることは好適である。
(実施の形態2)
本実施の形態において、自然言語で記載された文を、関数表現の中間言語文に変換する自然言語文変換装置2について説明する。自然言語文変換装置2は、自然言語文変換装置1と比較して、自然言語文をさらに精度高く、かつ高速に中間言語文に変換できる。
図12は、本実施の形態における自然言語文変換装置2のブロック図である。
自然言語文変換装置2は、原言語文型辞書11、原言語文関数辞書12、原言語語句辞書13、原言語共起辞書14、受付部16、関数化部17、中間言語文作成部28、出力部19を備える。
中間言語文作成部28は、最外部関数取得手段281、補語関数取得手段282、非言語情報識別子取得手段283、語句識別子取得手段284、中間言語文構成手段285を具備する。
最外部関数取得手段281は、受付部16が受け付けた文と、原言語文関数辞書12に格納されている1以上の原言語関数識別子とのマッチングをとり、受付部16が受け付けた文の全体を包含する原言語関数識別子である最外部関数を取得する。そして、最外部関数取得手段281は、最外部関数の引数となる前記文の一部分に対して、前記最外部関数が取得できなくなるまで、最外部関数の取得の処理を繰り返す。なお、最外部関数とは、受付部16が受け付けた文または文の一部にマッチする原言語関数識別子のうち、当該文の全体または当該文の一部の全体を包含する原言語関数識別子である。
また、最外部関数取得手段281は、文または文の一部分に対して、マッチングをとる際に、原言語文関数辞書12に格納されている1以上の原言語関数識別子および原言語文型辞書11に格納されている1以上の原言語関数識別子とのマッチングをとっても良い。
また、最外部関数取得手段281は、受付部16が受け付けた文または当該文の一部分が重複する箇所に対して、2以上の最外部関数の候補を取得した場合、文中の最も長い文字列に対応する候補を最外部関数として取得することは好適である。また、最外部関数取得手段281は、引数挿入情報を用いて、受付部16が受け付けた文と、原言語文関数辞書12に格納されている1以上の原言語関数識別子とのマッチングをとることは好適である。また、最外部関数取得手段281は、変化フラグが付与された語句に対して、予め決められたルールを適用して、1以上の変形語句を取得し、当該変形語句をも用いて、受付部16が受け付けた文または文の一部分と、原言語文関数辞書12に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子を取得することは好適である。また、最外部関数取得手段281は、不定語句フラグをも用いて、受付部16が受け付けた文または文の一部分と、原言語文関数辞書12に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子を取得することは好適である。また、最外部関数取得手段281は、受付部16が受け付けたタイプに対応する関数タイプを含む原言語文関数情報または原言語文型情報の中から、原言語関数識別子を取得することは好適である。
また、最外部関数取得手段281は、「関数・用語・ひらがな列先頭1文字索引」(以下、単に索引とも言う。)を用いて、最外部関数を取得することは好適である。索引とは、すべての用語(埋め込み語句)と関数名の不変部分および連続ひらがな列の先頭1文字を索引にしたものである。そして、索引により、効率良く文構造解析を行うことが可能になる。特に、連続ひらがな列索引は、日本語に出現する連続ひらがな列を、関数に分解する方法を示したもので、通常、形態素解析をしたあとで、構文解析を行うために品詞並びのルールを設定するが、本装置ではこれを行わず、出現するあらゆるひらがな列を本装置でいう関数の列に分解する辞書の役目を果たさせることで、従来の形態素解析や構文解析を行わず文構造を明確にすることができるものである。
連続ひらがな列索引(連続ひらがな列辞書とも言う。)の例を図13に示す。連続ひらがな列索引は、「連続ひらがな列」と「分解された関数」とを有するレコードを1以上、格納している。
かかる場合、例えば、「暑くて勉強しにくいので早く寝た。」のような文が受け付けられた、とする。すると、中間言語文作成部28は、「暑」、「くて」、「勉強」、「しにくい」等の上記の文を構成する文字列の索引語で辞書を引く。
そして、中間言語文作成部28は、各文字列に対して、以下のような関数を得る。つまり、中間言語文作成部28は、「「暑」→P=暑-い-([]);、N=「暑さ」」「「くて」→C=@a23:Pくて([P]);」「「勉強」→ 「N=勉強」、「P=「勉強-する-」」「「しにくいので」→ P=@v2:Pにくい([P:P]); S=_ので_([P],[P]);」「「早」→ P=早-い-([]);、N=「早さ」」「「く」→ P=@a23:P([P]);」「「寝」→ P=寝-る-([]);、「N=寝具」、「N=寝台」」を得る。
そして、「くて」と「しにくいので」は連続ひらがな列であるので、最外部関数取得手段281は、連続かな列索引(図13参照)を引く。そして、最外部関数取得手段281は、分解される関数(関数分解の方法)を得る。そして、最外部関数取得手段281は、図14に示すような解析結果を得る。このように、最初に文の一部を解析して持っておく方法で「曖昧性」が防げ、効率が良い解析が可能となる。
また、最外部関数は、目的文全体を包含できるものである。つまり、最外部関数の内部には、未解析は部分が含まれていてもよいが、最外部関数の外に何かが含まれていてはいけない。
補語関数取得手段282は、最外部関数取得手段281が取得した最外部関数の引数であり、文のうちの、最外部関数に置き換えられていない一部分(未解析の部分)に対して、原言語文関数辞書12に格納されている1以上の原言語関数識別子、または原言語語句辞書13に格納されている1以上の原言語の語句とのマッチングをとり、1以上の原言語関数識別子または原言語の1以上の語句を取得する。また、補語関数取得手段282は、原言語文関数辞書12に加えて、原言語文型辞書11とのマッチングをとって、原言語文型辞書11から、原言語関数識別子を取得しても良い。また、補語関数取得手段282は、原言語共起辞書14に格納されている1以上の共起情報をも用いて、1以上の原言語関数識別子と1以上の語句とを取得することは好適である。特に、補語関数取得手段282は、2以上の語句(語句識別子)の候補が存在する場合、1以上の共起情報を用いて、原言語関数識別子と共起しやすい語句を取得することは好適である。共起情報は、原言語関数識別子と語句とが共起する確率や、共起していた頻度などの情報である。補語関数取得手段282は、引数挿入情報を用いて、受付部16が受け付けた文と、原言語文関数辞書12に格納されている1以上の原言語関数識別子とのマッチングをとることは好適である。また、補語関数取得手段282は、変化フラグが付与された語句に対して、予め決められたルールを適用して、1以上の変形語句を取得し、当該変形語句をも用いて、受付部16が受け付けた文と、原言語文関数辞書12に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子を取得することは好適である。また、補語関数取得手段282は、不定語句フラグをも用いて、受付部16が受け付けた文の一部分と、原言語文関数辞書12に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子を取得することは好適である。また、補語関数取得手段282は、受付部16が受け付けたタイプに対応する関数タイプを含む原言語文関数情報または原言語文型情報の中から、原言語関数識別子を取得することは好適である。さらに、補語関数取得手段282は、索引を用いて、原言語関数識別子を取得しても良い。
非言語情報識別子取得手段283は、最外部関数取得手段281または補語関数取得手段282が取得した1以上の原言語関数識別子のそれぞれに対応する1以上の非言語情報識別子を、原言語文関数辞書12から取得する。
語句識別子取得手段284は、補語関数取得手段282が取得した1以上の語句のそれぞれに対応する1以上の語句識別子を、原言語語句辞書13から取得する。
中間言語文構成手段285は、非言語情報識別子取得手段283が取得した1以上の非言語情報識別子と語句識別子取得手段284が取得した1以上の語句識別子とを用いて、関数の構造を有する1以上の中間言語文を構成する。
最外部関数取得手段281、補語関数取得手段282、非言語情報識別子取得手段283、語句識別子取得手段284、および中間言語文構成手段285は、通常、MPUやメモリ等から実現され得る。最外部関数取得手段281等の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
次に、自然言語文変換装置2の動作について、図15のフローチャートを用いて説明する。
(ステップS1501)受付部16は、文、または文と文のタイプを受け付けたか否かを判断する。文等を受け付ければステップS202に行き、文等を受け付けなければステップS201に戻る。なお、受け付けられた文は、図示しない文字列バッファに格納される。
(ステップS1502)中間言語文作成部28は、カウンタiに1を代入する。
(ステップS1503)中間言語文作成部28は、文字列バッファ内に、i番目の文字が存在するか否かを判断する。i番目の文字が存在すればステップS1504に行き、存在しなければステップS1513に行く。
(ステップS1504)最外部関数取得手段281は、文字列バッファ内の文字列のうちの、i番目の文字を取得する。
(ステップS1505)最外部関数取得手段281は、i番目の文字をキーとして、索引を検索する。
(ステップS1506)最外部関数取得手段281は、ステップS1505で検索した索引に対応する1以上の最外部関数の候補を取得する。最外部関数取得手段281は、索引に対応し、文字列バッファ内の文字列に前方一致する文字列を有する1以上の最外部関数の候補を取得する。最外部関数の候補は、原言語関数識別子、または語句である。最外部関数の候補は、原言語関数識別子でも良い。つまり、本ステップで、最外部関数の候補を、原言語関数識別子だけに絞り込んでも良い。
(ステップS1507)最外部関数取得手段281は、ステップS1506で取得した候補のうち、1つ以上の最外部関数となり得るものが存在するか否かを判断する。最外部関数となり得るものが存在すればステップS1508に行き、存在しなければステップS1512に行く。なお、最外部関数となり得るものは、原言語関数識別子であり、解析対象の文の中の文末の文字列を含む(続く文字がない)ものである。
(ステップS1508)最外部関数取得手段281は、ステップS1506で取得した最外部関数の候補、または残っている最外部関数の候補のうち、最も長い最外部関数を取得する。そして、最外部関数取得手段281は、文字列バッファ内の元の文に対して、取得した最外部関数を適用し、文から引数を取得する。そして、最外部関数取得手段281は、最外部関数に引数を代入し、引数が入った最外部関数を出力バッファに一時的に書き込む。
(ステップS1509)最外部関数取得手段281は、文字列バッファ内の元の文から、最外部関数が有する文字列を削除し、更新された文字列を取得する。
(ステップS1510)最外部関数取得手段281は、最外部関数の引数であり、解析されていない文字列が存在するか否かを判断する。存在すればステップS1511に行き、存在しなければ処理を終了する。
(ステップS1511)最外部関数取得手段281は、ステップS1509で取得した文字列を文字列バッファに代入する。
(ステップS1512)中間言語文作成部28は、カウンタiに、取得した文字列の長さを加える。ステップS1503に戻る。
(ステップS1513)補語関数取得手段282は、補語解析処理を行う。補語解析処理について、図16のフローチャートを用いて説明する。
次に、ステップS1513の補語解析処理について、図16のフローチャートを用いて説明する。
(ステップS1601)補語関数取得手段282は、カウンタiに1を代入する。
(ステップS1602)補語関数取得手段282は、文字列バッファ内に、i番目の文字が存在するか否かを判断する。i番目の文字が存在すればステップS1603に行き、存在しなければステップS1611に行く。
(ステップS1603)補語関数取得手段282は、文字列バッファ内の文字列のうちの、i番目の文字を取得する。
(ステップS1604)補語関数取得手段282は、i番目の文字をキーとして、索引を検索する。
(ステップS1605)補語関数取得手段282は、ステップS1505で検索した索引に対応する1以上の候補を取得する。補語関数取得手段282は、索引に対応し、文字列バッファ内の文字列に前方一致する文字列を有する1以上の候補を取得する。候補は、原言語関数識別子、または語句である。
(ステップS1606)補語関数取得手段282は、ステップS1605で取得した候補のうち、最大長の長さの文字列を有する原言語関数識別子、または語句を取得する。
(ステップS1607)補語関数取得手段282は、ステップS1606で取得した原言語関数識別子に対応する属性値から、ベクトルが構成できるか否かを判断する。ベクトルが構成できればステップS1608に行き、ベクトルが構成できなければステップS1609に行く。
(ステップS1608)補語関数取得手段282は、ベクトルを構成し、図示しない検査バッファに書き込む。ベクトルの構成方法の具体例については後述する。
(ステップS1609)補語関数取得手段282は、カウンタiに、取得した文字列の長さを加える。ステップS1503に戻る。
(ステップS1610)補語関数取得手段282は、取得した文字列を除いた、残りの文字列を文字列バッファに代入する。ステップS1601に戻る。
(ステップS1611)補語関数取得手段282は、検査バッファに書き込まれているベクトルを用いて、周辺和制約を持つ0−1行列存在問題を構成する。ここで、補語関数取得手段282は、通常、複数のベクトルを有する行列を構成する。
(ステップS1612)補語関数取得手段282は、周辺和制約を持つ0−1行列存在問題を解く。なお、本問題を解くことは、行列におけるすべての列(引数)に「1」の値が入るように、行(関数)の引数がどの引数に該当するかを決定することである。
(ステップS1613)補語関数取得手段282は、ステップS1612の結果、解が存在するか否かを判断する。解が存在すればステップS1614に行き、存在しなければ、図15のステップS1508に戻る。
(ステップS1614)非言語情報識別子取得手段283は、最外部関数取得手段281または補語関数取得手段282が取得した1以上の原言語関数識別子のそれぞれに対応する1以上の非言語情報識別子を、原言語文関数辞書12から取得し、原言語関数識別子を非言語情報識別子に置き換える。
(ステップS1615)語句識別子取得手段284は、補語関数取得手段282が取得した1以上の語句のそれぞれに対応する1以上の語句識別子を、原言語語句辞書13から取得し、語句を語句識別子に置き換える。上位処理にリターンする。
以下、本実施の形態における自然言語文変換装置2の具体的な動作について説明する。
今、原言語文関数辞書12は、図17に示す原言語文関数辞書を格納している。原言語文関数辞書の構造は、図4や8と同様である。なお、図17において、索引は省略しているが索引を有しても良い。また、図17において、原言語関数識別子「@v1:S-ます-([S:S]);」の「v1」は第一引数であることを示す。また、図17において、属性値または関係子は、引数の種類を示す。「agnt」は「主体」、「topic」は「話題」、「obj」は「対象」、「plc」は「場所」、「implement」は「方法・道具」を示す。なお、「implement」は関係子である。また、属性値は、関数の後に付加されるもので、例えば、「_行-く-([C]){attrib:verb};」の場合、{attrib:}という識別子のあとに属性値「verb」が出現する。また、否定、態、アスペクトやモードのコードは属性値として表現される。
また、図18は、原言語語句辞書13の例を示す図である。原言語語句辞書は、品詞の情報も有する。
さらに、図19は、索引の例を示す。索引は、1文字の「キー」、「識別情報」を有する。「識別情報」は、辞書を識別する「辞書識別子」、辞書のレコードを識別する「ID」を有する。辞書識別子「1」は原言語文関数辞書、辞書識別子「2」は原言語語句辞書を示す。
かかる状況において、文「私は教室では日本語を使わないことにします」が入力され、受付部16が、当該文を受け付けた、とする。なお、この文をS0とする。
次に、中間言語文作成部28の最外部関数取得手段281は、以下のように、図19の「関数・用語・ひらがな列先頭1文字索引」を使って、最外部関数の該当候補を検索する。まず、最外部関数取得手段281は、1番目の文字「私」を取得する。そして、最外部関数取得手段281は、1番目の文字「私」から、索引の中の識別情報(2,1)を取得する。そして、最外部関数取得手段281は、識別情報(2,1)から原言語語句辞書の第一レコードの「N=私」を取得する。そして、最外部関数取得手段281は、「N=私」が、受け付けた全ての文をカバーしないことを判断し、「N=私」は、最外部関数ではない、と判断する。
次に、最外部関数取得手段281は、2番目の文字「は」を取得する。そして、最外部関数取得手段281は、2番目の文字「は」から、索引を経由して、原言語文関数辞書内の「C=_は([N])」を取得する。これが最外部関数になるためには、文末に表れている必要があるが、「は」の後に続く文字列があるので、最外部関数ではないと、最外部関数取得手段281は判断する。
次に、最外部関数取得手段281は、3番目の文字「教」を取得する。そして、最外部関数取得手段281は、3番目の文字「教」から、索引を経由して、原言語文関数辞書内の「N=教室」を取得する。そして、最外部関数取得手段281は、「N=教室」が、受け付けた全ての文をカバーしないことを判断し、「N=教室」は、最外部関数ではない、と判断する。「教室」が取得されたので、最外部関数取得手段281は、ポインタを2つ(文字列長の分)進める。
次に、最外部関数取得手段281は、5番目の文字「で」を取得する。そして、最外部関数取得手段281は、索引を経由して、原言語文関数辞書内の「C=_で([N])」、「C=_では([N])」を取得する。この「_で」や「_では」が最外部関数になるためには、文末に表れている必要があるが、最外部関数取得手段281は、このどちらもその後に続く文字列があることを検出し、最外部関数ではない、と判断する。「では」が取得されたので、最外部関数取得手段281は、ポインタを2つ(文字列長の分)進める。
次に、最外部関数取得手段281は、7番目の文字「日」を取得する。そして、最外部関数取得手段281は、索引を経由して、原言語語句辞書内の「N=日」、「N=日本」、「N=日本語」の3つの用語を取得する。そして、最外部関数取得手段281は、同様に、これら3つとも、最外部関数ではない、と判断する。そして、「日本語」が取得されたので、最外部関数取得手段281は、ポインタを3つ(文字列長の分)進める。
次に、最外部関数取得手段281は、10番目の文字「を」を取得する。そして、最外部関数取得手段281は、索引を経由して、原言語文関数辞書内の「C=_を([N])」を取得する。これも文末に表れていないので最外部関数ではないと、最外部関数取得手段281は判断する。
次に、最外部関数取得手段281は、11番目の文字「使」を取得する。そして、最外部関数取得手段281は、「使」を索引に有する原言語関数情報を検索し、原言語文関数辞書内の「_使-う-([agnt:C],[plc:C],[obj:C]) を取得する。これも文末に表れていないので最外部関数ではないと、最外部関数取得手段281は判断する。そして、最外部関数取得手段281は、動詞「使う」の語頭である可能性があることが分かり、その未然形の「使わ(ない)」が該当すると判断する。そして、「使わ」が取得されたので、最外部関数取得手段281は、ポインタを2つ(文字列長の分)進める。
次に、13番目の文字「な」を取得する。そして、最外部関数取得手段281は、索引を経由して、原言語文関数辞書内の「S=@v2:Sないことにします([S:S]);」を取得する。
また、同様に、最外部関数取得手段281は、「S=@v2:Sことにします([S:S]);」、「S=@v1:S-ます-([S:S]);」も取得する。
そして、最外部関数取得手段281は、これら3つの原言語関数識別子は、最外部関数であると判断する。
次に、最外部関数取得手段281は、最も長い文字列を有する「S=@v2:Sないことにします([S:S]);」を最外部関数として採用する。
そして、最外部関数取得手段281は、文字列バッファ内の元の文「私は教室では日本語を使わないことにします」から、最外部関数が有する文字列「ないことにします」を削除し、更新された文字列「私は教室では日本語を使わ」を取得する。そして、最外部関数取得手段281は、以下のようにして、「使わ」を「使-う-」に変形する。つまり、最外部関数取得手段281は、図20に示す動詞語尾の変形情報を保持している。図20は、最外部関数取得手段281を実現するプログラムの一部であり、配列「JCTbl[]」に入っている動詞の語尾の変化の情報を利用して、動詞語尾の変形情報を取得するプログラムである。配列「JCTbl[]」に入っている動詞の語尾の変化は、「未然形/連用形/終止形/・・・」のような変化である。そして、未然形が「わ」であることにより、最外部関数取得手段281は、配列JCTbl[5]の情報から、終止形「う」の文字を取得し、「使わ」を「使-う-」に変形する。
そして、最外部関数取得手段281は、「S0=@v2:Sないことにします([S1:私は教室では日本語を使-う-]);」を得る。
次に、引数「私は教室では日本語を使-う-」を文字列バッファに代入する。そして、文字列バッファの文字列に対して、上記と同様に、最外部関数を検出しにいく。
つまり、上記と同様に、最外部関数取得手段281は、最外部関数「_使-う-([agnt:C],[plc:C],[obj:C])を取得する。
次に、最外部関数取得手段281は、残る文字列「私は教室では日本語を」を文字列バッファに代入する。
次に、最外部関数取得手段281は、残る文字列「私は教室では日本語を」から最外部関数を見つけようとするが、見つからない。
そして、次に、補語関数取得手段282は、補語解析処理に移行する。つまり、補語関数取得手段282は、「私は教室では日本語を」から、1番目の文字「私」を取得する。そして、補語関数取得手段282は、1番目の文字「私」から、索引の中の識別情報(2,1)を取得する。そして、補語関数取得手段282は、識別情報(2,1)から原言語語句辞書の第一レコードの「N=私」を取得する。
次に、補語関数取得手段282は、2番目の文字「は」を取得する。そして、最外部関数取得手段281は、2番目の文字「は」から、索引を経由して、原言語文関数辞書内の「C=_は([N])」{属性値:agnt,topic, obj}を取得する。そして、補語関数取得手段282は、「_使-う-([agnt:C],[plc:C],[obj:C])の([agnt:C],[plc:C],[obj:C])に、{属性値:agnt,topic, obj}を適用し、ベクトル(1,0,1)を取得し、検査バッファに書き込む。「C=_は([N])」{属性値:agnt,topic, obj}において、属性値として「agnt」「obj」を有するからである。
次に、補語関数取得手段282は、3番目の文字「教」を取得する。そして、最外部関数取得手段281は、3番目の文字「教」から、索引を経由して、「N=教室」を取得する。教室が取得されたので、補語関数取得手段282は、ポインタを2つ(文字列長の分)進める。
次に、補語関数取得手段282は、5番目の文字「で」を取得する。そして、補語関数取得手段282は、索引を経由して、原言語文関数辞書内の「C=_で([N])」{属性値:plc,implement}、「C=_では([N])」{属性値:plc,implement,topic}を取得する。そして、補語関数取得手段282は、より長い文字列を有する原言語関数識別子「C=_では([N])」{属性値:plc,implement,topic}を取得する。そして、補語関数取得手段282は、「_使-う-([agnt:C],[plc:C],[obj:C])の([agnt:C],[plc:C],[obj:C])に、{属性値:plc,implement,topic}を適用し、ベクトル(0,1,0)を取得し、検査バッファに書き込む。そして、「では」が取得されたので、補語関数取得手段282は、ポインタを2つ(文字列長の分)進める。
次に、補語関数取得手段282は、7番目の文字「日」を取得する。そして、補語関数取得手段282は、索引を経由して、原言語語句辞書内の「N=日」、「N=日本」、「N=日本語」の3つの用語を取得する。そして、補語関数取得手段282は、最大長の名詞(句)を採用する規則から、「N=日本語」を取得する。そして、「日本語」が取得されたので、補語関数取得手段282は、ポインタを3つ(文字列長の分)進める。
次に、補語関数取得手段282は、10番目の文字「を」を取得する。そして、最外部関数取得手段281は、索引を経由して、原言語文関数辞書内の「C=_を([obj:N])」{属性値:obj}を取得する。そして、補語関数取得手段282は、「_使-う-([agnt:C],[plc:C],[obj:C])の([agnt:C],[plc:C],[obj:C])に、{属性値:obj}を適用し、ベクトル(0,0,1)を取得し、検査バッファに書き込む。
次に、補語関数取得手段282は、検査バッファに書き込まれているベクトルを用いて、周辺和制約を持つ0−1行列存在問題を構成する。つまり、補語関数取得手段282は、以下の数式1に示す行列を構成する。
そして、補語関数取得手段282は、上記の周辺和制約を持つ0−1行列存在問題を解いて、数式2の行列を得る。この行列は、行列におけるすべての列(引数)に「1」の値が入るように、行(関数)の引数がどの引数に該当するかを決定する行列である。
そして、補語関数取得手段282は、数式2の行列から、「私」がagnt、「教室」がplc、「日本語」がobjとなると判断する。
そして、最外部関数取得手段281、および補語関数取得手段282の上記の処理により、図21に示す原言語関数識別子の集合が得られる。
次に、非言語情報識別子取得手段283は、最外部関数取得手段281または補語関数取得手段282が取得した1以上の原言語関数識別子(図21の各行)のそれぞれに対応する1以上の非言語情報識別子を、原言語文関数辞書12から取得し、原言語関数識別子を非言語情報識別子に置き換える。
次に、語句識別子取得手段284は、補語関数取得手段282が取得した1以上の語句(図21の語句)のそれぞれに対応する1以上の語句識別子を、原言語語句辞書13から取得し、語句を語句識別子に置き換える。
以上の処理により、図22に示す中間言語文が得られる。
以上、本実施の形態によれば、自然言語文をコンピュータ処理するための中間言語に、極めて精度高く変換できる。
また、本実施の形態における自然言語文変換装置では、通常、すべての正しい文の意味が表現できる。これを、完全意味表現力という。
なお、本実施の形態における自然言語文変換装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、記憶媒体に、原言語の文字列を含む原言語関数識別子と当該原言語関数識別子で識別される関数の引数を示す情報である1以上の引数情報とを有する原言語関数情報と、前記原言語関数情報に対応する情報であり、言語非依存の識別子である非言語情報識別子とを対に有する原言語文関数情報を1以上有する原言語文関数辞書と、原言語の語句と、当該語句を識別する語句識別子とを対に有する原言語語句情報を1以上有する原言語語句辞書とを格納しており、コンピュータを、原言語の文を受け付ける受付部と、前記受付部が受け付けた文と、前記原言語文関数辞書に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子と対になる1以上の非言語情報識別子を取得し、かつ、前記原言語語句辞書に格納されている1以上の原言語の語句とのマッチングをとり、マッチする1以上の語句識別子を取得し、当該取得した1以上の非言語情報識別子と1以上の語句識別子とを用いて、関数の構造を有する1以上の中間言語文を構成する中間言語文作成部と、前記中間言語文作成部が構成した1以上の中間言語文を出力する出力部として機能させるためのプログラムである。
また、上記プログラムにおいて、前記中間言語文作成部は、前記受付部が受け付けた文と、前記原言語文関数辞書に格納されている1以上の原言語関数識別子とのマッチングをとり、前記受付部が受け付けた文の全体を包含する原言語関数識別子である最外部関数を取得し、当該最外部関数の引数となる前記文の一部分に対して、前記最外部関数が取得できなくなるまで、前記最外部関数の取得の処理を繰り返す最外部関数取得手段と、前記最外部関数取得手段が取得した最外部関数の引数であり、最外部関数に置き換えられていない前記文の一部分に対して、前記原言語文関数辞書に格納されている1以上の原言語関数識別子、または前記原言語語句辞書に格納されている1以上の原言語の語句とのマッチングをとり、1以上の原言語関数識別子または前記原言語の1以上の語句を取得する補語関数取得手段と、前記最外部関数取得手段または前記補語関数取得手段が取得した1以上の原言語関数識別子のそれぞれに対応する1以上の非言語情報識別子を取得する非言語情報識別子取得手段と、前記補語関数取得手段が取得した1以上の語句のそれぞれに対応する1以上の語句識別子を取得する語句識別子取得手段と、前記非言語情報識別子取得手段が取得した1以上の非言語情報識別子と前記語句識別子取得手段が取得した1以上の語句識別子とを用いて、関数の構造を有する1以上の中間言語文を構成する中間言語文構成手段とを具備するものとして、コンピュータを機能させるためのプログラム、であることは好適である。
また、上記プログラムにおいて、前記最外部関数取得手段は、前記受付部が受け付けた文または当該文の一部分の重複する箇所に対して、2以上の最外部関数の候補を取得した場合、前記文中の最も長い文字列に対応する最外部関数として取得するものとして、コンピュータを機能させるためのプログラム、であることは好適である。
(実施の形態3)
本実施の形態において、機械翻訳を行う自然言語文変換装置3について説明する。つまり、自然言語文変換装置2は、自然言語文変換装置1が出力した中間言語文を目的言語の文に変換する装置である。
図23は、本実施の形態における自然言語文変換装置3のブロック図である。自然言語文変換装置3は、原言語文型辞書11、原言語文関数辞書12、原言語語句辞書13、原言語共起辞書14、原言語変化語句辞書15、受付部16、関数化部17、中間言語文作成部28、出力部19、目的言語文型辞書31、目的言語文関数辞書32、目的言語語句辞書33、目的言語共起辞書34、目的言語変化語句辞書35、変換部36、目的言語文出力部37を備える。
変換部36は、目的言語関数情報取得手段361、目的言語文構成手段362を備える。
目的言語文型辞書31は、目的言語文型情報を1以上格納し得る。目的言語文型辞書31の構造は、原言語文型辞書11の構造と同様である。目的言語文型情報は、目的言語型情報と非言語情報識別子とを対に有する情報である。目的言語型情報は、目的言語関数識別子と、当該目的言語関数識別子で識別される関数の引数を示す情報である1以上の語句とを有する情報である。目的言語関数識別子は、目的言語の文字列を含む情報であり、目的言語の関数を識別する情報である。目的言語関数識別子は、文のパターンを示す情報である。なお、目的言語とは、翻訳先の文の言語である。目的言語は、原言語とは異なる言語であり、例えば、日本語、英語、中国語などである。ただし、目的言語は問わないことは言うまでもない。目的言語関数識別子は、原言語関数識別子と同じ構造である。さらに、非言語情報識別子は、言語非依存の関数を識別する情報である。
目的言語文型辞書31は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。目的言語文型辞書31に目的言語文型情報が記憶される過程は問わない。
目的言語文関数辞書32は、目的言語文関数情報を1以上格納し得る。目的言語文関数辞書32の構造は、原言語文関数辞書12の構造と同様である。目的言語文関数情報は、目的言語関数情報と非言語情報識別子とを対に有する情報である。目的言語関数情報は、目的言語の文字列を含む目的言語関数識別子と目的言語関数識別子で識別される関数の引数を示す情報である1以上の引数情報とを有する情報である。
目的言語関数識別子は、引数の挿入場所を示す引数挿入情報を有しても良い。また、目的言語関数識別子は、語句が変形する可能性があることを示す変化フラグを有しても良い。また、目的言語関数識別子は、何らかの語句が挿入され得ることを示す不定語句フラグを有しても良い。
目的言語文関数辞書32は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。目的言語文関数辞書32に目的言語文関数情報が記憶される過程は問わない。
目的言語語句辞書33は、目的言語の語句と、語句を識別する語句識別子とを対に有する目的言語語句情報を1以上格納し得る。目的言語語句辞書33の構造は、原言語語句辞書13の構造と同様である。目的言語語句辞書33は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。目的言語語句辞書33に目的言語語句情報が記憶される過程は問わない。
目的言語共起辞書34は、目的言語関数識別子と1以上の語句との共起を示す情報である共起情報を1以上格納し得る。目的言語共起辞書34の構造は、原言語共起辞書14の構造と同様である。目的言語共起辞書34は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。目的言語共起辞書34に共起情報が記憶される過程は問わない。
目的言語変化語句辞書35は、目的言語の語句の原型および語句の変形である1以上の変形語句を対応付けた変化語句情報を1以上格納し得る。目的言語変化語句辞書35の構造は、原言語変化語句辞書15と同様である。目的言語変化語句辞書35は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。目的言語変化語句辞書35に変化語句情報が記憶される過程は問わない。
変換部36は、出力部19が出力した1以上の中間言語文が有する1以上の非言語情報識別子を用いて目的言語文関数辞書32を検索し、1以上の目的言語関数情報を取得し、1以上の中間言語文が有する1以上の語句識別子を用いて目的言語語句辞書33を検索し、1以上の語句を取得し、取得した1以上の目的言語関数情報および1以上の語句から目的言語の文を構成する。
変換部36は、通常、MPUやメモリ等から実現され得る。変換部36の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
目的言語関数情報取得手段361は、出力部19が出力した1以上の中間言語文が有する1以上の非言語情報識別子を用いて目的言語文関数辞書32を検索し、1以上の目的言語関数情報を取得する。目的言語関数情報取得手段361は、2以上の目的言語関数情報を取得しても良い。
目的言語文構成手段362は、目的言語関数情報取得手段361が取得した1以上の目的言語関数情報と補語関数取得手段282が取得した1以上の語句とを用いて、目的言語の文を構成する。
目的言語文構成手段362は、目的言語関数情報取得手段361が取得した2以上の各目的言語関数情報が有する引数挿入情報が示す場所に、目的言語関数情報取得手段361が取得した目的言語関数情報または補語関数取得手段282が取得した語句を挿入し、かつ、目的言語関数情報が有する変化フラグに対応して文字列を変化させ、目的言語の文を構成する。目的言語文構成手段362は、語句が規則的な変化を行う場合、目的言語文構成手段362は、当該変化のルールを保持しており、当該ルールを用いて、語句を変化させ、目的言語の文を構成する。また、語句が不規則に変化する場合、目的言語文構成手段362は、変化後の語句を別の語句として扱う。
目的言語文出力部37は、変換部36が構成した目的言語の文を出力する。目的言語文出力部37は、ディスプレイやスピーカー等の出力デバイスを含むと考えても含まないと考えても良い。目的言語文出力部37は、出力デバイスのドライバーソフトまたは、出力デバイスのドライバーソフトと出力デバイス等で実現され得る。
次に、自然言語文変換装置3の動作について、図24のフローチャートを用いて説明する。出力部19が中間言語文を出力するまでの処理は、実施の形態1、2で説明した。したがって、図24のフローチャートにおいて、出力部19が出力した中間言語文を受け付けてから、目的言語の文を出力する処理について説明する。
(ステップS2401)変換部36は、1以上の中間言語文を、出力部19から受け付けたか否かを判断する。1以上の中間言語文を受け付ければステップS2402に行き、受け付けなければステップS2401に戻る。
(ステップS2402)変換部36は、カウンタiに1を代入する。
(ステップS2403)変換部36は、ステップS2401で受け付けた中間言語文の中に、i番目の中間言語文が存在するか否かを判断する。i番目の中間言語文が存在すればステップS2404に行き、存在しなければステップS2412に行く。
(ステップS2404)変換部36の目的言語関数情報取得手段361は、i番目の中間言語文が有する非言語情報識別子を取得する。
(ステップS2405)目的言語関数情報取得手段361は、ステップS2404で取得した非言語情報識別子をキーとして、目的言語文関数辞書32を検索し、非言語情報識別子と対になる目的言語関数情報を取得する。なお、ここで、目的言語関数情報取得手段361は、ステップS2404で取得した非言語情報識別子をキーとして、目的言語文型辞書31を検索し、非言語情報識別子と対になる目的言語型情報を取得しても良い。
(ステップS2406)目的言語文構成手段362は、i番目の中間言語文が引数を含むか否かを判断する。引数を含む場合はステップS2407に行き、含まない場合はステップS2409に行く。
(ステップS2407)目的言語文構成手段362は、引数は語句識別子を含むか否かを判断する。語句識別子を含む場合はステップS2408に行き、語句識別子を含まない場合はステップS2409に行く。
(ステップS2408)目的言語文構成手段362は、i番目の中間言語文に含まれる語句識別子をキーとして目的言語語句辞書33を検索し、語句を取得する。なお、i番目の中間言語文に含まれる語句識別子が複数存在する場合は、目的言語文構成手段362は、各語句識別子に対応する語句を、目的言語語句辞書33から取得する。
(ステップS2409)目的言語文構成手段362は、ステップS2405で取得した目的言語関数情報、およびステップS2408で取得した語句を用いて、目的言語型情報を構成する。なお、ステップS2408で語句を取得しなかった場合、目的言語文構成手段362は、ステップS2405で取得した目的言語関数情報を用いて、目的言語型情報を構成する。なお、ステップS2405で目的言語型情報が取得されている場合、目的言語文構成手段362は、ステップS2405で取得された目的言語型情報の語句を、ステップS2408で取得した語句に置き換える。
(ステップS2410)目的言語文構成手段362は、ステップS2409で構成した目的言語型情報をバッファに、少なくとも一時蓄積する。
(ステップS2411)変換部36は、カウンタiを1、インクリメントする。ステップS2403に戻る。
(ステップS2412)変換部36は、カウンタiに1を代入する。
(ステップS2413)目的言語文構成手段362は、バッファ内に、i番目の目的言語型情報(本実施の形態において、「文型情報」とも言う)が存在するか否かを判断する。i番目の目的言語型情報が存在すればステップS2414に行き、存在しなければステップS2419に行く。
(ステップS2414)目的言語文構成手段362は、i番目の文型情報が引数情報を有するか否かを判断する。引数情報が存在すればステップS2415に行き、存在しなければステップS2416に行く。
(ステップS2415)目的言語文構成手段362は、他の文型情報が有する目的言語の非言語情報識別子を、i番目の文型情報の、引数の箇所に挿入する。または、目的言語文構成手段362は、引数である語句を、i番目の文型情報の、引数の箇所に挿入する。
(ステップS2416)目的言語文構成手段362は、i番目の文型情報の中に変化フラグが存在するか否かを判断する。変化フラグが存在すればステップS2417に行き、変化フラグが存在しなければステップS2418に行く。
(ステップS2417)目的言語文構成手段362は、i番目の文型情報の変化フラグに対応する語句を変形して、1以上の変化語句を取得する。なお、目的言語文構成手段362は、例えば、保持しているルールに従って、語句の変形を行う。
(ステップS2418)変換部36は、カウンタiを1、インクリメントする。ステップS2413に戻る。
(ステップS2419)変換部36は、その他、必要な処理を行う。必要な処理とは、例えば、目的言語が英語である場合、「-」をスペースに変更する処理である。
(ステップS2420)目的言語文出力部37は、変換部36により構成された目的言語の文を出力する。
以下、本実施の形態における自然言語文変換装置3の具体的な動作について説明する。自然言語文変換装置3は、例えば、日英翻訳機である、とする。つまり、原言語は日本語、目的言語は英語である、とする。
ここで、目的言語文関数辞書32は、図4に示す表である。ここでは、図4の「原言語」を「目的言語」と書き換える、とする。
また、目的言語語句辞書33は、図5である。また、目的言語変化語句辞書35は、図6である。
そして、かかる状況において、受付部16は、文「もし、Gが接続グラフで、かつすべての節点が偶数次数を持っていれば、Gはオイラー回路を持つ。」を受け付けた、とする。そして、実施の形態1の具体例2で述べた処理により、出力部19は、図7の8つの中間言語文を出力した、とする。
そして、変換部36は、図7の8つの中間言語文を、出力部19から受け付ける。次に、変換部36は、1番目の中間言語文「N1:1002002([N:w001]);」を取得する。
そして、変換部36の目的言語関数情報取得手段361は、1番目の中間言語文が有する非言語情報識別子「1002002」を取得する。
次に、目的言語関数情報取得手段361は、取得した非言語情報識別子「1002002」をキーとして、図4の目的言語文関数辞書32を検索し、非言語情報識別子「1002002」と対になる目的言語関数情報「a-*connected-_([N]);」を取得する。
次に、目的言語文構成手段362は、1番目の中間言語文が引数を含むと判断する。そして、目的言語文構成手段362は、引数は語句識別子「w001」を含むと判断する。
次に、目的言語文構成手段362は、目的言語関数情報に含まれる語句識別子「w001」をキーとして、図5の目的言語語句辞書33を検索し、語句「graph」を取得する。
次に、目的言語文構成手段362は、取得した目的言語関数情報「a-*connected-_([N]);」、および取得した語句「graph」を用いて、目的言語型情報「N1:a-*connected-_([N:graph]);」を構成する。つまり、取得した語句が引数の語句識別子に置き換えられる。
そして、目的言語文構成手段362は、構成した目的言語型情報をバッファに、少なくとも一時蓄積する。
次に、次に、変換部36は、2番目の中間言語文「S1:3000401([a-object:G],[object:N1]);」を取得する。
そして、変換部36の目的言語関数情報取得手段361は、2番目の中間言語文が有する非言語情報識別子「3000401」を取得する。
次に、目的言語関数情報取得手段361は、取得した非言語情報識別子「3000401」をキーとして、図4の目的言語文関数辞書32を検索し、非言語情報識別子「3000401」と対になる目的言語関数情報「_-@be:a1-_([a-object:G],[object:N1]);」を取得する。
次に、目的言語文構成手段362は、1番目の中間言語文が引数を含むと判断する。そして、目的言語文構成手段362は、引数は語句識別子を含まないと判断する。
次に、目的言語文構成手段362は、目的言語型情報「S1:_-@be:a1-_([a-object:G],[object:N1]);」を構成する。
次に、目的言語文構成手段362は、構成した目的言語型情報をバッファに、少なくとも一時蓄積する。
変換部36は、以上の処理を、3番目以降の中間言語文に対しても行う。そして、変換部36は、図6に示すような目的言語型情報の集合を得る。なお、ここでは、図6の原言語型情報を目的言語型情報に読み換える。
次に、目的言語文構成手段362は、1番目の目的言語型情報「N1:a-*connected-_([N: graph]);」を取得する。そして、目的言語文構成手段362は、引数「graph」を引数挿入情報が示す位置に配置し、「N1:a-*connected-graph」を得て、バッファに配置する。
次に、目的言語文構成手段362は、2番目の目的言語型情報「S1:_-@be:a1-_([a-object:G],[object:N1]);」を取得する。目的言語文構成手段362は、引数である語句「G」および文「N1」を、それぞれ第一の引数挿入情報の位置、第二の引数挿入情報の位置に配置する。そして、目的言語文構成手段362は、「S1:G-@be:a1-a-*connected-graph」を得る。そして、ここで、目的言語文構成手段362は、変化フラグ「@」を検知する。そして、目的言語文構成手段362は、語句「be」をキーとして、目的言語変化語句辞書35を検索し、変化語句「is,are,was,were」を取得する。そして、a1である「G」に対応する語句「is」を選択し、「@be:a1」を置き換える。そして、目的言語文構成手段362は、「S1:G-is-a-*connected-graph;」を得て、バッファに配置する。なお、目的言語文構成手段362は、埋め込み語句(ここでは「G」)が単数形であるか複数形であるかを辞書から取得し、保持しているルール(単数形であれば「is」を選択し、複数形であれば「are」を選択するというルール)を適用し、「is」または「are」を選択する。なお、ここでは、目的言語文構成手段362は、「G」を確認し、この場合は単数形であるから、「is」にする。
次に、目的言語文構成手段362は、3番目の目的言語型情報「N2:every-_([N:vertex]);」を取得する。そして、目的言語文構成手段362は、引数「vertex」を引数挿入情報が示す位置に配置し、「N2:every-vertex」を得て、バッファに配置する。
次に、目的言語文構成手段362は、4番目の目的言語型情報「N3:even-_([N:degree]);」を取得する。そして、目的言語文構成手段362は、引数「degree」を引数挿入情報が示す位置に配置し、「N3:even-degree」を得て、バッファに配置する。
次に、目的言語文構成手段362は、5番目の目的言語型情報「S2:_-@have:a1-_([object:N2],[object:N3]);」を取得する。そして、目的言語文構成手段362は、引数「N2:every-vertex」、引数「N3:even-degree」を引数挿入情報が示す位置に配置し、「S2:every-vertex-@have:a1-even-degree;」を得る。そして、ここで、変化フラグ「@」が存在するので、目的言語文構成手段362は、語句「have」をキーとして、目的言語変化語句辞書35を検索し、変化語句「has」を取得する。そして、a1である「every-vertex」に対応する語句「has」を選択し、「@have:a1」を置き換える。そして、目的言語文構成手段362は、「S2:every-vertex-has-even-degree;」を得て、バッファに配置する。
次に、目的言語文構成手段362は、6番目の目的言語型情報「S3:_-@have:a1-_([object:G],[object:Euler cycle]);」を取得する。そして、目的言語文構成手段362は、引数「G」、引数「Euler cycle」を引数挿入情報が示す位置に配置し、「S3:G-@have:a1-Euler cycle;」を得る。そして、ここで、変化フラグ「@」が存在するので、目的言語文構成手段362は、語句「have」をキーとして、目的言語変化語句辞書35を検索し、変化語句「has」を取得する。そして、a1である「G」に対応する語句「has」を選択し、「@have:a1」を置き換える。そして、目的言語文構成手段362は、「S3:G-has-Euler cycle;」を得て、バッファに配置する。
次に、目的言語文構成手段362は、7番目の目的言語型情報「S4:_-and-_([S:S1],[S:S2]);」を取得する。そして、目的言語文構成手段362は、引数「S1:G-is-a-*connected-graph;」「S2:every-vertex-has-even-degree;」を引数挿入情報が示す位置に配置し、「S4:G-is-a-*connected-graph-and-every-vertex-has-even-degree;」を得て、バッファに配置する。
次に、目的言語文構成手段362は、8番目の目的言語型情報「S5:If-_-,then-_([S:S4],[S:S3]);」を取得する。そして、目的言語文構成手段362は、引数「S4:G-is-a-*connected-graph-and-every-vertex-has-even-degree;」「S3:G-has-Euler cycle;」を引数挿入情報が示す位置に配置し、「S5:If-G-is-a-*connected-graph-and-every-vertex-has-even-degree-,then-G-has-Euler cycle;」を得て、バッファに配置する。
次に、「S5:If-G-is-a-*connected-graph-and-every-vertex-has-even-degree-,then-G-has-Euler cycle;」に対して、目的言語文構成手段362は、以下の他の処理を行う。まず、目的言語文構成手段362は、「-」をスペースに変換する。そして、目的言語文構成手段362は、「*」を消去する。これらの処理は、予め決められた他の処理である。
そして、目的言語文構成手段362は、目的言語の文「If G is a connected graph and every vertex has even degree ,then G has Euler cycle」を得る。
次に、目的言語文出力部37は、構成された目的言語の文「If G is a connected graph and every vertex has even degree ,then G has Euler cycle」を出力する。
以上、本実施の形態によれば、原言語の文を目的言語の文に、精度高く機械翻訳できる。
また、本実施の形態によれば、あらゆる自然言語から、他の言語に容易に、かつ、曖昧性なく翻訳でき、この言語からあらゆる自然言語に、容易にかつ曖昧性なく翻訳できる。これを変換容易性という。さらに、本自然言語文変換装置では、この言語を使った翻訳システムが、比較的小さい計算機でも、容易に実装できる。具体的には、約1万の文型関数辞書と30万語の用語辞書を用いるだけで、機械翻訳システムが実装できる。なお、かかる場合の辞書の必要記憶容量は「20Bx10K+10Bx300K=3.2MB」であり、主記憶装置にすべて読み込める。つまり、本自然言語文変換装置3は、実装の容易性を実現できる。
なお、本実施の形態によれば、1文を機械翻訳した。しかし、複数の文を連続して、機械翻訳しても良いことは言うまでもない。
また、本実施の形態によれば、日英翻訳を行ったが、原言語および目的言語は問わないことは言うまでもない。
さらに、本実施の形態における自然言語文変換装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、記憶媒体に、原言語の文字列を含む原言語関数識別子と当該原言語関数識別子で識別される関数の引数を示す情報である1以上の引数情報とを有する原言語関数情報と、前記原言語関数情報に対応する情報であり、言語非依存の識別子である非言語情報識別子とを対に有する原言語文関数情報を1以上有する原言語文関数辞書と、原言語の語句と、当該語句を識別する語句識別子とを対に有する原言語語句情報を1以上有する原言語語句辞書とを格納しており、コンピュータを、原言語の文を受け付ける受付部と、前記受付部が受け付けた文と、前記原言語文関数辞書に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子と対になる1以上の非言語情報識別子を取得し、かつ、前記原言語語句辞書に格納されている1以上の原言語の語句とのマッチングをとり、マッチする1以上の語句識別子を取得し、当該取得した1以上の非言語情報識別子と1以上の語句識別子とを用いて、関数の構造を有する1以上の中間言語文を構成する中間言語文作成部と、前記中間言語文作成部が構成した1以上の中間言語文を出力する出力部として機能させるためのプログラムである。
また、上記プログラムにおいて、記録媒体に、目的言語の文字列を含む目的言語関数識別子と当該目的言語関数識別子で識別される関数の引数を示す情報である1以上の引数情報とを有する目的言語関数情報と、前記目的言語関数情報に対応する情報であり、言語非依存の識別子である非言語情報識別子とを対に有する目的言語文関数情報を1以上格納し得る目的言語文関数辞書と、目的言語の語句と、当該語句を識別する語句識別子とを対に有する目的言語語句情報を1以上格納し得る目的言語語句辞書とをさらに記憶し、コンピュータを、前記出力部が出力した1以上の中間言語文が有する1以上の非言語情報識別子を用いて前記目的言語文関数辞書を検索し、1以上の目的言語関数情報を取得し、前記1以上の中間言語文が有する1以上の語句識別子を用いて前記目的言語語句辞書を検索し、1以上の語句を取得し、当該取得した1以上の目的言語関数情報および1以上の語句から目的言語の文を構成する変換部と、前記変換部が構成した目的言語の文を出力する目的言語文出力部としてさらに機能させるためのプログラムであることは好適である。
また、上記プログラムにおいて、前記変換部は、前記出力部が出力した1以上の中間言語文が有する1以上の非言語情報識別子を用いて前記目的言語文関数辞書を検索し、1以上の目的言語関数情報を取得する目的言語関数情報取得手段と、前記1以上の中間言語文が有する1以上の語句識別子を用いて前記目的言語語句辞書を検索し、1以上の語句を取得する語句取得手段と、前記目的言語関数情報取得手段が取得した1以上の目的言語関数情報と前記語句取得手段が取得した1以上の語句とを用いて、目的言語の文を構成する目的言語文構成手段とを具備するものとして、コンピュータを機能させるためのプログラムであることは好適である。
また、上記プログラムにおいて、前記目的言語関数識別子は、引数の挿入場所を示す引数挿入情報を有し、かつ、語句が変形する可能性があることを示す変化フラグを有し、かつ、何らかの語句が挿入され得ることを示す不定語句フラグを有し、前記目的言語関数情報取得手段は、2以上の目的言語関数情報を取得し、前記目的言語文構成手段は、前記目的言語関数情報取得手段が取得した2以上の各目的言語関数情報が有する引数挿入情報が示す場所に、前記目的言語関数情報取得手段が取得した目的言語関数情報または前記語句取得手段が取得した語句を挿入し、かつ、目的言語関数情報が有する変化フラグに対応して文字列を変化させ、目的言語の文を構成するものとして、コンピュータを機能させるためのプログラムであることは好適である。
(実施の形態4)
本実施の形態において、自然言語の文からアニメーションを自動生成する自然言語文変換装置4について説明する。
図25は、本実施の形態における自然言語文変換装置4のブロック図である。自然言語文変換装置4は、原言語文型辞書11、原言語文関数辞書12、原言語語句辞書13、原言語共起辞書14、原言語変化語句辞書15、受付部16、関数化部17、中間言語文作成部28、出力部19、プログラム格納部41、実行部42を備える。
プログラム格納部41は、非言語情報識別子とアニメーション機能を実現するプログラムを対応付けて格納し得る。非言語情報識別子とプログラムとは、1対1であるとは限らず、1対多、多対1等でも良い。
プログラム格納部41は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。プログラム格納部41に非言語情報識別子やプログラムが記憶される過程は問わない。
実行部42は、出力部19が出力した中間言語文が有する非言語情報識別子に対応するプログラムを、プログラム格納部41から検索し、実行する。実行部42は、中間言語文が有する引数を非言語情報識別子に対応するプログラムに渡し、プログラムを実行することは好適である。
実行部42は、通常、MPUやメモリ等から実現され得る。実行部42の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
次に、自然言語文変換装置3の動作について、図26のフローチャートを用いて説明する。出力部19が中間言語文を出力するまでの処理は、実施の形態1で説明した。したがって、図26のフローチャートにおいて、出力部19が出力した中間言語文から、アニメーションを出力する処理について説明する。図26のフローチャートにおいて、図24のフローチャートと同一のステップについて、説明を省略する。
(ステップS2601)実行部42は、i番目の中間言語文が有する1以上の引数を取得する。
(ステップS2602)実行部42は、非言語情報識別子をキーとして、プログラム格納部41を検索し、プログラムを読み出す。
(ステップS2603)実行部42は、ステップS2602で読み出したプログラムを実行する。実行の際に、ステップS2601で1以上の引数を取得していれば、当該1以上の引数をプログラムに渡して、プログラムを実行する。
以下、本実施の形態における自然言語文変換装置3の具体的な動作について説明する。
今、プログラム格納部41は、図27に示すプログラム管理表を保持している。プログラム管理表は、「ID」「非言語情報識別子」「プログラム識別子」を有するレコードである。プログラム識別子は、プログラムを識別する情報である。プログラム格納部41は、各プログラム識別子に対応する実行可能なプログラムも保持している、とする。
かかる状況で、自然言語文変換装置3に入力された文「ボールを蹴る」が入力された、とする。
そして、実施の形態1で説明した処理により、出力部19は中間言語文「f1001(w871)」を出力した、とする。なお、中間言語文「f1001(w871)」が出力されるために、原言語文関数辞書12は、例えば、原言語文関数情報「S:_を蹴-る-([object]):f1001」を保持している、とする。また、原言語語句辞書13は、「ボール:w871」の原言語語句情報を保持している、とする。
次に、実行部42は、中間言語文「f1001(w871)」を受け付ける。そして、実行部42は、非言語情報識別子「f1001」と、引数(w871)を取得する。なお、非言語情報識別子「f1001」で識別される関数は、引数で示される画像を蹴るアニメーションを実行するプログラムである、とする。また、引数(w871)は、ボールの画像ファイルを特定する情報である、とする。
そして、実行部42は、非言語情報識別子「f1001」をキーとして図27のプログラム管理表を検索し、プログラム識別子「shoot(arg1)」を得る。
次に、実行部42は、プログラム識別子「shoot(arg1)」の引数に「w871」を代入する。そして、実行部42は、「shoot(w871)」を得る。
次に、実行部42は、「shoot(w871)」を実行する。そして、w871で特定されるファイルに示されたボールを蹴るアニメーションが表示される。
以上、本実施の形態によれば、自然言語の文から、精度高くアニメーションを生成できる。
なお、本実施の形態における自然言語文変換装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、記憶媒体に、原言語の文字列を含む原言語関数識別子と当該原言語関数識別子で識別される関数の引数を示す情報である1以上の引数情報とを有する原言語関数情報と、前記原言語関数情報に対応する情報であり、言語非依存の識別子である非言語情報識別子とを対に有する原言語文関数情報を1以上有する原言語文関数辞書と、原言語の語句と、当該語句を識別する語句識別子とを対に有する原言語語句情報を1以上有する原言語語句辞書とを格納しており、コンピュータを、原言語の文を受け付ける受付部と、前記受付部が受け付けた文と、前記原言語文関数辞書に格納されている1以上の原言語関数識別子とのマッチングをとり、マッチする1以上の原言語関数識別子と対になる1以上の非言語情報識別子を取得し、かつ、前記原言語語句辞書に格納されている1以上の原言語の語句とのマッチングをとり、マッチする1以上の語句識別子を取得し、当該取得した1以上の非言語情報識別子と1以上の語句識別子とを用いて、関数の構造を有する1以上の中間言語文を構成する中間言語文作成部と、前記中間言語文作成部が構成した1以上の中間言語文を出力する出力部として機能させるためのプログラムである。
また、上記プログラムにおいて、記憶媒体に、非言語情報識別子とアニメーション機能を実現するプログラムを対応付けて格納し、前記出力部が出力した中間言語文が有する非言語情報識別子に対応するプログラムを、前記記憶媒体から検索し、実行する実行部とを具備するものとして、コンピュータをさらに機能させるためのプログラムであることは好適である。
また、図25は、本明細書で述べたプログラムを実行して、上述した実施の形態の自然言語文変換装置等を実現するコンピュータの外観を示す。上述の実施の形態は、コンピュータハードウェア及びその上で実行されるコンピュータプログラムで実現され得る。図28は、このコンピュータシステム340の概観図であり、図29は、コンピュータシステム340のブロック図である。
図28において、コンピュータシステム340は、FDドライブ、CD−ROMドライブを含むコンピュータ341と、キーボード342と、マウス343と、モニタ344とを含む。
図29において、コンピュータ341は、FDドライブ3411、CD−ROMドライブ3412に加えて、MPU3413と、CD−ROMドライブ3412及びFDドライブ3411に接続されたバス3414と、ブートアッププログラム等のプログラムを記憶するためのROM3415に接続され、アプリケーションプログラムの命令を一時的に記憶するとともに一時記憶空間を提供するためのRAM3416と、アプリケーションプログラム、システムプログラム、及びデータを記憶するためのハードディスク3417とを含む。ここでは、図示しないが、コンピュータ341は、さらに、LANへの接続を提供するネットワークカードを含んでも良い。
コンピュータシステム340に、上述した実施の形態の自然言語文変換装置等の機能を実行させるプログラムは、CD−ROM3501、またはFD3502に記憶されて、CD−ROMドライブ3412またはFDドライブ3411に挿入され、さらにハードディスク3417に転送されても良い。これに代えて、プログラムは、図示しないネットワークを介してコンピュータ341に送信され、ハードディスク3417に記憶されても良い。プログラムは実行の際にRAM3416にロードされる。プログラムは、CD−ROM3501、FD3502またはネットワークから直接、ロードされても良い。
プログラムは、コンピュータ341に、上述した実施の形態の自然言語文変換装置等の機能を実行させるオペレーティングシステム(OS)、またはサードパーティープログラム等は、必ずしも含まなくても良い。プログラムは、制御された態様で適切な機能(モジュール)を呼び出し、所望の結果が得られるようにする命令の部分のみを含んでいれば良い。コンピュータシステム340がどのように動作するかは周知であり、詳細な説明は省略する。
なお、上記プログラムにおいて、ハードウェアによって行われる処理は含まれない。
また、上記プログラムを実行するコンピュータは、単数であってもよく、複数であってもよい。すなわち、集中処理を行ってもよく、あるいは分散処理を行ってもよい。
また、上記各実施の形態において、各処理(各機能)は、単一の装置(システム)によって集中処理されることによって実現されてもよく、あるいは、複数の装置によって分散処理されることによって実現されてもよい。
また、上記各実施の形態において説明した自然言語文変換装置は、1以上の端末とネットワークで接続され、利用されても良いことは言うまでもない。
本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。