(57)【要約】【課題】  より単純で、より高速で、より移植可能性の高いテキスト分析を可能にする、コンピュータによって実現可能なシステムと方法を提供する。【解決手段】  開示された発明は非循環有向グラフ（Direct Acyclic Graph）を「ＤＡＧ」ストリングによって表し、単純な有限状態オートマタを用いて処理することを可能にする。
2006518502.tif 000002
【特許請求の範囲】
【請求項１】
最初のストリングのマルチ・チェーンに適用される制約を表す非循環有向グラフ（ＤＡＧ）を構築するための、コンピュータによって実現される方法であって、
（ａ）前記制約から正規表現を構築するステップと、
（ｂ）前記正規表現を用いて、前記最初のストリングのマルチ・チェーンにおいて、前記制約が適用される位置を探索するステップと、
（ｃ）前記最初のストリングのマルチ・チェーンを、前記制約が適用される位置に関してサブ・マルチ・チェーンに分離するステップと、
（ｄ）前記制約の適用がなくなるまで、ステップ（ｂ）およびステップ（ｃ）を各サブ・マルチ・チェーンに適用するステップと
を含む
方法。
【請求項２】
さらに、
ステップ（ｃ）の後に、前記制約が適用されないサブ・マルチ・チェーンを削除するステップを含む、
請求項１に記載の方法。
【請求項３】
さらに、
ステップ（ｃ）の後に、少なくとも２つのサブ・マルチ・チェーンを組み合わせるステップを含む、
請求項１または２に記載の方法。
【請求項４】
ステップ（ａ）において構築した正規表現が、前記制約の文脈を特定するのを可能にする左部、中央部、および右部を含む、
請求項１〜３のうちの１項に記載の方法。
【請求項５】
ステップ（ｂ）がさらに、前記左部、前記中央部および前記右部において探索を行うステップを含む、
請求項４に記載の方法。
【請求項６】
前記制約が負の規則である、
請求項１〜５のうちの１項に記載の方法。
【請求項７】
前記制約が正の規則である、
請求項１〜６のうちの１項に記載の方法。
【請求項８】
前記最初のストリングのマルチ・チェーンが、曖昧性を無くすべき句のストリング表現である、
請求項１〜７のうちの１項に記載の方法。
【請求項９】
請求項１〜８のうちの１項の方法の各ステップを実行する手段を含むシステム。
【請求項１０】
コンピュータに請求項１〜８のうちの１項の方法を実行させるコンピュータ読み取り可能なプログラム手段を含む、コンピュータ使用可能な媒体に格納されたコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に自然言語処理に関し、特にテキスト分析のためのシステムと方法に関する。
【背景技術】
【０００２】
計算手法を使用した自然言語処理（Natural Language Processing:ＮＬＰ）の研究における重要な洞察により、このような分野を、例えば、情報検索やウェブベースのサービスのような今日の実世界の問題の解決に適用することが可能になった。
【０００３】
しかしながら、人間の言語の複雑性から、高性能のＮＬＰシステムを提供するために、個別の言語分析が行われるに至った。これらのうちの１つが文の形態統語分析（morphosyntactic analysis）（これはタグ付け（tagging)とも呼ばれている）である。実際、１つの語が異なる文法上の意義（例えば、動詞または名詞）を有する人間の言語の曖昧性のために、誤解釈を防止するにはその曖昧性を適切に解消することがきわめて重要である。それらの課題を解決するために、特に以下のような手法が知られている。
・統計的な「品詞（Part Of Speech: ＰＯＳ）タガー（Tagger）」。これは、一般に、いわゆる隠れマルコフ・モデル（Hidden Markov Model:ＨＭＭ）とビタビ（Viterbi)アルゴリズムを使用する；
・形式規則システム；
・これら２つの混合
【０００４】
市場で入手できるＰＯＳシステムはきわめて良好に機能し、きわめて高い成功率（たとえば「標準の書き言葉英語（Written Standard English）」の場合に８０％超）を示している。
【０００５】
しかしながら、統計的ＰＯＳは、十分な学習の組を生成するために、きわめて大きなコーパスを人手によってタグ付けする人間のオペレータを必要とするのに加え、それらが使用するトリグラムまたはバイグラムの頻度を学習するために使用するコーパスに依存する度合いが高い。
【０００６】
ＰＯＳタガーの中では、「制約文法（Constraint Grammar）」を使用するものがそれらの速度、それらの頑健性、およびそれらの精度の故に、特に興味深い。「制約文法」に基づく大多数のシステムは、１組の制約を表す「有向グラフ（DirectedGraph）」（「有限状態変換器（Finite State Transducer)」）を用いて曖昧性を有するテキストを表現する「非循環有向グラフ（DirectedAcyclic Graph: ＤＡＧ）」と関係（intersect)している。しかし、このような実装の重要な欠点は、グラフによる表現はきわめて複雑であり、プログラミングするのが困難であるとともにそれらの実装においてマシンに依存する場合の多い複雑なアルゴリズムを必要とする、という点である。これらの問題により、このようなシステムの使用は、そのために開発されている特定の言語に制限される。
【０００７】
したがって、必要とされるものは、上述した従来技術の欠陥を克服するためのシステムと方法である。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
したがって、より単純で、より高速で、より移植可能性の高いテキスト分析を可能にする、コンピュータによって実現可能なシステムと方法を提供することが本発明の目的である。
【課題を解決するための手段】
【０００９】
この目的は、非循環有向グラフ（Direct Acyclic Graph）を「ＤＡＧ」ストリングによって表し、単純な有限状態マシンを用いて処理する本発明によって達成される。
【００１０】
好適な実施例において、本発明の方法は、最初のストリングのマルチ・チェーンに適用される制約を表す非循環有向グラフ（Direct Acyclic Graph：ＤＡＧ）を構築する手段を有するコンピュータ・システムにおいて動作可能である。
この方法は、好ましくは、
（ａ）前記制約から正規表現を構築するステップと、
（ｂ）前記正規表現を用いて、前記最初のストリングのマルチ・チェーンにおいて、前記少なくとも１つの制約が適用される位置を探索するステップと、
（ｃ）前記最初のストリングのマルチ・チェーンを、前記制約が適用される位置に関してサブ・マルチ・チェーンに分離するステップと、
（ｄ）前記制約が適用されなくなるまで、ステップ（ｂ）およびステップ（ｃ）を各サブ・マルチ・チェーンに適用するステップとを含む。
【発明を実施するための最良の形態】
【００１１】
図１は本発明の好適な実施形態を実現するために使用する典型的なハードウェア環境を示すブロック図である。この典型的なハードウェア環境では、コンピュータ１００は特に、プロセッサ１０２、メモリ１０４（たとえばランダム・アクセス・メモリ（random access memory: ＲＡＭ））、入力装置１０６（たとえばキーボード、マウス型ポインティング装置、音声駆動型入力装置など）、ディスプレイ装置１０８（たとえばＣＲＴ、ＬＣＤディスプレイなど）、ならびに、データ記憶装置１１０（たとえばハード・ディスク駆動装置、フロッピー（Ｒ）ディスク駆動装置、およびＣＤ−ＲＯＭ駆動装置の一部または全部など）、およびデータ通信装置１１２（たとえばモデム、ネットワーク・インターフェースなど）の一部または全部を含む。コンピュータ１００に読み取り専用メモリ（readonly memory: ＲＯＭ）、画像カード、バス・インターフェース、プリンタなどのような他の装置を取り付けることが想定されている。上述した構成要素の任意の組み合わせ、または、任意個数の様々な構成要素、周辺装置、および当技術分野で既知の他の装置をコンピュータ１００とともに使用してもよい、ということを当業者は理解しうる。コンピュータ１００はＯＳ／３９０（ＴＭ）、ＭＶＳ（ＴＭ）、ＶＭ（ＴＭ）、ＯＳ／２（ＴＭ）、ＡＩＸ（ＴＭ）、ＵＮＩＸ（ＴＭ）、ＷＩＮＤＯＷＳ（ＴＭ）、ＭＡＣＩＮＴＯＳＨ（ＴＭ）などのようなオペレーティング・システム（ＯＳ）１１４の制御の下で動作する。コンピュータ１００の電源をオンする、またはコンピュータ１００をリセットすると、オペレーティング・システム１１４がコンピュータ１００のメモリ１０４の中にブートされて実行の用に供される。次いで今度は、オペレーティング・システム１１４が制約チェック・プログラム１２０のような少なくとも１つのコンピュータ・プログラムの実行を制御する。この制約チェック・プログラムは、正規表現とストリングのマルチ・チェーン（multi-chain)との双方から本発明の新規のＤＡＧ表現を構築するのを可能にする。ストリングのマルチ・チェーンは一般に、曖昧性を除去してストリング・マルチ・チェーン・データベース１１８に格納されている句の共通のＤＡＧ表現である最初のマルチ・チェーンから取得される。この句は、データ記憶装置１１０の上のテキスト・ファイルに格納されているテキスト、またはプログラマが入力装置１０６から対話的に入力したテキストである。
【００１２】
正規表現（regular expression）は正規表現データベース１１６に格納されている。正規表現（一般に「regexp」または「regex」と略記される）とは、ある種の構文規則（制約とも呼ばれる）に従う、ストリングから成る組全体を記述する一連のエンティティ（実体）のことである。これらの表現は、あるパターンを求めてテキストの本文を検索し、たとえば発見されたストリングを他のストリングで置換するために、多くのテキスト・エディタやユーティリティによって使用されている。精通することが必要になるマッチングの基本型がいくつかある。すなわち、文字マッチング、繰り返しマッチング、および位置マッチングである。したがって、正規表現は、実質的には、マッチングする可能性のあるストリングの組のための規則を指定することを可能にする、小さな高度に専門化したプログラミング言語である。正規表現はＵｎｉｘ（Ｒ）オペレーティング・システムおよびＵｎｉｘ（Ｒ）に類するものにおいて頻繁に使用されている（Ｕｎｉｘ（Ｒ）はユニックス・システム・ラボラトリ（UnixSystem Laboratories）の商標である）。正規表現についてさらに学習するには、「コンパイラ、原理、手法、およびツール」（アディソン・ウエズレイ）なる題名のＡ・アホ、Ｒ・セシ、およびＪ・ウルマンの著書（thebook of A. Aho, R. Sethi. J. Ullman titled "Compilers, Principles,Techniques and Tools") を参照するとよい。
【００１３】
正規表現データベース１１６、ストリング・マルチ・チェーン・データベース１１８、および制約チェック・プログラム１２０は、プロセッサ１０２によってアクセスされ、解釈され、または実行されることに応じて、コンピュータ１００に、本発明を実装または使用するのに必要なステップを実行させる論理もしくはデータまたは双方から成る。一般に、正規表現データベース１１６、ストリング・マルチ・チェーン・データベース１１８、および制約チェック・プログラム１２０は、メモリ１０４、データ記憶装置１１０、もしくは、通信装置１１２を介してコンピュータ１００に接続された遠隔の装置、キァリア、または媒体に記録され、それから読み取られる。したがって、本発明は標準のプログラミング手法または工学手法を用いてソフトウェア、ファームウェア、ハードウェアまたはこれらの任意の組み合わせを生成する方法、装置、または製品として実現しうる。ここで使用する用語「製品（article of manufacture）」（あるいは代替可能なものとして「コンピュータ・プログラム製品（computerprogram product）」）は、装置、キァリア、または媒体に記録され、または、それから読み取りうる論理もしくはデータまたは双方を包含することが意図されている。無論、本発明の範囲を逸脱することなく、この構成には多くの変更をなしうる、ということを当業者は理解しうる。図１に示す典型的な環境は本発明を限定することを意図されていない、ということを当業者は理解しうる。実際、本発明の範囲を逸脱することなく、他の代替可能なハードウェア環境とプログラムを使用しうる、ということを当業者は理解しうる。
【００１４】
図２を参照する前に、「グラフ（Graph)」、「有向グラフ（DirectedGraph）」、および「非循環有向グラフ（DirectedAcyclic Graph）」に関する背景の概観を最初に行う。有限状態マシン（finite state machine: ＦＳＭ）または有限状態オートマトン（finitestate automaton: ＦＳＡ）とは、有限かつ不変の量の記憶（状態）のみを有する、計算と言語の研究において使用される抽象マシンのことである。それは有向グラフとして概念化することができる。有限個数の状態があり、各状態は０個または１個以上の状態への遷移を有する。どの遷移が後続するのかを決定する入力ストリングがある。グラフはオブジェクトの間の１組の接続を記述している。各オブジェクトはノードと呼ばれる。それは頂点と呼ぶこともできる。接続自体はエッジ（edge)または弧（arc)と呼ばれる。ルート・ノードがツリー型データ構造における最上位のノードである。このルート・ノードを通じてツリーの中のすべてのデータにアクセスすることができる。一部のツリーでは、ルート・ノードは（通常の個数よりも多い、あるいは少ない個数の子ノードを許可される、といった）特別の属性を有する。リーフ・ノードとは子を有さない、ツリーのノードのことである。多くの場合、リーフ・ノードはルート・ノードから最も離れているノードである。一部のツリーはリーフ・ノードにのみデータを格納する。親ノードすなわち先祖ノードとは少なくとも１つの子ノードにリンクしている、ツリー型データ構造の中のノードのことである。子ノードすなわち子孫ノードとは親ノードによってリンクされている、ツリー型データ構造の中のノードのことである。
【００１５】
曖昧さを無くすべき句を表す「非循環有向グラフ（Directed Acyclic Graph: ＤＡＧ）」は上述したマルチ・チェーンと呼ばれるある種の形をしている。そして、マルチ・チェーンとは次に示す属性を有する非循環有向グラフのことである。すなわち、
・マルチ・チェーンはただ１つのルートとただ１つのリーフを有する。
・所定のノードに由来する各頂点は同一のノードに至る。
【００１６】
下に示すのは、ノード１がルートであり、ノード６がリーフであるマルチ・チェーン（multi-chain:ＭＣ）のグラフによる記述である。
【００１７】
【数１】
2006518502.tif 000003
【００１８】
上に示す典型例から、このようなマルチ・チェーンに制約（すなわち所定の規則）がどのように適用されるのかを説明しよう。制約として、順番列（sequence）「ａｃ」は上のマルチ・チェーンから排除されるべきである、と明言しよう。当業者（skilled man)はこの制約を次に示すグラフ（ＣＴ）によって容易に表すことができる。すなわち、
【００１９】
【数２】
2006518502.tif 000004
【００２０】
このグラフ表示において、記号「＠」は「同一のノードに由来するエッジにラベルを付したもの以外の任意の文字」を意味する。ノード１はルート（始点（start)ルート）であり、ノード２は終点（end)ノードである。さらに、ノード３はシンク（sink、吸い込み）、すなわち湧き出し（issue)を有さないノードを表している。
【００２１】
前述のグラフＭＣとＣＴとの交差により、以下の「非循環有向グラフ（Directed Acyclic Graph: ＤＡＧ）」が導かれる。
【００２２】
【数３】
2006518502.tif 000005
【００２３】
このＤＡＧには、予期される結果として、順番列「ａｃ」を含む経路は存在しない。それは５つのマルチ・チェーン（ＭＣ１〜ＭＣ５）に分解することができる。すなわち、
【００２４】
【数４】
2006518502.tif 000006
【００２５】
【数５】
2006518502.tif 000007
【００２６】
【数６】
2006518502.tif 000008
【００２７】
【数７】
2006518502.tif 000009
【００２８】
【数８】
2006518502.tif 000010
【００２９】
結果として得られる上のＤＡＧ（ＤＡＧ）の各チェーンは上の元のマルチ・チェーン（ＭＣ１〜ＭＣ５）のうちの少なくとも１つのものの中に見出される、ということを当業者は認識しうる。
【００３０】
本発明者は、現在のコンピュータによって実現しうる単純な方法を提示するために、マルチ・チェーンの特定の表現を使用してきた。したがって、マルチ・チェーンはコンピュータにおいてより容易に操作できる「ストリング（string）」式の形態で表される。たとえば、最初に図示したマルチ・チェーン（ＭＣ）は次のストリング（ＳＴ）として表現される。すなわち、
・ＳＴ＝＜ａ  ｂ  ｃ＞＜ａ  ｂ＞＜ａ  ｂ  ｃ＞＜ａ  ｃ＞＜ａ  ｃ＞
ここで、「＜ａ  ｂ  ｃ＞」はエッジ「ａ」、「ｂ」、「ｃ」によってリンクされている、ということを意味する。
したがって、この定式化の場合、上のストリング（ＳＴ）はノード（すなわち位置）２はノード（すなわち位置）１からエッジ「ａ」、「ｂ」、「ｃ」のうちのいずれか１つによって到達される、ということを意味する。したがって、位置３はエッジ「ａ」または「ｂ」によって到達される。位置４はエッジ「ａ」、「ｂ」、または「ｃ」によって到達される。位置５はエッジ「ａ」または「ｃ」によって到達され、そして最後の位置６はエッジ「ａ」または「ｃ」によって到達される。
【００３１】
同様に、順番列「ａｃ」を避けることを明言している制約を適用することによって得られる他のマルチ・チェーン（ＭＣ１〜ＭＣ５）はそれぞれ次のストリング（ＳＴ１〜ＳＴ５）によって表現される。すなわち、
・ＳＴ１＝＜ａ  ｂ  ｃ＞＜ａ  ｂ＞＜ｂ＞＜ｃ＞＜ａ  ｃ＞
・ＳＴ２＝＜ａ  ｂ  ｃ＞＜ａ  ｂ＞＜ａ  ｂ＞＜ａ＞＜ａ＞
・ＳＴ３＝＜ａ  ｂ  ｃ＞＜ｂ＞＜ａ  ｂ  ｃ＞＜ａ＞＜ａ＞
・ＳＴ４＝＜ａ  ｂ  ｃ＞＜ｂ＞＜ｂ  ｃ＞＜ａ  ｃ＞＜ａ＞
・ＳＴ５＝＜ａ  ｂ  ｃ＞＜ｂ＞＜ｂ  ｃ＞＜ｃ＞＜ａ  ｃ＞
【００３２】
次に図２を参照すると、本発明者はストリング（ＳＴ）のマルチ・チェーン（２０６）として表される最初のマルチ・チェーン（ＭＣ）に定義済みの制約（２００）を適用するときに、ストリングのマルチ・チェーン（ＳＴ１〜ＳＴ５）を直接に抽出する方法を案出した。第１の操作（２０２）において、マルチ・チェーン中の所望の制約（２００）を検出するのを可能にする正規表現を構築する。上の例から、順番列「ａｃ」を検出する場合、対応する正規表現を次のように構築する。すなわち、
Ｐ＝“＜”＾（＠＊“＞”＠＊）“ａ”＾（＠＊“＞”＠＊）“＞”“＜” ＾（＠＊“＞”＠＊）“ｃ”＾（＠＊“＞”＠＊）“＞”
ここで、
・記号「＠」は任意の文字を意味し；
・「‘パターン（pattern)’＊」は、正規表現「‘パターン（pattern)’」の０個または数個の発生を意味する周知のスター（star）演算子であり、したがって「＠＊」は、任意の文字が０個または数個発生することを意味し；
・「＾('パターン（pattern)’) 」は正規表現「 'パターン（pattern)'」とマッチングしない任意のものを意味し、したがって、「＾（＠＊“＞”＠＊）」は文字「＞」を含まない任意のストリングを意味し；
・２つの式の連結は間接的であるから、「“＜”＾（＠＊“＞”＠＊）“ａ”＾（＠＊“＞”＠＊）“＞”」は、文字「＜」には文字「＞」を含まない任意のものが続き、その後、文字「ａ」、文字「＞」を含まない任意のもの、文字「＞」が順に続くことを意味する。
【００３３】
このように、正規表現「Ｐ」は区切り記号（デリミタ）「＜」と「＞」の間に「ａ」を含む何ものかであって、区切り記号「＜」と「＞」の間に「ｃ」を含む何ものかが後続することを意味する。パターン「Ｐ」は位置１から、最初のストリング「ＳＴ」の中のサブストリング「＜ａ  ｂ＞＜ａ  ｂ  ｃ＞」とマッチングする。そして、「ａｃ」はマルチ・チェーン「＜ａｂ＞＜ａ  ｂ  ｃ＞」の中に存在する可能性のあるチェーンであるから、このサブストリングは制約に違反する。このマルチ・チェーンの中の（「ａｃ」以外の）他のチェーンは２つのマルチ・チェーンの中に含まれている。すなわち、
・＜ｂ＞＜ａ  ｂ  ｃ＞
・＜ａ  ｂ＞＜ａ  ｂ＞
【００３４】
次のステップでは、本発明のＤＡＧビルダ・アルゴリズムの１回目のラン（実行）において、正規表現によって表された制約（ブロック２０４）を最初のストリング「ＳＴ」（２０６）に適用する。これにより、新たなストリング（すなわちサブ・マルチ・チェーン）、検討中の例では「ＳＴＡ１」と「ＳＴＡ２」が提示される。すなわち、
・ＳＴＡ１＝＜ａ  ｂ  ｃ＞＜ｂ＞＜ａ  ｂ  ｃ＞＜ａ  ｃ＞＜ａ  ｃ＞
・ＳＴＡ２＝＜ａ  ｂ  ｃ＞＜ａ  ｂ＞＜ａ  ｂ＞＜ａ  ｃ＞＜ａ  ｃ＞
【００３５】
パターン「Ｐ」は位置３から、「ＳＴＡ１」のサブストリング「＜ａ  ｂ  ｃ＞＜ａｃ＞」とマッチングする。ＤＡＧビルダ・アルゴリズムの２回目のランを「ＳＴＡ１」について実行すると、新たなストリング「ＳＴＡ１１」と「ＳＴＡ１２」が得られる。すなわち、
・ＳＴＡ１１＝＜ａ  ｂ  ｃ＞＜ｂ＞＜ｂ  ｃ＞＜ａ  ｃ＞＜ａ  ｃ＞
・ＳＴＡ１２＝＜ａ  ｂ  ｃ＞＜ｂ＞＜ａ  ｂ  ｃ＞＜ａ＞＜ａ  ｃ＞
【００３６】
同様に、ストリングのマルチ・チェーン「ＳＴＡ２」では、パターン「Ｐ」は位置３においてマッチングする。そして、ＤＡＧビルダ・アルゴリズムを実行すると、新たなストリング「ＳＴＡ２１」と「ＳＴＡ２２」が得られる。すなわち、
・ＳＴＡ２１＝＜ａ  ｂ  ｃ＞＜ａ  ｂ＞＜ｂ＞＜ａ  ｃ＞＜ａ  ｃ＞
・ＳＴＡ２２＝＜ａ  ｂ  ｃ＞＜ａ  ｂ＞＜ａ  ｂ＞＜ａ＞＜ａ  ｃ＞
【００３７】
位置４においてパターンがマッチングする場合には、「ＳＴＡ１１」についてＤＡＧビルダを実行する。そして、新たなストリング「ＳＴＡ１１１」と「ＳＴＡ１１２」が得られる。すなわち、
・ＳＴＡ１１１＝＜ａ  ｂ  ｃ＞＜ｂ＞＜ｂ  ｃ＞＜ｃ＞＜ａ  ｃ＞
・ＳＴＡ１１２＝＜ａ  ｂ  ｃ＞＜ｂ＞＜ｂ  ｃ＞＜ａ  ｃ＞＜ａ＞
【００３８】
同様に、ストリングのマルチ・チェーン「ＳＴＡ１２」では、パターン「Ｐ」は位置４においてマッチングする。そして、ＤＡＧビルダ・アルゴリズムを実行すると、新たなストリング「ＳＴＡ１２１」と「ＳＴＡ１２２」が得られる。すなわち、
・ＳＴＡ１２１＝＜ａ  ｂ  ｃ＞＜ｂ＞＜ａ  ｂ  ｃ＞＜ａ＞＜ａ＞
・ＳＴＡ１２２＝＜ａ  ｂ  ｃ＞＜ｂ＞＜ａ  ｂ  ｃ＞＜＞＜ａ  ｃ＞
【００３９】
「ＳＴＡ１２２」は（空の括弧があるから）有効なストリングではない、という点に留意すべきである。
【００４０】
「ＳＴＡ１２」については、位置４においてパターンがマッチングする場合に「ＳＴＡ２１」についてＤＡＧビルダを実行する。そして、新たなストリング「ＳＴＡ２１１」と「ＳＴＡ２１２」が得られる。すなわち、
・ＳＴＡ２１１＝＜ａ  ｂ  ｃ＞＜ａ  ｂ＞＜ｂ＞＜ｃ＞＜ａ  ｃ＞
・ＳＴＡ２１２＝＜ａ  ｂ  ｃ＞＜ａ  ｂ＞＜ｂ＞＜ａ＞＜ａ＞
【００４１】
最後に、位置４においてパターンがマッチングする場合に「ＳＴＡ２２」についてＤＡＧビルダを実行する。そして、新たなストリング「ＳＴＡ２２１」と「ＳＴＡ２２２」が得られる。すなわち、
・ＳＴＡ２２１＝＜ａ  ｂ  ｃ＞＜ａ  ｂ＞＜ａ  ｂ＞＜＞＜ａ  ｃ＞（これは有効ではない）
・ＳＴＡ２２２＝＜ａ  ｂ  ｃ＞＜ａ  ｂ＞＜ａ  ｂ＞＜ａ＞＜ａ＞
【００４２】
そして、「ＳＴＡ２２１」は（空の括弧があるから）有効なストリングではない、という点に留意すべきである。
【００４３】
ＤＡＧビルダの先行するいくつかの実行は、それについてパターン「Ｐ」がそれ以上マッチングしない最終のストリングをもたらしている。一部のものは有効でないもの（ＳＴＡ１２２とＳＴＡ２２１）として、あるいは、重複しているもの（ＳＴＡ２２２の中に含まれているＳＴＡ２１２）として無視される。したがって、ＤＡＧビルダによって得られる最終の有効なストリングは、以下のようになる。
・ＳＴＡ１１１＝＜ａ  ｂ  ｃ＞＜ｂ＞＜ｂ  ｃ＞＜ｃ＞＜ａ  ｃ＞
・ＳＴＡ１１２＝＜ａ  ｂ  ｃ＞＜ｂ＞＜ｂ  ｃ＞＜ａ  ｃ＞＜ａ＞
・ＳＴＡ１２１＝＜ａ  ｂ  ｃ＞＜ｂ＞＜ａ  ｂ  ｃ＞＜ａ＞＜ａ＞
・ＳＴＡ２１１＝＜ａ  ｂ  ｃ＞＜ａ  ｂ＞＜ｂ＞＜ｃ＞＜ａ  ｃ＞
・ＳＴＡ２２２＝＜ａ  ｂ  ｃ＞＜ａ  ｂ＞＜ａ  ｂ＞＜ａ＞＜ａ＞
【００４４】
そして、定義済みの制約を適用するときに、これらのストリングのマルチ・チェーンは、最初のマルチ・チェーン（ＭＣ）に対応するストリングのマルチ・チェーン（ＳＴ１〜ＳＴ５）にそれぞれ対応している、ということを認識すべきである。
【００４５】
次に、本発明のより一般化した記述を行う。制約文法は主要な２種類の規則を使用する、ということは当業者によって周知である。すなわち、
・所定の式は所定の文脈には出現しえない、ということを明言する負の規則。一般的に使用されている定式化においては、このような規則は次の仕方で表現される。
Ｃ  ＜＝  Ｌ＿Ｒ
これは正規表現「Ｃ」は正規表現「Ｌ」と正規表現「Ｒ」との間に出現しえない、ということを意味する。
・所定の式は所定の文脈には必須である、ということを明言する正の規則。一般的に使用されている定式化においては、このような規則は次の仕方で表現される。
Ｃ  ＝＞  Ｌ＿Ｒ
これは正規表現「Ｃ」は正規表現「Ｌ」と正規表現「Ｒ」との間に必須である、ということを意味する。
【００４６】
正規表現「Ｌ」、「Ｃ」、および「Ｒ」は、ノード間の基本的な接続を記述する正規表現、たとえば次式に基づいて作成される。
・＜ｂ＞＝“＜”＾（＠＊（“＞”｜“＜ｂ”｜“ｂ”）＠＊）（“＜ｂ”｜“ｂ”）＾（＠＊（“＞”｜“＜ｂ”｜“ｂ”）＠＊）“＞”
これは「ｂ」なるラベルを付されたエッジを含む２つのノード間の接続、たとえば、
・＜ｂ  ｃ＞、＜ａ  ｂ  ｃ＞、または＜ｂ＞を意味するが、しかし、
・＜ａ  ｃ＞または＜ａ＞を意味しない。
【００４７】
あるいは、正規表現ビルダは３種類のストリングを生成するように設計されている。すなわち、
・結果として得られる第１のストリングの場合、それは「“＜”」、「“＞”」、「“＜ｂ”」、または「“ｂ”」のような明示的な表現のみを書き替えることになり、メタ文字「＠」がマッチングするすべてのものを消去することになる。このように、評価プログラムは「ＵＮＩＸ（Ｒ）」において周知の「ｓｅｄ」プログラムまたは周知の「ＰＥＲＬ」プログラムの置換コマンドのように振る舞う。それは「ｂ」とデリミタ「＜」および「＞」とを除くすべての文字を消去する。それはこの例の場合、この定式化では「ｓ／＜［＾＜ｂ］＊ｂ［＾＜ｂ］＊＞／＜ｂ＞／」と書くことができる。
・結果として得られる第２のストリングの場合、それはデリミタ「＜」および「
＞」、ならびに「ｂ」を除くすべての文字のみを書き替えることになる。ＰＥＲ
Ｌ言語では、これを次のように書くことができる。すなわち、
ｓ／＜（［＾＜ｂ］＊）ｂ（［＾＜ｂ］＊）＞／＜＄１＄２＞／
・結果として得られる最後のストリングはマッチングされたストリング自体である。
【００４８】
各エッジごとに、分析することになっているマルチ・チェーンの中で遭遇する可能性のある「ｘ」は基本正規表現「＜ｘ＞」に対応しているのが望ましい。このように、上の段落で与えた例は基本正規表現「＜ａ＞」、「＜ｂ＞」、および「＜ｃ＞」を与える。したがって、この同じ例における、順番列「ａｃ」を避ける規則は次のように書かれる。
・＜ａ＞  ＜＝  ＿  ＜ｃ＞
【００４９】
この規則から、次の正規表現を構築しうる。
・０：“＜Ｌ＞”＜ａ＞  ０：“＜Ｃ＞”＜ｃ＞  ０：“＜Ｒ＞”
ここで、「＜Ｌ＞」、「＜Ｃ＞」、および「＜Ｒ＞」はマッチングしたマルチ・チェーンを左部、中央部、および右部に分離するのを可能するタグである（「０：“＜ｘｙｚ＞”」はストリング「ｘｙｚ」を生成することを意味する）。この表現を次のストリングに適用する。すなわち、
・ＭＣ＝＜ａ  ｂ  ｃ＞＜ａ  ｂ＞＜ａ  ｂ  ｃ＞＜ａ  ｃ＞＜ａ  ｃ＞
【００５０】
上記ビルダを実行すると、第１の位置から、以下の３つのストリングが得られる。
・ＭＣ１−１  ＝  ＜Ｌ＞＜ａ＞＜Ｃ＞＜＞＜Ｒ＞
・ＭＣ１−２  ＝  ＜Ｌ＞＜ｂ  ｃ＞＜Ｃ＞＜ａ  ｂ＞＜Ｒ＞
・ＭＣ１−３  ＝  ＜Ｌ＞＜ａ  ｂ  ｃ＞＜Ｃ＞＜ａ  ｂ＞＜Ｒ＞
【００５１】
「＜Ｃ＞」と「＜Ｒ＞」との間の接続は空であるから、この規則はこの位置からは機能しない。
【００５２】
第２の位置から、表現「ＭＣ」は次に示すものをもたらす。すなわち、
・ＭＣ２−１  ＝  ＜Ｌ＞＜ａ＞＜Ｃ＞＜ｃ＞＜Ｒ＞
・ＭＣ２−２  ＝  ＜Ｌ＞＜ｂ＞＜Ｃ＞＜ａ  ｂ＞＜Ｒ＞
・ＭＣ２−３  ＝  ＜Ｌ＞＜ａ  ｂ＞＜Ｃ＞＜ａ  ｂ  ｃ＞＜Ｒ＞
【００５３】
これら３つのストリングから、マルチ・チェーン「＜ａ  ｂ＞＜ａ  ｂ  ｃ＞」におけるチェーン「＜ａ＞＜ｂ＞」の出現を避けるのに必要とされる２つのマルチ・チェーンを構築する。すなわち、
・「＜ｂ＞＜ａ  ｂ  ｃ＞」。これは、「＜ａ＞」以外の他の何かに続くすべてのものは上記規則によって影響されないからである。
・「＜ａ＞＜ａ  ｂ＞」。これは、「＜ａ＞」に続くすべてのものは「ｃ」を含んではいけないからである。
【００５４】
したがって、アルゴリズム全体は次のようになる。すなわち、
まず、制約文法の各規則（２００）ごとに、対応する正規表現を構築する。すなわち、
各規則「Ｒ＝Ｃ＜＝Ｌ_Ｒ」または「Ｒ＝Ｃ＝＞Ｌ_Ｒ」ごとに、
正規表現「Ｐ＝Ｌ  ０：“＜Ｌ＞”Ｃ  ０：“＜Ｃ＞”Ｒ  ０：“＜Ｒ＞”」を構築する。
【００５５】
したがって、マルチ・チェーン「ＭＣ」（２０６）を分析するには、「分岐（Branch）」がマルチ・チェーンの空のリストであり、「位置（Position）」が各規則番号および分析番号の各分岐に関して、分岐の中で、規則を適用する位置を与える空の２倍のエントリ・リストであり、「規則（Rule）」が規則の性質の標識（正または負）を伴う、規則の組から事前に構築した正規表現から成るリストであるように設定する。
【００５６】
本方法は、「規則（Rule）」リストに由来する規則と、「分岐（Branch）」に由来する、分析の分岐と、分岐において規則を適用する「位置（Position）」に由来する位置とを引数としてとることにより、上述した演算を実行する機能「applyRule（規則の適用）」（２０４）を実装するのが望ましい。
【００５７】
上述したように、規則がマッチングする限り、分析すべきマルチ・チェーンについてＤＡＧビルダ機能（２０８）を実行する。最後のストリング（すなわち最後の残存する分岐）が得られたときに、プロセスは停止する。
【００５８】
アルゴリズムをその基本モードにおいて記述したけれども、たとえば規則を適用できる、分岐における最初の位置を効率的に探索するような多くの方法、あるいは、左の文脈（left context）によって規則をグループ化している、規則の同じ左の文脈を利用することにより、多くの変更と改良をなすことができる。さらに、別の代案として、動作不能と印を付された分岐を考慮することにより、位置と分岐の管理を改良することができる。
【００５９】
この手法の利点は、それを実装するのに文字から成るストリングを必要とするのみであるから、その単純性と移植可能性に関係がある。本発明の原理は文献に普通に記載されている、ストリングに関する単純なパターン・マッチングの使用に基づいており、その主要な概念はマルチ・チェーンを表す１組のストリングによってＤＡＧを記述することある。
【００６０】
最後に、本発明を、特にその好適な実施形態を参照して示すとともに記述したけれども、本発明の本旨と範囲を逸脱することなく、形態と詳細において様々な変更をなしうる、ということを当業者は認識すべきである。
【図面の簡単な説明】
【００６１】
【図１】本発明の好適な実施形態を実現するのに使用する典型的なハードウェア環境を示すブロック図である。
【図２】本発明の方法によって実行されるステップを示すフローチャートである。
【符号の説明】
【００６２】
１００  コンピュータ
１０２  プロセッサ
１０４  メモリ
１０６  入力装置
１０８  ディスプレイ装置
１１０  データ記憶装置
１１２  データ通信装置
１１４  オペレーティング・システム
１１６  正規表現
１１８  ストリング・マルチ・チェーンＤＢ
１２０  制約チェック・プログラム
【図１】
2006518502.tif 000011
【図２】
2006518502.tif 000012
【国際調査報告】
2006518502.tif 000013
2006518502.tif 000014