(57)【要約】  本明細書では、正規表現の自動生成に関連する技術を開示する。いくつかの実施形態では、正規表現生成器は、１つまたは複数のキャラクタシーケンスを含む入力データを受け取ることができる。正規表現生成器は、キャラクタシーケンスを正規表現コードおよび／またはスパンデータ構造のセットに変換することができる。正規表現生成器は、正規表現コードおよび／またはスパンのセットによって共有される最長共通サブシーケンスを識別することができ、最長共通サブシーケンスに基づいて正規表現を生成することができる。
2021527260.tif 000002
【特許請求の範囲】
【請求項１】
正規表現を生成する方法であって、
１つまたは複数のプロセッサを備える正規表現生成器が、１つまたは複数の陽性のキャラクタシーケンスを含む第１の入力データを受け取ることを備え、前記１つまたは複数の陽性のキャラクタシーケンスの各々は、前記正規表現生成器によって生成される正規表現によってマッチされるべき陽性例に対応し、前記方法はさらに、
前記正規表現生成器が第１の正規表現を生成することを備え、前記第１の正規表現は前記１つまたは複数の陽性例の各々にマッチし、前記方法はさらに、
前記正規表現生成器が、１つまたは複数の陰性のキャラクタシーケンスを含む第２の入力データを受け取ることを備え、前記１つまたは複数の陰性のキャラクタシーケンスの各々は、前記正規表現生成器によって生成される前記正規表現によってマッチされるべきでない陰性例に対応し、前記方法はさらに、
前記第２の入力データを受け取ることに応答して、前記１つまたは複数の陰性例の各々が前記第１の正規表現とマッチするかどうかを判断することと、
前記陰性例のうちの少なくとも１つが前記第１の正規表現とマッチすると判断したことに応答して、
（ａ）前記第１の正規表現内のある位置においてキャラクタのサブシーケンスを判断することと、
（ｂ）前記正規表現内の前記位置において前記１つまたは複数の陽性例を前記１つまたは複数の陰性例と区別する置換キャラクタシーケンスを判断することと、
（ｃ）前記第１の正規表現内の前記判断されたキャラクタのサブシーケンスを前記置換キャラクタシーケンスに置き換えることによって、前記第１の正規表現を更新することとを備える、正規表現を生成する方法。
【請求項２】
前記第１の正規表現内の前記位置において前記キャラクタのサブシーケンスを判断することは、
前記第１の正規表現内で前記位置を判断することと、
テキストフラグメントを、前記第１の正規表現内の前記位置に対応する前記１つまたは複数の陽性例の各々および前記１つまたは複数の陰性例の各々から取り出すことと、
前記キャラクタのサブシーケンスを、前記第１の正規表現内の前記位置における１つまたは複数のキャラクタとして判断することとを含み、それから、前記１つまたは複数の陽性例は前記１つまたは複数の陰性例と区別可能である、請求項１に記載の方法。
【請求項３】
前記第１の正規表現内において前記位置を判断することは、
前記１つまたは複数の陽性例が前記１つまたは複数の陰性例と区別可能である前記第１の正規表現のプレフィックス部分において第１の数のキャラクタを判断することと、
前記１つまたは複数の陽性例が前記１つまたは複数の陰性例と区別可能である前記第１の正規表現のサフィックス部分において第２の数のキャラクタを判断することと、
前記第１の数のキャラクタまたは前記第２の数のキャラクタがより短いかどうかに少なくとも部分的に基づいて、前記第１の正規表現内の前記位置として前記プレフィックス部分または前記サフィックス部分のいずれかを選択することとを含む、請求項２に記載の方法。
【請求項４】
前記第１の正規表現内において前記位置を判断することは、さらに、
前記第１の正規表現内において前記位置を判断するために、式を実行することを含み、前記式は、前記第１の正規表現の前記サフィックス部分よりも前記プレフィックス部分に重み付けする、請求項３に記載の方法。
【請求項５】
前記第１の正規表現内の前記判断された位置は、前記第１の正規表現のプレフィックス部分または前記第１の正規表現のサフィックス部分に対応しないミッドスパン位置である、請求項２に記載の方法。
【請求項６】
前記置換キャラクタシーケンスを判断することは、複数の置換キャラクタシーケンスを判断することを含み、前記第１の正規表現を更新することは、前記第１の正規表現内の前記判断されたキャラクタのサブシーケンスを前記複数の置換キャラクタシーケンスに置き換えることを含む、請求項２に記載の方法。
【請求項７】
前記置換キャラクタシーケンスを判断することは、
前記１つまたは複数の陽性例が前記１つまたは複数の陰性例と区別可能である、前記第１の正規表現内の前記位置における第１の数のキャラクタと、各々が前記第１の数のキャラクタを有する対応する第１の数の置換キャラクタシーケンスとを判断することと、
前記１つまたは複数の陽性例が前記１つまたは複数の陰性例と区別可能である、前記第１の正規表現内の前記位置における第２の数のキャラクタと、各々が前記第２の数のキャラクタを有する対応する第２の数の置換キャラクタシーケンスとを判断することと、
（ａ）前記第１の数のキャラクタのサイズおよび前記第２の数のキャラクタのサイズと、（ｂ）前記対応する第１の数の置換キャラクタシーケンスのサイズおよび前記対応する第２の数の置換キャラクタシーケンスのサイズとに基づいて、前記第１の正規表現内の前記置換キャラクタシーケンスのために前記第１の数のキャラクタまたは前記第２の数のキャラクタのいずれかを選択することとを含む、請求項１に記載の方法。
【請求項８】
正規表現を生成するためのシステムであって、
１つまたは複数のプロセッサを含む処理ユニットと、
命令を記憶するメモリとを備え、前記命令は、前記処理ユニットによって実行されると、前記システムに、
１つまたは複数の陽性のキャラクタシーケンスを含む第１の入力データを受け取らせ、前記１つまたは複数の陽性のキャラクタシーケンスの各々は、正規表現生成器によって生成される正規表現によってマッチされるべき陽性例に対応し、前記命令は、さらに、前記処理ユニットによって実行されると、前記システムに、
第１の正規表現を生成させ、前記第１の正規表現は前記１つまたは複数の陽性例の各々にマッチし、前記命令は、さらに、前記処理ユニットによって実行されると、前記システムに、
１つまたは複数の陰性のキャラクタシーケンスを含む第２の入力データを受け取らせ、前記１つまたは複数の陰性のキャラクタシーケンスの各々は、前記正規表現生成器によって生成される前記正規表現によってマッチされるべきでない陰性例に対応し、前記命令は、さらに、前記処理ユニットによって実行されると、前記システムに、
前記第２の入力データを受け取ることに応答して、前記１つまたは複数の陰性例の各々が前記第１の正規表現とマッチするかどうかを判断させ、
前記陰性例のうちの少なくとも１つが前記第１の正規表現とマッチすると判断したことに応答して、
（ａ）前記第１の正規表現内のある位置においてキャラクタのサブシーケンスを判断させ、
（ｂ）前記正規表現内の前記位置において前記１つまたは複数の陽性例を前記１つまたは複数の陰性例と区別する置換キャラクタシーケンスを判断させ、
（ｃ）前記第１の正規表現内の前記判断されたキャラクタのサブシーケンスを前記置換キャラクタシーケンスに置き換えることによって、前記第１の正規表現を更新させる、正規表現を生成するためのシステム。
【請求項９】
前記第１の正規表現内の前記位置において前記キャラクタのサブシーケンスを判断することは、
前記第１の正規表現内で前記位置を判断することと、
テキストフラグメントを、前記第１の正規表現内の前記位置に対応する前記１つまたは複数の陽性例の各々および前記１つまたは複数の陰性例の各々から取り出すことと、
前記キャラクタのサブシーケンスを、前記第１の正規表現内の前記位置における１つまたは複数のキャラクタとして判断することとを含み、それから、前記１つまたは複数の陽性例は前記１つまたは複数の陰性例と区別可能である、請求項８に記載のシステム。
【請求項１０】
前記第１の正規表現内において前記位置を判断することは、
前記１つまたは複数の陽性例が前記１つまたは複数の陰性例と区別可能である前記第１の正規表現のプレフィックス部分において第１の数のキャラクタを判断することと、
前記１つまたは複数の陽性例が前記１つまたは複数の陰性例と区別可能である前記第１の正規表現のサフィックス部分において第２の数のキャラクタを判断することと、
前記第１の数のキャラクタまたは前記第２の数のキャラクタがより短いかどうかに少なくとも部分的に基づいて、前記第１の正規表現内の前記位置として前記プレフィックス部分または前記サフィックス部分のいずれかを選択することとを含む、請求項９に記載のシステム。
【請求項１１】
前記第１の正規表現内において前記位置を判断することは、さらに、
前記第１の正規表現内において前記位置を判断するために、式を実行することを含み、前記式は、前記第１の正規表現の前記サフィックス部分よりも前記プレフィックス部分に重み付けする、請求項１０に記載のシステム。
【請求項１２】
前記第１の正規表現内の前記判断された位置は、前記第１の正規表現のプレフィックス部分または前記第１の正規表現のサフィックス部分に対応しないミッドスパン位置である、請求項９に記載のシステム。
【請求項１３】
前記置換キャラクタシーケンスを判断することは、複数の置換キャラクタシーケンスを判断することを含み、前記第１の正規表現を更新することは、前記第１の正規表現内の前記判断されたキャラクタのサブシーケンスを前記複数の置換キャラクタシーケンスに置き換えることを含む、請求項９に記載のシステム。
【請求項１４】
前記置換キャラクタシーケンスを判断することは、
前記１つまたは複数の陽性例が前記１つまたは複数の陰性例と区別可能である、前記第１の正規表現内の前記位置における第１の数のキャラクタと、各々が前記第１の数のキャラクタを有する対応する第１の数の置換キャラクタシーケンスとを判断することと、
前記１つまたは複数の陽性例が前記１つまたは複数の陰性例と区別可能である、前記第１の正規表現内の前記位置における第２の数のキャラクタと、各々が前記第２の数のキャラクタを有する対応する第２の数の置換キャラクタシーケンスとを判断することと、
（ａ）前記第１の数のキャラクタのサイズおよび前記第２の数のキャラクタのサイズと、（ｂ）前記対応する第１の数の置換キャラクタシーケンスのサイズおよび前記対応する第２の数の置換キャラクタシーケンスのサイズとに基づいて、前記第１の正規表現内の前記置換キャラクタシーケンスのために前記第１の数のキャラクタまたは前記第２の数のキャラクタのいずれかを選択することとを含む、請求項８に記載のシステム。
【請求項１５】
正規表現を生成するための非一時的なコンピュータ読取可能媒体であって、前記コンピュータ読取可能媒体は、コンピュータ実行可能命令を備え、前記コンピュータ実行可能命令は、コンピュータシステム上で実行されると、前記コンピュータシステムに、
１つまたは複数の陽性のキャラクタシーケンスを含む第１の入力データを受け取らせ、前記１つまたは複数の陽性のキャラクタシーケンスの各々は、正規表現生成器によって生成される正規表現によってマッチされるべき陽性例に対応し、前記コンピュータ実行可能命令は、さらに、前記コンピュータシステム上で実行されると、前記コンピュータシステムに、
第１の正規表現を生成させ、前記第１の正規表現は前記１つまたは複数の陽性例の各々にマッチし、前記コンピュータ実行可能命令は、さらに、前記コンピュータシステム上で実行されると、前記コンピュータシステムに、
１つまたは複数の陰性のキャラクタシーケンスを含む第２の入力データを受け取らせ、前記１つまたは複数の陰性のキャラクタシーケンスの各々は、前記正規表現生成器によって生成される前記正規表現によってマッチされるべきでない陰性例に対応し、前記コンピュータ実行可能命令は、さらに、前記コンピュータシステム上で実行されると、前記コンピュータシステムに、
前記第２の入力データを受け取ることに応答して、前記１つまたは複数の陰性例の各々が前記第１の正規表現とマッチするかどうかを判断させ、
前記陰性例のうちの少なくとも１つが前記第１の正規表現とマッチすると判断したことに応答して、
（ａ）前記第１の正規表現内のある位置においてキャラクタのサブシーケンスを判断させ、
（ｂ）前記正規表現内の前記位置において前記１つまたは複数の陽性例を前記１つまたは複数の陰性例と区別する置換キャラクタシーケンスを判断させ、
（ｃ）前記第１の正規表現内の前記判断されたキャラクタのサブシーケンスを前記置換キャラクタシーケンスに置き換えることによって、前記第１の正規表現を更新させる、非一時的なコンピュータ読取可能媒体。
【請求項１６】
前記第１の正規表現内の前記位置において前記キャラクタのサブシーケンスを判断することは、
前記第１の正規表現内で前記位置を判断することと、
テキストフラグメントを、前記第１の正規表現内の前記位置に対応する前記１つまたは複数の陽性例の各々および前記１つまたは複数の陰性例の各々から取り出すことと、
前記キャラクタのサブシーケンスを、前記第１の正規表現内の前記位置における１つまたは複数のキャラクタとして判断することとを含み、それから、前記１つまたは複数の陽性例は前記１つまたは複数の陰性例と区別可能である、請求項１５に記載のコンピュータ読取可能媒体。
【請求項１７】
前記第１の正規表現内において前記位置を判断することは、
前記１つまたは複数の陽性例が前記１つまたは複数の陰性例と区別可能である前記第１の正規表現のプレフィックス部分において第１の数のキャラクタを判断することと、
前記１つまたは複数の陽性例が前記１つまたは複数の陰性例と区別可能である前記第１の正規表現のサフィックス部分において第２の数のキャラクタを判断することと、
前記第１の数のキャラクタまたは前記第２の数のキャラクタがより短いかどうかに少なくとも部分的に基づいて、前記第１の正規表現内の前記位置として前記プレフィックス部分または前記サフィックス部分のいずれかを選択することとを含む、請求項１６に記載のコンピュータ読取可能媒体。
【請求項１８】
前記第１の正規表現内において前記位置を判断することは、さらに、
前記第１の正規表現内において前記位置を判断するために、式を実行することを含み、前記式は、前記第１の正規表現の前記サフィックス部分よりも前記プレフィックス部分に重み付けする、請求項１７に記載のコンピュータ読取可能媒体。
【請求項１９】
前記第１の正規表現内の前記判断された位置は、前記第１の正規表現のプレフィックス部分または前記第１の正規表現のサフィックス部分に対応しないミッドスパン位置である、請求項１６に記載のコンピュータ読取可能媒体。
【請求項２０】
前記置換キャラクタシーケンスを判断することは、複数の置換キャラクタシーケンスを判断することを含み、前記第１の正規表現を更新することは、前記第１の正規表現内の前記判断されたキャラクタのサブシーケンスを前記複数の置換キャラクタシーケンスに置き換えることを含む、請求項１６に記載のコンピュータ読取可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、米国特許法第１１９条（ｅ）に基づき、２０１８年６月１３日に提出された「AUTOMATED GENERATION OF REGULAR EXPRESSIONS（自動化された正規表現生成）」と題される米国仮特許出願第６２／６８４，４９８号に対する優先権を主張し、および米国特許法第１１９条（ｅ）に基づき、２０１８年１０月２２日に提出された「AUTOMATED GENERATION OF REGULAR EXPRESSIONS（自動化された正規表現生成）」と題される米国仮特許出願第６２／７４９，００１号に対する優先権を主張する。米国仮特許出願第６２／６８４，４９８号および第６２／７４９，００１号の全内容は、あらゆる目的のために参照により本明細書に組み込まれる。
【背景技術】
【０００２】
背景
ビッグデータ解析システムは、予測解析、ユーザ挙動解析、および他の高度なデータ解析に使用することができる。しかしながら、有用な結果を提供するために任意のデータ解析が効果的に実行される前に、最初のデータセットは、クリーンかつキュレートされたデータセットにフォーマットされる必要があり得る。このデータオンボード化は、多くの場合、さまざまな異なるデータソースおよび／またはデータストリームからのデータが単一のデータリポジトリにコンパイルされ得るクラウドベースのデータリポジトリならびに他のビッグデータシステムに対する課題を提示する。そのようなデータは、複数の異なるフォーマットの構造化データ、異なるデータモデルに従った半構造化データ、およびさらには非構造化データを含み得る。そのようなデータのリポジトリは、多くの場合、さまざまな異なるフォーマットおよび構造内のデータ表現を含み、重複データおよび誤ったデータを含む場合もある。これらのデータリポジトリが報告、予測モデリング、および他の解析タスクのために解析されるとき、初期データセットの低信号対雑音比は、不正確であるかまたは有用でない結果につながり得る。
【０００３】
データフォーマッティングおよび前処理の問題に対する多くの現在の解決策は、データ解析を実行する前にデータを共通のフォーマットに操作するために、データを浄化およびキュレートするための手動およびアドホック処理を含む。これらの手動処理は、特定のより小さいデータセットに対しては有効であり得るが、そのような処理は、大規模なデータセットを前処理およびフォーマットすることを試みる場合は、非効率的かつ非実用的であり得る。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
本明細書で説明される態様は、正規表現を生成するためのさまざまな技法を提供する。本明細書で使用される場合、「正規表現」は、より長い入力テキストストリング内のマッチを検索するために使用され得る、パターンを定義するキャラクタのシーケンスを指し得る。いくつかの実施形態では、正規表現は、記号のワイルドカードマッチング言語を使用して構成されてもよく、正規表現によって定義されたパターンは、キャラクタストリングとマッチするよう、および／または入力として与えられるキャラクタストリングから情報を抽出するよう、使用されてもよい。本明細書で説明するさまざまな実施形態では、データ処理システムとして実現される正規表現生成器を使用して、入力テキストデータを受信および表示し、クライアントユーザインターフェイスを介して入力テキストの特定のキャラクタサブセットの選択を受け取り、次いで、選択されたキャラクタサブセットに基づいて１つまたは複数の正規表現を生成することができる。１つまたは複数の正規表現を生成した後、正規表現エンジンを使用して、正規表現のパターンを１つまたは複数のデータセットに対してマッチさせることができる。さまざまな実施形態において、正規表現にマッチするデータは、抽出、再フォーマット、または修正などされてもよい。場合によっては、正規表現にマッチするデータに基づいて、追加の列、テーブル、または他のデータセットが作成されてもよい。
【０００５】
本明細書で説明するいくつかの態様によれば、データ処理システムを介して実現される正規表現生成器は、１つまたは複数の正規表現コードの、異なるセットによって共有される、判断された最長共通サブシーケンス（ＬＣＳ）に基づいて、正規表現を生成することができる。正規表現コード（カテゴリコードとも称され得る）は、たとえば、英語アルファベットの文字に対するL、数字に対するN、空白に対するZ、句読点に対するP、および他の記号に対するSを含み得る。１つまたは複数の正規表現コードの各セットは、ユーザインターフェイスを介して入力データとして受信された１つまたは複数のキャラクタの異なるシーケンスから変換され得る。ＬＣＳから除外される正規表現コードは、任意選択および／または代替として表され得る。いくつかの実施形態では、正規表現コードは、正規表現コードの最小発生数に関連付けられてもよい。追加または代替として、正規表現コードは、正規表現コードの最大発生数に関連付けられてもよい。たとえば、あるカテゴリコードのセットは、ＬＣＳの特定の部分が、ある文字を、もしあったとしてもせいぜい１回含む旨を示すよう、L<0,1>を含んでもよい。以下でより詳細に説明するように、入力データを中間正規表現コード（ＩＲＥＣ）として一般化することは、非常にわずかな入力データを使用することを含むさまざまな技術的利点を提供し得、それは、まだ見られていないデータにおける偽陽性マッチまたは偽陰性マッチに屈しない正規表現のほぼ即時的な生成を可能にする。
【０００６】
本明細書で説明される追加の態様によれば、正規表現は、３つ以上のキャラクタシーケンスを含む入力データに基づいて生成され得る。３つ以上のキャラクタシーケンスが入力データとして識別される場合、キャラクタシーケンスのＬＣＳを識別する正規表現生成器は、ランタイムの指数関数的な増加をもたらし得る。すべてのキャラクタシーケンスのＬＣＳを充分に機能する態様で識別するために、正規表現生成器は、２つのキャラクタシーケンスの各別個の組み合わせに対してＬＣＳアルゴリズムを実行してもよい。ＬＣＳアルゴリズムの結果に基づいて、全結合グラフを生成してもよく、各グラフノードは異なるキャラクタシーケンスを表し、各グラフエッジの長さは、グラフエッジを定義するノードのＬＣＳに対応する。次いで、全結合グラフに対して最小スパニングツリーの深さ優先のトラバースの走査を実行することによって、キャラクタシーケンスを選択する順序を判断してもよい。
【０００７】
本明細書で説明されるさらなる態様は、陽性キャラクタシーケンス例および陰性キャラクタシーケンス例の両方を含む入力に基づいて正規表現を生成することに関する。陽性例は、生成されるべき正規表現にマッチするキャラクタのシーケンスを指し得、陰性例は、生成されるべき正規表現にマッチしないキャラクタのシーケンスを指し得る。いくつかの実施形態では、陽性例および陰性例の両方が受け取られた場合、正規表現生成器は、弁別子、つまり陽性例を陰性例から区別する１つまたは複数のキャラクタの最短サブシーケンスを識別してもよい。選択された弁別子は、（たとえばカテゴリコードで表現された）最短シーケンスであってもよく、陽性または陰性のいずれかであってもよく、したがって、陽性例はマッチし、陰性例はマッチしないことになる。次いで、弁別子は、正規表現生成器によって生成される正規表現にハードコード化されてもよい。場合によっては、最短サブシーケンスは、陰性例のプレフィックス部分またはサフィックス部分に含まれてもよい。
【０００８】
本明細書で説明されるさらなる態様は、正規表現を生成するために入力データが提供され得る１つまたは複数のユーザインターフェイスに関する。いくつかの実施形態では、ユーザインターフェイスは、正規表現生成サーバに通信可能に結合されたクライアントデバイスに表示されてもよい。ユーザインターフェイスは、サーバによって、クライアントデバイスによって、またはサーバおよびクライアントにおいて実行されるソフトウェアコンポーネントの組み合わせによってプログラム的に生成され得る。ユーザインターフェイスを介して受信された入力データは、陽性例または陰性例を表し得る１つまたは複数のキャラクタシーケンスのユーザ選択に対応し得る。場合によっては、ユーザインターフェイスは、第２のキャラクタシーケンス内の第１のキャラクタシーケンスの選択を含む入力データをサポートしてもよい。たとえば、ユーザは、より大きな、以前に強調表示されたキャラクタシーケンス内の、１つまたは複数のキャラクタを強調表示することができ、第２のユーザ選択は、より大きな第１のユーザ選択のためのコンテキストを提供することができる。これは、入力データが、より高い特異性で正規表現生成器に提供されることを可能にし、正規表現生成器に「コンテキスト」を提供して、それが、偽陽性を回避する正規表現を生成できるようにすることを可能にする。ユーザインターフェイスを介してユーザがキャラクタシーケンスを選択することに応答して、正規表現生成器は正規表現を生成して表示してもよい。たとえば、ユーザがキャラクタの第１のシーケンスを強調表示すると、正規表現生成器は、キャラクタの第１のシーケンスにマッチする正規表現、ならびに他の同様のキャラクタシーケンス（たとえば、マッチするシーケンスについてユーザの意図と整合する）を生成し、表示することができる。ユーザがキャラクタの第２のシーケンスを強調表示すると、正規表現生成器は、キャラクタの第１のシーケンスとキャラクタの第２のシーケンスとの両方を包含する更新された正規表現を生成してもよい。次いで、ユーザが（たとえば第１のシーケンスまたは第２のシーケンスのいずれか内で）キャラクタの第３のシーケンスを強調表示すると、正規表現生成器は正規表現を再び更新してもよいなどとなる。
【０００９】
本明細書で説明される追加の態様によれば、正規表現は、１つまたは複数の入力シーケンス例からの最長共通サブシーケンスに基づいて生成され得るが、例のいくつかにのみ存在するキャラクタを取り扱うこともできる。いくつかの入力例においてのみ存在するキャラクタを取り扱うために、正規表現コードの最小発生数および最大発生数の両方が追跡されるスパンを定義してもよい。所与の入力例のすべてにスパンが存在しない可能性がある場合、最小発生数はゼロにセットされてもよい。次いで、これらの最小数および最大数は、正規表現マルチプリシティ構文にマッピングされ得る。最長共通サブシーケンス（ＬＣＳ）アルゴリズムを、すべての入力例には現れない「任意選択の」スパン（たとえばゼロの最小長さ）を含む、入力例から導出されたキャラクタのスパン上で実行してもよい。以下で説明するように、連続するスパンは、ＬＣＳアルゴリズムの実行中にマージされてもよい。そのような場合において、一緒に担持されている追加の任意選択のスパンが連続して出現することに終わるとき、ＬＣＳアルゴリズムは、それらの任意選択のスパン上でも同様に再帰的に実行されてもよい。
【００１０】
本明細書で説明されるさらなる態様は、正規表現生成器によって実行されるＬＣＳアルゴリズムが複数回実行されて、「正しい」正規表現（たとえば、すべての所与の陽性例と適切にマッチし、すべての所与の陰性例を適切に除外する正規表現）を生成してもよく、および／または最も望ましいもしくは最適な正規表現が選択され得る複数の正しい正規表現を生成してもよい、コンビナトリック探索に関する。いくつかの実施形態では、ＬＣＳアルゴリズムは一般に、正規表現を生成するために、入力例において右から左に実行され得る。しかしながら、比較の目的のために、および代替的な正規表現を見つけるために、ＬＣＳアルゴリズムは、入力例において逆方向に（たとえば左から右への方向で）別途実行されてもよい。たとえば、ユーザ入力として受信された例示的なキャラクタシーケンスは、それらがＬＣＳアルゴリズムを通過する前に反転されてもよく、次いで、ＬＣＳアルゴリズムからの結果を、（元のテキストフラグメントを含んで）反転して戻してもよい。さらに、いくつかの実施形態では、ＬＣＳアルゴリズムは、正規表現生成器によって、複数回、通常のキャラクタシーケンス順序および逆の順序の両方で、行の始まりでの位置指定、行の終わりでの位置固定、行の始まりまたは終わりでの位置指定なしで、実行されてもよい。したがって、場合によっては、ＬＣＳアルゴリズムは、少なくともこれら６回実行されてもよく、最短の成功裡な正規表現が、これらの実行から選択されてもよい。
【図面の簡単な説明】
【００１１】
【図１】さまざまな実施形態が実現され得る、正規表現を生成するための例示的な分散システムの構成要素を示すブロック図である。
【図２】本明細書で説明する１つまたは複数の実施形態による、ユーザインターフェイスを介して受信された入力に基づいて正規表現を生成するための処理を示すフローチャートである。
【図３】本明細書で説明する１つまたは複数の実施形態による、正規表現コードのセット上で最長共通サブシーケンス（ＬＣＳ）アルゴリズムを使用して正規表現を生成するための処理を示すフローチャートである。
【図４】本明細書で説明する１つまたは複数の実施形態による、正規表現コードのセット上で最長共通サブシーケンス（ＬＣＳ）アルゴリズムを使用して、２つのキャラクタシーケンス例に基づいて正規表現を生成するための例示的な図である。
【図５】本明細書で説明する１つまたは複数の実施形態による、より大きな正規表現コードのセット上で最長共通サブシーケンス（ＬＣＳ）アルゴリズムを使用して正規表現を生成するための処理を示すフローチャートである。
【図６】本明細書で説明する１つまたは複数の実施形態による、正規表現コードのセット上で最長共通サブシーケンス（ＬＣＳ）アルゴリズムを使用して、５つのキャラクタシーケンス例に基づいて正規表現を生成するための例示的な図である。
【図７】本明細書で説明する１つまたは複数の実施形態による、より大きな正規表現コードのセット上で最長共通サブシーケンス（ＬＣＳ）アルゴリズムについて実行の順序を判断するための処理を示すフローチャートである。
【図８Ａ】本明細書に記載する１つまたは複数の実施形態による、より大きな正規表現コードのセット上で最長共通サブシーケンス（ＬＣＳ）アルゴリズムについて実行の順序を判断するために用いられる、全結合グラフを示す。
【図８Ｂ】本明細書に記載する１つまたは複数の実施形態による、より大きな正規表現コードのセット上で最長共通サブシーケンス（ＬＣＳ）アルゴリズムについて実行の順序を判断するために用いられる、全結合グラフの最小スパニングツリー表現を示す。
【図９】本明細書に記載する１つまたは複数の実施形態による、陽性キャラクタシーケンス例および陰性キャラクタシーケンス例に基づいて正規表現を生成するための処理を示すフローチャートである。
【図１０Ａ】本明細書に記載する１つまたは複数の実施形態による、陽性キャラクタシーケンス例に基づく正規表現の生成を示す例示的なユーザインターフェイス画面である。
【図１０Ｂ】本明細書に記載する１つまたは複数の実施形態による、陽性キャラクタシーケンス例および陰性キャラクタシーケンス例に基づく正規表現の生成を示す例示的なユーザインターフェイス画面である。
【図１１】本明細書で説明する１つまたは複数の実施形態による、ユーザインターフェイス内で受信されるユーザデータ選択に基づいて正規表現を生成するための処理を示すフローチャートである。
【図１２】本明細書で説明する１つまたは複数の実施形態による、ユーザインターフェイス内で受信されるユーザデータ選択を介して、正規表現を生成し、キャプチャグループに基づいてデータを抽出する処理を示すフローチャートである。
【図１３】本明細書に記載する１つまたは複数の実施形態によるテーブル形式データディスプレイを示す例示的なユーザインターフェイス画面である。
【図１４】本明細書に記載する１つまたは複数の実施形態による、テーブル形式ディスプレイからのデータの選択に基づく正規表現およびキャプチャグループの生成を示す例示的なユーザインターフェイス画面である。
【図１５】本明細書に記載する１つまたは複数の実施形態による、テーブル形式ディスプレイからのデータの選択に基づく正規表現およびキャプチャグループの生成を示す例示的なユーザインターフェイス画面である。
【図１６Ａ】本明細書に記載する１つまたは複数の実施形態による、テーブル形式ディスプレイからの陽性例および陰性例の選択に基づく正規表現の生成を示す例示的なユーザインターフェイス画面である。
【図１６Ｂ】本明細書に記載する１つまたは複数の実施形態による、テーブル形式ディスプレイからの陽性例および陰性例の選択に基づく正規表現の生成を示す例示的なユーザインターフェイス画面である。
【図１７】本明細書に記載する１つまたは複数の実施形態による、テーブル形式ディスプレイからのデータの選択に基づく正規表現およびキャプチャグループの生成を示す別の例示的なユーザインターフェイス画面である。
【図１８】本明細書で説明する１つまたは複数の実施形態による、最長共通サブシーケンス（ＬＣＳ）アルゴリズムを使用して、任意選択のスパンを含む、正規表現を生成するための処理を示すフローチャートである。
【図１９】本明細書で説明する１つまたは複数の実施形態による、最長共通サブシーケンス（ＬＣＳ）アルゴリズムを使用して、任意選択のスパンを含む、正規表現を生成するための例示的な図である。
【図２０】本明細書で説明する１つまたは複数の実施形態による、最長共通サブシーケンス（ＬＣＳ）アルゴリズムのコンビナトリックな実行に基づいて正規表現を生成するための処理を示すフローチャートである。
【図２１】本発明のさまざまな実施形態が実現され得る例示的な分散システムの構成要素を示すブロック図である。
【図２２】本発明の実施形態によって提供されるサービスがクラウドサービスとして提供され得るシステム環境の構成要素を示すブロック図である。
【図２３】本発明の実施形態が実現され得る例示的なコンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【００１２】
詳細な説明
以下の記載では、説明を目的として、本発明のさまざまな実施形態の完全な理解のために、多数の具体的な詳細が記載される。しかしながら、本発明の実施形態は、これらの具体的な詳細のいくつかを伴わずに実施され得ることが当業者には明白であろう。他の例では、周知の構造およびデバイスがブロック図の形で示される。
【００１３】
以下の説明は、例示的な実施形態のみを提供するものであり、本開示の範囲、適用可能性、または構成を限定することを意図したものではない。むしろ、例示的な実施形態の以下の説明は、例示的な実施形態を実施するための実施可能な説明を当業者に提供するであろう。特許請求の範囲に記載されている本発明の精神および範囲から逸脱することなく、要素の機能および構成にさまざまな変更を加えることができることを理解されたい。
【００１４】
具体的な詳細が、以下の説明において、実施の形態の十分な理解を与えるよう与えられる。しかしながら、当業者には、実施の形態はこれらの具体的な詳細なしに実施されてもよいことが理解される。たとえば、回路、システム、ネットワーク、プロセスおよび他のコンポーネントは、実施の形態を不必要な詳細で曖昧にしないように、ブロック図形式におけるコンポーネントとして示され得る。他の例では、周知の回路、プロセス、アルゴリズム、構造および技術は、実施の形態を曖昧にすることを回避するために、不必要な詳細なしに示され得る。
【００１５】
さらに、個々の実施の形態は、フローチャート、フロー図、データフロー図、構造図またはブロック図として示されるプロセスとして記載され得ることが注記される。フローチャートは動作をシーケンシャルなプロセスとして記載するかもしれないが、動作の多くは並列または同時に実行され得る。加えて、動作の順序は再構成されてもよい。プロセスは、その動作が完了されるときに終結されるが、図に含まれない追加のステップを含み得る。プロセスは、方法、関数、プロシージャ、サブルーチン、サブプログラムなどに対応し得る。プロセスが関数に対応する場合では、その終結は、その関数が呼出関数または主関数に戻ることに対応し得る。
【００１６】
「コンピュータ読取可能媒体」という語は、命令および／もしくはデータを記憶するか、含むか、または担持することができるポータブルまたは固定された記憶装置、光記憶装置、ならびにさまざまな他の媒体のような非一時的媒体を含むが、それらに限定はされない。コードセグメントまたはコンピュータ実行可能な命令は、プロシージャ、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、または、命令、データ構造もしくはプログラム文の任意の組合せを表し得る。コードセグメントは、情報、データ、引数、パラメータまたはメモリコンテンツを受け渡すおよび／または受け取ることによって、別のコードセグメントまたはハードウェア回路に結合されてもよい。情報、引数、パラメータ、データなどは、メモリ共有、メッセージ受渡し、トークン受渡し、ネットワーク伝送などを含む任意の好適な手段を介して渡されるか、転送されるか、または伝送されてもよい。
【００１７】
さらに、実施の形態は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはそれらの任意の組み合わせによって実現されてもよい。ソフトウェア、ファームウェア、ミドルウェアまたはマイクロコードにおいて実現される場合には、必要なタスクを実行するプログラムコードまたはコードセグメントを機械読取可能媒体に記憶してもよい。プロセッサは必要なタスクを実行してもよい。
【００１８】
本明細書では、１つまたは複数の入力データ例内で識別されるパターンに対応する正規表現を生成するためのさまざまな技法（たとえば、方法、システム、１つまたは複数のプロセッサによって実行可能な複数の命令を記憶する非一時的なコンピュータ読取可能記憶メモリなど）について説明する。特定の実施形態では、入力データの選択を受け取ることに応答して、入力データ内の１つまたは複数のパターンが自動的に識別され、識別されたパターンを表すよう、正規表現（または短く「レゲックス」）が自動的かつ効率的に生成され得る。そのようなパターンは、キャラクタのシーケンス（たとえば、文字、数字、空白、句読点、記号等のシーケンス）に基づくことができる。本明細書では、方法、システム、１つもしくは複数のプロセッサによって実行可能なプログラム、コード、または命令を記憶する非一時的コンピュータ読取可能記憶媒体などを含むさまざまな実施形態について説明する。
【００１９】
いくつかの実施形態では、正規表現は、キャラクタストリングにマッチするために、および／または入力として与えられるキャラクタストリングから情報を抽出するために、記号的なワイルドカードマッチング言語を使用して構成され得る。たとえば、第１の例示的な正規表現[A-Za-z]{3} /d?/d, /d/d/d/dは、ある日付（たとえばApril 3, 2018）にマッチしてもよく、第２の例示的な正規表現[A-Za-z]{3} /d?/d, (/d/d/d/d)を使用して、マッチする日付から年を抽出してもよい。正規表現生成システムによって受信される入力データは、たとえば、１つもしくは複数の「陽性」データ例および／または１つもしくは複数の「陰性」データ例を含み得る。本明細書で使用される場合、陽性例は、入力として受信され、その入力に基づいて生成される正規表現によってマッチされることになるキャラクタシーケンスを指し得る。一方、陰性例は、その入力に基づいて生成される正規表現によってマッチされることにならない、入力されたキャラクタシーケンスを指し得る。
【００２０】
いくつかの技術的利点が、本明細書に記載されるさまざまな実施形態および例内で実現され得る。たとえば、本開示で説明するいくつかの技法は、正規表現生成処理の速度および効率を向上させ得る（たとえば、レゲックス解は、１秒未満で生成され得、ユーザインターフェイスは、対話型リアルタイム使用に適し得る）。本明細書で説明されるさまざまな技法はまた、判断論的であってもよく、トレーニングデータを必要としなくてもよく、いかなる初期正規表現入力も必要とせずに解を生成してもよく、完全に自動化されてもよい（たとえば、任意の人的介入を必要とする範囲内で正規表現を生成する）。さらに、本明細書で説明されるさまざまな技法は、効果的に処理され得るデータ入力のタイプに関して限定される必要はなく、そのような技法は、結果として得られる正規表現の人間による可読性を改善し得る。
【００２１】
本明細書で説明するいくつかの実施形態は、最長共通サブシーケンス（ＬＣＳ）アルゴリズムの１つまたは複数の実行を含む。ＬＣＳアルゴリズムは、ある状況においては、２つのテキストファイル間の差分を判断し示すように構成された差分エンジン（たとえば、Unix “diff” utilityの背後にあるエンジン）として使用され得る。いくつかの実施形態では、入力データ（たとえば、ストリングおよび他のキャラクタシーケンス）は、抽象的なトークンに変換され得、次いで、それらは、ＬＣＳアルゴリズムへの入力として提供され得る。そのような抽象的なトークンは、たとえば、正規表現キャラクタクラスを表す正規表現コード（たとえば、Loogleコードまたは他のキャラクタクラスコード）に基づくトークンであってもよい。そのようなコードのさまざまな異なる例が考えられ、本明細書では「正規表現コード」または「中間正規表現コード」（ＩＲＥＣ）と称され得る。たとえば、入力されたキャラクタシーケンス「May 3」は、ＩＲＥＣコード「LLLZN」に変換されてもよく、その後、トークン化されたストリングは、他のトークン化されたストリングとともにＬＣＳアルゴリズムに供されてもよい。いくつかの実施形態では、入力されたキャラクタシーケンスが共通に有さないＩＲＥＣ（たとえば正規表現コード）が、最終的に生成された正規表現において、任意選択（たとえば任意選択のスパン）として現れてもよい。特定の実施形態では、正規表現コードは、https://www.regular-expressions.info/unicode.html#categoryで示されるユニコードカテゴリコードに基づくカテゴリコードであってもよい。たとえば、コードLは文字を表してもよく、コードNは数字を表してもよく、コードZは空白を表してもよく、コードSは記号を表してもよく、コードPは句読点を表してもよい等である。たとえば、コードLは、ユニコード/p{L}に対応し、コードNは、ユニコード/p{N}に対応し得る。これは、ＬＣＳ出力から正規表現への１対１のマッピングが働くことを可能にし（たとえば、/pN/pN/pZ/pL/pLは「10 am」にマッチすることができる）、これは、人間による可読性の利点を提供し得る。加えて、これらの異なるカテゴリは、互いに素、つまり相互に排他的であってもよい。すなわち、この例では、カテゴリL、N、Z、PおよびSは、カテゴリのメンバ間に重複がないように、互いに素にされてもよい。
【００２２】
さらなる技術的利点は、正規表現コード（たとえばカテゴリコード）、スパンなどの使用に基づく正規表現のより効率的な生成を含むさまざまな実施形態において実現され得る。そのようなコードを使用することによって、ＬＣＳアルゴリズムが入力ストリング内のキャラクタのすべてまたは実質的にすべてを異なるものとして首尾よく識別する場合には、計算資源を無駄にする必要がない。本明細書においてさまざまな実施形態によって提供されるさらなる技術的利点は、生成された正規表現の改善された可読性、ならびに陽性例および陰性例の両方を入力データとしてサポートすること、およびさまざまな有利なユーザインターフェイス特徴を提供すること（たとえば、ユーザが、抽出のために、より大きなキャラクタシーケンスまたはデータセル内のテキストフラグメントを強調表示することを可能にする）を含む。
【００２３】
Ｉ．全体の概要
本明細書に開示されるさまざまな実施形態は、正規表現の生成に関連する。いくつかの実施形態では、正規表現生成器として構成されるデータ処理システムは、正規表現コード（たとえばカテゴリコード）の異なるセットによって共有される最長共通サブシーケンス（ＬＣＳ）を識別することによって正規表現を生成することができる。正規表現コードの各セットは、ユーザインターフェイスを介して入力データとして受け取られるキャラクタのシーケンスから変換され得る。本明細書で説明する技術的利点のうち、入力データを中間コード（たとえば、正規表現コード、スパンなど）として抽象化することにより、非常に少ない入力データを使用して正規表現を効率的に生成することができる。
【００２４】
図１は、さまざまな実施形態が実現され得る、正規表現を生成するための例示的な分散システムの構成要素を示すブロック図である。この例に示されるように、クライアントデバイス１２０は、正規表現生成サーバ１１０（または正規表現生成器）と通信し、ユーザインターフェイスと対話してテーブル形式データを取り出し表示し、ユーザインターフェイスを介した入力データ（たとえば例）の選択に基づいて正規表現を生成することができる。いくつかの実施形態では、クライアントデバイス１２０は、クライアントウェブブラウザ１２１および／またはクライアント側正規表現アプリケーション１２２（たとえば、サーバ１１０によって生成された正規表現を受信／消費するクライアント側アプリケーション）を介して正規表現生成器１１０と通信してもよい。正規表現生成器１１０内で、クライアントデバイス１２０からの要求は、ネットワークインターフェイスにおいてさまざまな通信ネットワークを介して受信され、ＲＥＳＴ  ＡＰＩ１１２などのアプリケーションプログラミングインターフェイス（ＡＰＩ）によって処理され得る。ユーザインターフェイスデータモデル生成器１１４コンポーネントは正規表現生成器１１０とともに、サーバ側プログラミングコンポーネントおよびロジックを提供して、本明細書で説明されるさまざまなユーザインターフェイス特徴を生成し、レンダリングすることができる。そのような特徴は、ユーザがデータリポジトリ１３０からテーブル形式データを取り出し、表示すること、入力データ例を選択して正規表現の生成を開始し、生成された正規表現に基づいてデータを修正および／または抽出することを可能にする機能を含み得る。この例では、正規表現生成器コンポーネント１１６は、入力キャラクタシーケンスを正規表現コードおよび／またはスパンに変換すること、入力データに対してアルゴリズム（たとえばＬＣＳアルゴリズム）を実行すること、および正規表現を生成／単純化することを含んで、正規表現を生成するように実現され得る。正規表現生成器１１６によって生成された正規表現は、ＲＥＳＴサービス１１２によってクライアントデバイス１２０に送信されてもよく、そこで、クライアントブラウザ１２１（または対応するクライアント側アプリケーションコンポーネント１２２）上のJavascriptコードは、次いで、ブラウザ内でレンダリングされたスプレッドシート列内のすべてのセルに対して正規表現を適用することができる。他の場合では、サーバ側でマッチするデータ／マッチしないデータを識別するために、サーバ側で別個の正規表現エンジンコンポーネントを実現して、生成された正規表現を、ユーザインターフェイス上に表示されるテーブル形式データおよび／またはデータリポジトリ１３０に格納された他のデータ内で比較してもよい。さまざまな実施形態において、マッチする／マッチしないデータは、ユーザインターフェイス内で自動的に選択（たとえば強調表示）されてもよく、抽出、修正、削除などのために選択されてもよい。正規表現の生成に基づいて、ユーザインターフェイスを介して抽出または修正される任意のデータは、１つまたは複数のデータリポジトリ１３０に記憶され得る。さらに、いくつかの実施形態では、生成された正規表現（および／またはＬＣＳアルゴリズムへの対応する入力）は、将来の検索および使用のために正規表現ライブラリ１３５に記憶されてもよい。いくつかの実施形態では、生成された正規表現は、実際に「ライブラリ」に格納される必要はなく、「変換スクリプト」に組み込まれてもよい。たとえば、ＥＴ．Ｓ．特許番号１０，２１０，２４６（すべての目的のために、ここに引用により援用する）においてより詳細に記載されるように、そのような変換スクリプトは、受信されたデータを変換するために１つまたは複数の処理ユニットによって実行可能であり得るプログラム、コード、または命令を含み得る。変換スクリプトの他の考えられ得る例は、「改名列」、「大文字列データ」、または「ファーストネームから性別を推測し性別を伴う新たな列を作成する」などを含み得る。
【００２５】
図２は、本明細書に記載される１つまたは複数の実施形態に係る、ユーザインターフェイスを介して受信される入力に基づいて正規表現を生成するための処理を示すフローチャートである。ステップ２０１において、正規表現生成器１１０は、正規表現生成器ユーザインターフェイスにアクセスし、ユーザインターフェイスを介して特定のデータを閲覧するための要求をクライアントデバイス１２０から受信することができる。ステップ２０１における要求は、ＲＥＳＴ  ＡＰＩ１１２、および／またはウェブサーバ、認証サーバなどを介して受信されてもよく、ユーザの要求はパーズおよび認証されてもよい。たとえば、ビジネスまたは組織内のユーザは、取引データ、顧客データ、実績データ、予測データ、および／または組織のデータリポジトリ１３０に記憶され得るデータの任意の他のカテゴリを解析および／または修正するために、正規表現生成器１１０にアクセスすることができる。ステップ２０２において、正規表現生成器１１０は、選択された入力データに基づく正規表現の生成をサポートするユーザインターフェイスを介して、要求されたデータを取り出し、表示することができる。そのようなユーザインターフェイスのさまざまな実施形態および例は、以下で詳細に説明される。
【００２６】
ステップ２０３において、ユーザは、正規表現生成器１１０によって提供されるユーザインターフェイスに表示されたデータから１つまたは複数の入力キャラクタシーケンスを選択し得る。いくつかの実施形態では、データは、特定のデータタイプおよび／またはデータのカテゴリを有するラベル付き列を含んで、ユーザインターフェイス内にテーブル形式で表示されてもよい。そのような場合、ステップ２０３における入力データの選択は、ユーザがデータセルを選択すること、またはデータセル内の個々のテキストフラグメントを選択する（たとえば強調表示すること）ことに対応し得る。しかしながら、他の実施形態では、正規表現生成器１１０は、ユーザインターフェイスを介して半構造化および非構造化データの検索ならびに表示をサポートしてもよく、ユーザは、半構造化または非構造化データからキャラクタシーケンスを選択することによって正規表現生成のための入力データを選択してもよい。後述する例で説明されるように、ユーザが表示されたテーブル形式データから入力キャラクタシーケンスを選択することは、単なる使用ケースの一例である。他の例では、ユーザ（たとえば、おそらく、Linux（登録商標）コマンドラインツールgrep、sed、またはawkなどのために正規表現を構築することを試みるソフトウェア開発者またはパワーユーザ）は、スプレッドシートから例を拾うのではなく、例において初めからタイプしてもよい。
【００２７】
ステップ２０４において、正規表現生成器１１０は、ステップ２０３においてユーザにより選択された入力データに基づいて、１つまたは複数の正規表現を生成してもよい。ステップ２０５において、正規表現生成器１１０は、たとえば、生成された正規表現を表示するように、および／または表示されたデータ内のマッチする／マッチしないデータを強調表示するように、ユーザインターフェイスを更新してもよい。いくつかの実施形態では任意選択であり得るステップ２０６において、ユーザインターフェイスは、ユーザが生成された正規表現に基づいて基礎となるデータを修正することを可能にする機能をサポートしてもよい。たとえば、ユーザインターフェイスは、ユーザが、テーブル形式データから、特定のデータフィールドを、それらフィールドが正規表現とマッチするか否かに基づいて、フィルタリング、修正、削除、または抽出することを可能にする特徴をサポートしてもよい。データをフィルタリングまたは修正することは、リポジトリ１３０に格納された基礎となるデータを修正することを含むことができ、場合によっては、抽出したデータを新たな列および／または新たなテーブルとしてリポジトリ１３０に格納することができる。
【００２８】
これらのステップは、正規表現生成器１１０のユーザインターフェイスとの例示的なユーザ対話の一般的かつハイレベルの概要を示すが、他の実施形態では、さまざまな追加の特徴および機能性をサポートしてもよい。たとえば、いくつかの実施形態では、正規表現コード（またはカテゴリコード）は、コードの最小発生数に関連付けられ得る。追加的または代替的に、正規表現コードは、コードの最大発生数に関連付けられてもよい。一例として、正規表現コードのセットは、ＬＣＳの特定の部分がある文字を少なくとも０回、および最大でも１回のいずれかで含むことを示すコードL<0,1>を含むことができる。
【００２９】
さらに、いくつかの実施形態では、入力データは、３つ以上のキャラクタシーケンスを含み得る。そのような実施形態では、さまざまな技法を用いて、３つ以上のキャラクタシーケンスに対してＬＣＳアルゴリズムを実行するための順序を判断し、結果として生じる正規表現が充分に機能する態様で生成され得るようにして、３つ以上の入力キャラクタシーケンスによって引き起こされるランタイムの指数関数的な増加を回避することができる。なお、正規表現生成器１１０は、かわりに、一度に２つのキャラクタシーケンス上でＬＣＳアルゴリズムを実行し、グラフに基づいてキャラクタシーケンスのペアを選択するための順序を判断してもよい。たとえば、全結合グラフは、ＬＣＳアルゴリズムの第１の実行（たとえばＬＣＳ１）は、シーケンス１およびシーケンス３に対して実行されるべきであることを示し、次いで、ＬＣＳアルゴリズムの第２の実行（たとえばＬＣＳ２）は、ＬＣＳ１およびシーケンス２に対して実行されるべきであることなどを示し得る。グラフは、全結合グラフであってもよく、ノードは、キャラクタシーケンスを表し、エッジはノードを接続して、接続されたノードによって共有されるＬＣＳの長さを表す。グラフ内の各ノードは、グラフ内の他のすべてのノードに接続されてもよく、キャラクタシーケンスを選択する順序は、グラフについて最小スパニングツリーの深さ優先トラバースを実行することによって判断されてもよい。
【００３０】
さらなる実施形態では、入力データは、いくつかの異なる方法でユーザインターフェイスを介して提供されてもよい。たとえば、入力データは、キャラクタのセットの第２のユーザ選択内の、１つまたは複数のキャラクタの第１のユーザ選択を示してもよい。たとえば、ユーザは、以前に強調表示されたキャラクタのセット内のうちのあるキャラクタを強調表示してもよい。したがって、第２のユーザ選択は、第１のユーザ選択のためのコンテキストを提供し得、これは、入力データが、より高い特異性で正規表現生成器１１０に提供されることを可能にし得る。いくつかの実施形態では、正規表現生成器１１０は、各ユーザ選択に応答して、ほぼリアルタイムで正規表現を生成し、表示することができる。たとえば、ユーザがキャラクタの第１の範囲を強調表示する場合、正規表現生成器１１０は、キャラクタの第１の範囲を表す正規表現を表示してもよい。そして、ユーザが、キャラクタの第１の範囲内の、キャラクタの第２の範囲を強調表示すると、正規表現生成器１１０は、表示される正規表現を更新してもよい。
【００３１】
さらに、いくつかの実施形態では、正規表現生成器１１０は、陽性および陰性の両方の例を含む入力に基づいて正規表現を生成することができる。上述したように、陽性例は、正規表現に包含されるべきキャラクタのシーケンスを指し得、陰性例は、正規表現に包含されるべきでないキャラクタのシーケンスを指し得る。そのような場合、正規表現生成器１１０は、特定の位置において、陽性例を陰性例から区別する、１つまたは複数のキャラクタからなる最短サブシーケンスを識別することができる。次いで、最短サブシーケンスは、正規表現生成器１１０によって生成された正規表現内でハードコード化され得る。さまざまな例では、最短サブシーケンスは、プレフィックス／サフィックス部分、または陰性例内のミッドスパンに含まれ得る。
【００３２】
特定の実施形態による、正規表現を自動的に生成するさらなる例を以下に記載する。これらの例は、図２の一般的技法のさまざまな具体的な考えられ得る実現例に対応し得、それぞれのシステムの１つまたは複数の処理ユニット（たとえば、プロセッサ、コア）によって実行されるソフトウェア（たとえば、コード、命令、プログラムなど）、ハードウェア、またはそれらの組み合わせにおいて実現され得る。ソフトウェアは、非一時的記憶媒体上に（たとえばメモリデバイス上に）記憶され得る。以下で説明するさらなる例は、例示的かつ非限定的であることを意図している。これらの例は、特定の順番または順序で生じるさまざまな処理ステップを示すが、これは限定することを意図するものではない。いくつかの代替実施形態では、ステップは、ある異なる順序で実行されてもよく、またはいくつかのステップは、並行して実行されてもよい。
【００３３】
いくつかの例では、ユーザインターフェイス（たとえばステップ２０３）を介して受信されるユーザ入力は、正規表現出力によってマッチされる１つまたは複数の「陽性例」と、正規表現出力によってマッチされない０またはそれより多い「陰性例」とを含み得る。任意選択で、陽性例のうちの１つまたは複数を強調表示して、キャラクタの特定の範囲（またはサブシーケンス）を選択することができる。場合によっては、ステップ２０４において、ユーザインターフェイスを介して受信された陽性例は、正規表現コード（たとえば、ユニコードカテゴリコードのようなキャラクタカテゴリコード）のスパンに変換され得る。各陽性例に対して、スパンのシーケンスが生成され得る。いくつかの実施形態では、各頂点が、スパンのシーケンスのうちの１つに対応し、エッジ重みが、エッジのエンドポイントに対応するスパンのそれらの２つのシーケンス上で実行されるＬＣＳアルゴリズムからの出力の長さに等しい、グラフが生成されてもよい。グラフについて、最小スパニングツリーを判断することができる。たとえば、いくつかの実施形態では、Ｐｒｉｍのアルゴリズムを用いて、最小スパニングツリーを得てもよい。深さ優先トラバースを最小スパニングツリー上で実行してトラバース順序を判断してもよく、その後、ＬＣＳアルゴリズムを、トラバースの最初の２つの要素上で実行してもよい。次いで、１つずつ、トラバースの各追加要素が、前のＬＣＳ反復の出力および次の現在のトラバース要素に対してＬＣＳアルゴリズムを再び実行することによって、現在のＬＣＳ出力に順番にマージされてもよい。次いで、スパンのシーケンスであり得る、ＬＣＳアルゴリズムの最終出力が、正規表現に変換されてもよい。この変換は、いくつかの実施形態では、１対１変換であり得るが、本明細書で説明される特定の任意選択的な実施形態は、１対１変換に対応しないかもしれない。最後に、得られた正規表現は、ステップ２０３でユーザインターフェイスを介して受信されたすべての陽性例および陰性例に対してテストされてもよい。テストのいずれかが失敗した場合、すべての陽性例および失敗した任意の陰性例を使用して、上述の処理を繰り返してもよい。
【００３４】
ＩＩ．正規表現コード上で最長共通サブシーケンスアルゴリズムを用いた正規表現生成
上述したように、本明細書で説明するいくつかの態様は、入力データに対応する正規表現コードの異なるセットによって共有される最長共通サブシーケンス（ＬＣＳ）の計算に基づく正規表現の生成に関する。
【００３５】
図３は、本明細書で説明する１つまたは複数の実施形態による、正規表現コードのセットに対してＬＣＳアルゴリズムを使用して正規表現を生成するための処理を示すフローチャートである。ステップ３０１において、正規表現生成器１１０は、入力データとして１つまたは複数のキャラクタシーケンスを受け取り得る。上述したように、いくつかの例では、入力データは、ユーザインターフェイスに表示されたテーブル形式データ内から選択された陽性例データに対応し得るが、いくつかの実施形態ではユーザインターフェイスは任意選択であり、入力データは、さまざまな例では任意の他の通信チャネル（たとえば非ユーザインターフェイス）を介して受信される任意のキャラクタシーケンスに対応し得ることを理解されたい。
【００３６】
ステップ３０２において、ステップ３０１において受け取られた各キャラクタシーケンスは、対応する正規表現コードに変換され得る。さまざまな実施形態において、正規表現コードは、Loogleコード、ユニコードカテゴリコード、または正規表現キャラクタクラスを表す任意の他のキャラクタクラスコードであり得る。たとえば、ある入力キャラクタシーケンス「May 3」をLoogleコード「LLLZN」に変換してもよい。いくつかの実施形態では、正規表現コードは、https://www.regular-expressions.info/unicode.html#categoryに示されるユニコードカテゴリコードに基づくカテゴリコードであり得る。たとえば、コードLは文字を表してもよく、コードNは数字を表してもよく、コードZは空白を表してもよく、コードSは記号を表してもよく、コードPは句読点を表してもよい、等である。たとえば、コードLは、ユニコード/p{L}に対応し、コードNは、ユニコード/p{N}に対応し得る。
【００３７】
ステップ３０３では、ステップ３０２で生成された正規表現コードのセットの中から最長共通サブシーケンスを判断することができる。いくつかの実施形態では、ＬＣＳアルゴリズムは、入力として正規表現コードの２つのセットを使用して実行され得る。ＬＣＳアルゴリズム（たとえば、処理の方向、位置指定、空白のプッシュ、低濃度スパンの合体（coalescing）、共通トークン上の整列など）の実行のさまざまな異なる特性が、異なる実施形態において使用され得る。ステップ３０４では、ＬＣＳアルゴリズムの出力に基づいて正規表現を生成することができる。場合によっては、ステップ３０４は、ＬＣＳアルゴリズムの出力を正規表現コードで捕捉すること、および正規表現コードを正規表現に変換することを含み得る。ステップ３０５において、正規表現は、たとえば、ユーザインターフェイスを介してユーザに正規表現を表示することによって、単純化され、出力されてもよい。
【００３８】
図４は、２つのキャラクタシーケンス例に基づき、正規表現コードのセットに対して最長共通サブシーケンス（ＬＣＳ）アルゴリズムを使用して、正規表現を生成するための例示的な図である。したがって、図４は、図３において上述した処理を適用する例を示している。図４に示すように、本例の正規表現は、２つの入力ストリング「iPhone 5」および「iPhone X」に基づいて生成される。この例における各シーケンスは、正規表現コードのそれぞれのセットに変換され得る。したがって、iPhone 5は「LLLLLLZN」に変換されてもよく、iPhone Xは「LLLLLLZL」に変換されてもよい。図４に示されるように、これらのカテゴリコードは、次いで、ＬＣＳアルゴリズムへの入力として提供され、ＬＣＳアルゴリズムは、ＩＲＥＣ（またはカテゴリコード）の両方のセットは６つのLおよび１つのZを含む、と判断する。ＬＣＳから除外されるZカテゴリコードは、任意選択および／または代替として表され得る。したがって、両方のキャラクタシーケンスを包含する正規表現は、/pL{6}/pZ/pN?/pL?のように表され得る。この例において、正規表現はユニコードカテゴリコード（たとえば、文字については/pL、空白については/pZ、数字については/pN）を含む。数字6を含む中括弧は、文字の６つのインスタンスを示し、疑問符は、最後の数字／文字が任意選択であることを示す。最後に、正規表現生成器によって単純化処理を実行することができ、その間に、正規表現は、共通テキストフラグメント「iPhone」を最終正規表現に挿入し戻すことによって単純化され、正規表現のより広い「/pL{6}/」部分を置き換える。
【００３９】
この例に示されるように、正規表現生成器１１０によって受け取られた入力ストリングは、正規表現ブロードカテゴリ（これは、「カテゴリコード」とも呼ばれ得る）を表す「正規表現コード」に変換されてもよく、ＬＣＳアルゴリズムは、それらの正規表現コード上で実行されてもよい。いくつかの実施形態では、正規表現コードのために、ユニコードカテゴリコードを使用し得る。たとえば、入力テキストストリングは、レゲックスユニコードブロードカテゴリ（たとえば、文字については/pL、句読点については/pP等である。）を表すコードに変換され得る。図３および図４によって示されるこのアプローチは、間接的アプローチと称され得る。しかしながら、他の実施形態では、ＬＣＳアルゴリズムが入力として受け取られたキャラクタシーケンスに対して直接実行される直接的アプローチが使用されてもよい。
【００４０】
いくつかの実施形態では、間接的アプローチは、大量のトレーニングデータを必要としないという点で、追加の技術的利点を提供し得、比較的より少ない数の入力例で有効な正規表現を生成し得る。これは、間接的なアプローチが、正規表現生成における不確実性を低減するために、および潜在的な偽陽性および偽陰性を除去するために、ヒューリスティックを使用するためである。たとえば、入力ストリング「May 3」および「Apr 11」に基づいて正規表現を生成する際に、直接的アプローチは、日付パターンにマッチする有効な正規表現を生成するために月毎に少なくとも１つの例を必要とし得る。それら２つの例のみに依拠して、直接的アプローチは、「[AM][ap][yr] [13]1?」のレゲックスを生成してもよい。対照的に、間接的アプローチは、ユニコードブロードカテゴリに基づいて、「/pL{3} /d{1,2}」の、より効果的な正規表現を生成してもよい。加えて、上述のように、本明細書で説明される技術的利点の１つは、場合によっては単一の例からさえ、非常にわずかな入力データを使用して正規表現を効率的に生成することを含む。たとえば、単一の例「am」からの正規表現の生成に関して、あるヒューリスティックは、正規表現のために「am」を生成するか「/pL/pL」を生成するかを判断することができる。どちらも、おそらくは正しいが、プログラムされたヒューリスティックは、最適な正規表現を生成する方法（たとえば、それが「pm」にもマッチすべきか否か）を判断するために、ユーザ選好および／または基準を実現し得る。
【００４１】
加えて、間接的アプローチは、さらに、生成された正規表現「/pL{3} /d{1,2}」〜「[A-Za-z]{3} /d{1,2}」を単純化して、それをより人間によって可読なものにすることができる。これは、いくつかの実施形態において、たとえば、正規表現のためのユニコード表現に精通していない可能性がある高度な知識のない正規表現ユーザに出力する場合に有益であり得る。
【００４２】
さらに、いくつかの実施形態では、ＬＣＳアルゴリズムを実行する際に各キャラクタを独立して扱う代わりに、シーケンシャルかつ等しい正規表現コードが、スパンデータ構造（スパンとも称され得る）に変換され得る。場合によっては、スパンは、単一の正規表現コード（たとえばユニコードブロードカテゴリコード）の表現を、繰り返しカウント範囲（たとえば最小数および／または最大数）とともに含み得る。正規表現コードからスパンへの変換は、代替（たとえば分離）を認識するなど、以下に説明されるいくつかのさまざまな追加の特徴を容易にすることができ、また、生成された正規表現をさらに単純化するために、隣接する任意選択のスパンのマージを容易にすることもできる。
【００４３】
上述したように、ＬＣＳアルゴリズムは、図４のストリング「iPhone」のような、最終的な正規表現に潜在的に挿入して戻すことができる、入力キャラクタシーケンス内の基礎となるテキストフラグメントを記憶し、保持するように構成することができる。そのスパンに割り当てられたカテゴリコードを元々もたらしたテキストフラグメントを追跡することによって、そのような実施形態は、リテラルテキスト（たとえばamおよびpm）が、生成された正規表現に直接含まれることを可能にし、偽陽性を低減し、正規表現出力をより人間により可読なものにすることができる。
【００４４】
ＩＩＩ．正規表現コードの組み合わせ上で最長共通サブシーケンスアルゴリズムを用いた正規表現生成
本明細書で説明するさらなる態様は、３つ以上のストリング（たとえば３つ以上の別個のキャラクタシーケンス）を含む入力データに基づく正規表現の生成に関する。３つ以上のストリングが入力データとして識別される場合、正規表現生成器１１０は、ＬＣＳアルゴリズム実行のシーケンスに対して最適な順序が判断される性能最適化特徴を使用し得る。以下で説明するように、３つ以上のストリングに関する性能最適化機能は、各ストリングに対応する頂点と、各ストリングと他のすべてのストリングとの間のＬＣＳ出力のサイズに基づき得るエッジ長さ／重みとでグラフを構築することを含み得る。次いで、それらのエッジ重みを使用して最小スパニングツリーが導出され得、入力ストリングの順序を判断するために、深さ優先トラバースが実行され得る。最後に、判断された入力ストリングの順序を使用して、一連のＬＣＳアルゴリズムが行われてもよい。
【００４５】
図５は、正規表現コードの、より大きなセット（たとえば３つ以上のキャラクタシーケンス）に対して、最長共通サブシーケンス（ＬＣＳ）アルゴリズムを使用して、正規表現を生成するための処理を示すフローチャートである。したがって、この例におけるステップ５０２〜５０５は、図３で上述したステップ３０３に対応し得る。しかしながら、この例は、３つ以上の入力キャラクタシーケンスに基づいて正規表現を生成することに関するため、ＬＣＳアルゴリズムは複数回実行されてもよい。たとえば、３つ以上の入力ストリングのランタイムの指数関数的な増加を避けるために、ＬＣＳアルゴリズムは複数回実行されてもよく、各実行は２つの入力ストリングだけに対して実行される。たとえば、正規表現生成器１１０は、２つのストリング（たとえば２つの入力キャラクタシーケンスまたは２つの変換された正規表現コード）に対してＬＣＳアルゴリズムの最初の実行を実行してもよく、次いで、第１のＬＣＳアルゴリズムの出力および第３のストリングに対してＬＣＳアルゴリズムの第２の実行を実行してもよく、次いで、第２のＬＣＳアルゴリズムの出力および第４のストリングに対してＬＣＳアルゴリズムの第３の実行を実行してもよい等となる。
【００４６】
そのような実施形態の性能を改善および／または最適化するために、ＬＣＳアルゴリズムのシーケンスを実行する入力ストリング（たとえば入力キャラクタシーケンスまたは正規表現コード）の最適な順序を判断することが望ましい場合がある。たとえば、入力ストリングを取り込むための良好な順序は、任意選択のスパンの数を最小にすることなどによって、生成された正規表現の可読性に影響を及ぼし得る。生成されたレゲックスを簡潔に保つために、現在のレゲックスにＬＣＳされる追加のストリングは、現在のレゲックス（既に見られたストリングをＬＣＳしたことからの中間結果）に既にいくらか類似していることが好ましい。
【００４７】
これにより、ステップ５０１では、複数（たとえば３つ以上）の入力キャラクタシーケンスが正規表現コードに変換される。ステップ５０２では、ＬＣＳアルゴリズムを使用して正規表現コードを処理する順序を判断する。ステップ５０２における順序の判断については、図７を参照して後述する。ステップ５０３において、判断された順序における最初の２つの正規表現コードが（ステップ５０３の最初の反復のために）選択されるか、または判断された順序における次の正規表現コードが（ステップ５０３の後続の反復のために）選択される。ステップ５０４において、ＬＣＳアルゴリズムは、正規表現コードのフォーマットに対応する２つの入力ストリングに対して実行される。ステップ５０４の第１の反復では、ＬＣＳアルゴリズムは、判断された順序における最初の２つの正規表現コードに対して実行され、ステップ５０４の後続の反復では、ＬＣＳアルゴリズムは、判断された順序における次の正規表現コードおよび前のＬＣＳアルゴリズムの出力（同じ正規表現コードのフォーマットであってもよい）に対して実行される。ステップ５０５において、正規表現生成器１１０は、ＬＣＳアルゴリズムへの入力としてまだ提供されていない、判断された順序における追加の正規表現コードがあるか否かを判断する。判断された順序におけるそのような追加の正規表現コードがある場合、処理は、ＬＣＳアルゴリズムの別の実行のためにステップ５０３に戻る。そうでない場合には、ステップ５０６において、ＬＣＳアルゴリズムの最後の実行の出力に基づいて、正規表現が生成される。
【００４８】
図６は、５つの入力キャラクタシーケンス例に基づいて正規表現を生成するための例示的な図である。この例では、各入力されたキャラクタシーケンスを正規表現コードに変換し、次いで、判断された正規表現コードの順序に基づいてＬＣＳアルゴリズムを繰り返し実行する。したがって、図６は、図５において上述した処理を適用する一例を示す。この例では、５つの正規表現コードについて判断された順序は、コード＃１〜コード＃５であり、各コードは、判断された順序でＬＣＳアルゴリズムに入力されて、正規表現出力が生成される。最終の正規表現出力（Ｒｅｇ  Ｅｘ＃４）は、入力キャラクタシーケンスの５つすべてに基づいて生成された最終正規表現に対応する。
【００４９】
図７は、正規表現コードの、より大きいセット（たとえば３つ以上）上における最長共通サブシーケンス（ＬＣＳ）アルゴリズムについての実行順序を判断するための処理を示すフローチャートである。したがって、この例に示されるように、ステップ７０１〜７０４は、上述のステップ５０２における順序判断に対応し得る。ステップ７０１において、ＬＣＳアルゴリズムは、入力データに対応する正規表現コードの各他とは異なるペア上で実行されてもよく、得られた出力ＬＣＳは、実行ごとに記憶されてもよい。したがって、ｋ個の入力データについて、これは、ＬＣＳアルゴリズムを通して実行されるストリングのすべての（ｋ（ｋ−１））／２個の可能なペア形成、またはいくつかの実施形態ではｋ（ｋ−１）を表し得る。たとえば、ｋ＝３の入力キャラクタシーケンスが受け取られた場合、ＬＣＳアルゴリズムは、ステップ７０１において３回実行されてもよく；ｋ＝４の入力キャラクタシーケンスが受け取られた場合、ＬＣＳアルゴリズムは、ステップ７０１において６回実行されてもよく；ｋ＝５の入力キャラクタシーケンスが受け取られた場合、ＬＣＳアルゴリズムは、ステップ７０１において１０回実行されてもよい等となる。ステップ７０２において、全結合グラフは、（ｋ（ｋ−１））／２個のエッジのエッジ重みが２つのノード間の未処理ＬＣＳ出力の長さでストリングを表すｋ個のノードから構築され得る。ステップ７０３では、ステップ７０２における全結合グラフから最小スパニングツリーを導出し得る。ステップ７０４では、深さ優先トラバースが最小スパニングツリー上で実行され得る。このトラバースの出力は、正規表現コードがＬＣＳアルゴリズム実行のシーケンスに入力される順序に対応し得る。
【００５０】
図８Ａおよび図８Ｂを簡単に参照すると、図５に、受け取られたｋ＝５の入力キャラクタシーケンスに基づいて生成された全結合グラフの例が示され、図８Ｂに、全結合グラフに対する最小スパニングツリー表現が示されている。
【００５１】
いくつかの実施形態では、図５〜図８Ｂに記載されるアプローチは、性能に関して追加の技術的利点を提供し得る。たとえば、ＬＣＳアルゴリズムの、特定の従来の実現例は、Ｏ（ｎ２）のランタイム性能を示すことができ、ここで、ｎはストリングの長さである。そのような実現例を２だけの代わりにｋ個のストリングに拡張すると、指数関数的なランタイム性能Ｏ（ｎｋ）をもたらし得、なぜならば、ＬＣＳアルゴリズムはｋ次元空間を探索するよう求められ得るからである。ＬＣＳアルゴリズムのそのような従来の実現例は、リアルタイムのオンラインユーザ体験に対しては、充分に機能しないか、または十分に適していないかもしれない。
【００５２】
上述したように、ＬＣＳアルゴリズムは、（ｋ（ｋ−１））／２回実行されてもよく、その場合、時として重複は以前に見られたのと全く同じであり、なぜならば、ＬＣＳアルゴリズムは、ユーザからの生の入力例がレゲックスカテゴリコードに変換された場合であり得るためである。したがって、いくつかの場合においては、記憶化が実現され得、キャッシュを使用して、以前に見られたＬＣＳ問題を以前に機能したＬＣＳ解にマッピングすることができる。
【００５３】
ＩＶ．陽性および陰性パターンマッチング例に基づく正規表現の生成
本明細書で説明するさらなる態様は、陽性および陰性の両方の例に対応する入力データに基づいて正規表現を生成することに関する。上述したように、陽性例は、正規表現生成器によって生成される正規表現にマッチするべき例のストリングとして指定される入力データキャラクタシーケンスを指し得る。一方、陰性例は、正規表現生成器によって生成される正規表現とマッチするべきでない例のストリングとして指定される入力データキャラクタシーケンスを指し得る。以下で説明するように、いくつかの実施形態では、正規表現生成器１１０は、位置、およびその位置で陽性例を陰性例から区別するキャラクタの最短サブシーケンスを識別するように構成され得る。次いで、最短サブシーケンスは、生成された正規表現にハードコード化され得、陽性例は正規表現とマッチすることになり、陰性例は正規表現によって除外される（たとえばマッチしない）ことになる。
【００５４】
図９は、陽性のキャラクタシーケンス例および陰性のキャラクタシーケンス例に基づいて正規表現を生成するための処理を示すフローチャートである。ステップ９０１において、正規表現生成器１１０は、陽性例に対応する１つまたは複数の入力データキャラクタシーケンスを受け取ることができる。ステップ９０２において、正規表現生成器１１０は、受け取った陽性例に基づいて正規表現を生成し得る。したがって、ステップ９０１〜９０２は、入力データキャラクタシーケンスに基づいて正規表現を生成するために、上で論じた図３または図５において実行されるステップの一部またはすべてを含み得る。
【００５５】
ステップ９０３において、正規表現生成器１１０は、陰性例に対応する１つの追加入力データキャラクタシーケンスを受け取ることができる。したがって、ステップ９０２で生成された正規表現とマッチしないように、陰性例を具体的に指定する。いくつかの実施形態では、ステップ９０３において受け取られた陰性例は、ステップ９０２において生成された正規表現に対して最初にテストされてもよく、陰性例が正規表現とマッチしないと判断された場合、さらなるアクションはとられない。しかしながら、この例では、ステップ９０３において受け取られた陰性例のうちの少なくとも１つはステップ９０２において生成された正規表現とマッチする、と仮定されてもよい。したがって、ステップ９０４では、ステップ９０２で生成された正規表現内で曖昧性除去位置を判断してもよい。いくつかの実施形態では、曖昧性除去位置は、（たとえば正規表現の始まりにおける）プレフィックス位置または（たとえば正規表現の終わりにおける）サフィックス位置のいずれかとして選択され得る。たとえば、正規表現生成器１１０は、陽性例を陰性例から区別するためにプレフィックスで必要とされるであろう第１の数のキャラクタと、陽性例を陰性例から区別するためにサフィックスで必要とされるであろう第２の数のキャラクタとを判断してもよい。次いで、正規表現生成器１１０は、必要とされる置換キャラクタの最短数に基づいてサフィックスまたはプレフィックスを選択し得る。場合によっては、曖昧性除去位置としてプレフィックスを使用することが、可読性のために好まれる（たとえば重み付けされる）ことがある。さらに他の例では、曖昧性除去位置は、正規表現のプレフィックスまたはサフィックスに対応しないミッドスパン位置であり得る。
【００５６】
ステップ９０５において、正規表現生成器１１０は、判断された位置で正規表現に挿入されると、陽性例を陰性例から区別することができるカスタムキャラクタクラスの置換シーケンスを判断することができる。いくつかの実施形態では、ステップ９０５において、正規表現生成器１１０は、陽性例および陰性例の各々から、曖昧性除去位置（または置換位置）に対応するテキストフラグメントを取り出し、次いで、それらテキストフラグメントを使用して、陽性例を陰性例から区別する置換シーケンスとして使用される弁別子を判断することができる。さらに、ステップ９０５で判断される弁別子置換シーケンスは、カスタムキャラクタクラスの、複数の異なる置換シーケンスを含むことができ、それらは、正規表現内の同じ位置または異なる位置のいずれかで置換されることができる。
【００５７】
上述したように、場合によっては、ステップ９０５における置換シーケンスの判断は、ステップ９０４における曖昧性除去位置（または置換位置）の判断との関連で実行されてもよい。たとえば、正規表現生成器１１０は、第１の可能な置換位置において陽性例を陰性例から区別し得る１つまたは複数の置換シーケンスを判断し得る。正規表現生成器１１０はまた、第２の異なる可能な置換位置において陽性例を陰性例から区別し得る１つまたは複数の他の置換シーケンスも判断し得る。この例において、異なる可能な置換位置および対応する置換シーケンスの間で選択するとき、正規表現生成器１１０は、ヒューリスティック式を適用して、置換位置のキャラクタのサイズ、ならびに対応する置換シーケンスの数および／またはサイズ、のうちの１つまたは複数に基づいて選択を実行することができる。最後に、ステップ９０６において、正規表現は、１つまたは複数の判断された置換シーケンスを判断された位置に挿入して正規表現の以前の部分を置換することによって、修正され得る。場合によっては、ステップ９０６における正規表現の修正に続いて、陽性例および／または陰性例を、修正された正規表現に対してテストして、陽性例が正規表現とマッチし、陰性例が正規表現とマッチしないことを確認してもよい。
【００５８】
図１０Ａおよび図１０Ｂは、陽性および陰性のキャラクタシーケンスの例に基づく正規表現の生成を示す例示的なユーザインターフェイス画面である。したがって、図１０Ａおよび図１０Ｂに示される例は、上述の図９の処理の実行中に表示されるユーザインターフェイスに対応し得る。図１０Ａにおいて、ユーザは、データ入力キャラクタシーケンスの３つの陽性例１００１を提供し、正規表現生成器１１０は、陽性例の各々にマッチする正規表現１００２を生成する。次に、図４Ｂにおいて、ユーザは、１つの陰性例１００４を提供し、正規表現生成器１１０は、陽性例の現在のセット１００３および陰性例の現在のセット１００４の両方に基づく修正された正規表現１００５を生成する。
【００５９】
上で注記したように、いくつかの実施形態では、陽性例および陰性例の両方が受け取られると、正規表現生成器１１０は、弁別子、つまり陽性例を陰性例から区別する１つまたは複数のキャラクタの最短サブシーケンスを識別してもよい。選択された弁別子は、最短シーケンス（たとえばカテゴリコードで表現される）であってもよく、陽性または陰性のいずれかであってもよく、陽性例はマッチし、陰性例はマッチしないことになる。場合によっては、弁別子は、次いでステップ９０５で正規表現にハードコード化され得る置換サブシーケンスに対応してもよい。一例として、「[AL][a-z]+」において、[AL]は、それが街路サフィックスに適用されると仮定すると、「Alley（小路）」、「Avenue（大通り）」、および「Lane（横町）」とはマッチする（またはそれらを認める）であろうが、他のすべてのものとはマッチしない（または許容しない）であろう陽性の弁別子である。別の例として、「[BC][o][a-z]+」において、[BC][o]は、「Boulevard（並木道）」および「Court（袋小路）」とマッチするであろう２つのキャラクタクラスのシーケンスからなる陽性の弁別子である。さらに別の例として、「[^A][a-z]+」において、[LA]は、「Alley」および「Avenue」を許容しないであろう陰性の弁別子であってもよい。場合によっては、アルゴリズムは、正しく弁別するために陰性後読みを生成してもよい。たとえば、(?<!Av)[A-Za-z]+は、「Avenue」は除外するが、「Alley」は認めるであろう。
【００６０】
別の例として、ユーザが陽性例「202-456-7800」および「313-678-8900」ならびに陰性例「404-765-9876」および「515-987-6570」を供給する場合、ある実施形態では、正規表現生成器１１０は、正規表現「/d/d/d-/d/d/d-/d/d00」を生成してもよい。すなわち、置換キャラクタサブシーケンスは、正規表現のサフィックスについて、（たとえば、目的が、ビジネス電話番号とマッチする正規表現であると仮定して、）00で終わる電話番号は陽性例を陰性例から区別するという判断に基づいて、識別され得る。これは、サフィックスによる陰性例の例（より具体的に言えば、陽性のサフィックスを使用することによって陰性例に対処する例）であるが、さまざまな他の実施形態は、プレフィックス、サフィックス、またはミッドスパン位置のいずれかでの置換をサポートしてもよい。ミッドスパン位置での置換の例では、スパン内にオフセットされるキャラクタが追跡され、ミッドスパンポイントで分割され得る。
【００６１】
プレフィックスまたはサフィックスを使用するかどうかを判断するために、いくつかの実施形態では、kaおよびプレフィックス／サフィックスのすべての組み合わせにわたって最小スコアが選択されるヒューリスティックが使用される：
【００６２】
【数１】
2021527260.tif 000003
【００６３】
ka＝アフィックス（プレフィックスまたはサフィックス）の曖昧性を除去すると考えられるキャラクタの数
|Fp|＝アフィックスの曖昧性を除去するために必要とされる陽性例からの一意のテキストフラグメントの数
|Fn|＝アフィックスの曖昧性を除去するために必要とされる陰性例からの一意のテキストフラグメントの数
|Ep|＝ユーザによって提供される（完全な）陽性例の数
|En|＝ユーザによって提供される（完全な）陰性例の数
上記の例では、ヒューリスティックは、より長い曖昧性除去テキストフラグメント（したがって、たとえば、kaによる乗算）よりもより短い曖昧性除去テキストフラグメントを好むように設計される。ヒューリスティックはまた、可読性を改善するよう、サフィックス（したがって、たとえば、サフィックスに対する０．１のペナルティ）よりもプレフィックスを好むように設計される。最後に、ヒューリスティックは、より長いプレフィックスまたはサフィックスの曖昧性除去（たとえば置換）を、より多数のストリングフラグメント（したがって、たとえば、置換されるべきストリングフラグメントの数を二乗）を使用することによる曖昧性除去よりも好むように設計される。
【００６４】
上述したように、いくつかの実施形態はまた、陰性のミッドスパン例、ならびに陰性の後読み例および陰性の先読み例をサポートしてもよい。
【００６５】
いったんプレフィックス／サフィックスおよびk（曖昧性除去すべきキャラクタの数）が判断されると、正規表現生成器１１０は、さらに、その曖昧性除去を、生成された正規表現においてどのように表現するかを判断することができる。生成された正規表現は、陽性例のように見えるアフィックス（たとえばプレフィックスまたはサフィックス）について許容的（permissive）であってもよく、または陰性例のように見えるアフィックスを除外してもよい。
【００６６】
【数２】
2021527260.tif 000004
【００６７】
usePermissiveがゼロよりも大きい場合、陽性例のように見えるものは、（各キャラクタ位置）について１つずつ、陽性例から取られたキャラクタを許容する正規表現を生成することによって通される。他の場合では、正規表現生成器１１０は（各キャラクタ位置について）１つずつ、陰性例から取られたキャラクタを許容しない正規表現を生成することにより、陰性例のように見えるものを許容しないアプローチをとってもよい。
【００６８】
別の例として、陽性例8amおよび陰性例9pmについて生成された正規表現は、/d[^p]mであるかもしれない。これは、カレット構文を使用する。場合によっては、正規表現生成器１１０は、より短い正規表現を好むように構成されてもよく、それは、ユーザとってより可読であり得るだけでなく、より正しい可能性があり得る。その原理は、今後、頻繁に出現するキャラクタは、今後再び出現する可能性がよりありそうであり、したがって、頻繁に出現するキャラクタに強調がおかれるべきである、というものである。一意のキャラクタ|Fp|がより少ない場合（出現するものはより頻繁に出現するため、一意性はより少ない）、これは、分母内にそれを有することによって、ヒューリスティックにおいて報酬を与えられる。
【００６９】
再び上記のusePermissive例のヒューリスティックを参照すると、１つの一意の陽性アフィックスを判断することは、ユーザから１つの陽性例しかない場合、大きな特色ではない。したがって、このヒューリスティックでは低い|Ep|は、分子内にそれを有することによってペナルティを科せられる（すなわち、高い|Ep|は、このヒューリスティックにおいて報酬を与えられる）。
【００７０】
さらに、いくつかの実施形態では、陰性例は、後読みおよび／または先読みに基づいてもよい。たとえば、ユーザは、「323-1234」の陽性例および「202-754-9876」の陰性例を提供し、その場合、それはエリアコードを有する電話番号を除外するためにレゲックス後読み構文(?<!)の使用を伴う。
【００７１】
場合によっては、陰性例は、任意選択のスパンに基づいてもよい。たとえば、ユーザは、「ab」および「a2b」の陽性例および「a3b」の陰性例を提供してもよい。この場合、ある例示的な実現例は失敗し得、なぜならば、それは、必要とされるスパンのみに基づいて弁別しようとし得、「2」の桁は任意選択のスパンにあるからである。この例において、失敗とは、生成された正規表現が、陽性例のすべてに（正しく）マッチし、また、陰性例の１つまたは複数に（誤って）マッチする状況を指し得る。そのような場合、ユーザは、失敗に対して警告されることができ、生成された正規表現を手動で修復するために、および／または陰性例の一部を除去するために、ユーザインターフェイスを介して選択肢を提供されることができる。
【００７２】
Ｖ．正規表現生成のためのユーザインターフェイス
本明細書で説明する追加の態様は、正規表現の生成に関連するグラフィカルユーザインターフェイス内にいくつかの異なる特徴および機能を含む。以下で説明するように、これらの特徴のうちのあるものは、ユーザ選択のためのさまざまな選択肢、および陽性例および陰性例の強調表示、陽性例および陰性例のカラーコード化、ならびにデータセル内の複数の重複／ネストされた強調表示を含み得る。
【００７３】
図１１は、ユーザインターフェイス内で受信されたユーザデータ選択に基づいて正規表現を生成するための処理を示すフローチャートである。図１１の例示的な処理は、入力データキャラクタシーケンスに基づいて正規表現を生成する前述の例のいずれかに対応し得る。しかしながら、図１１は、クライアントデバイス１２０上で生成および表示され得るユーザインターフェイスに関する処理を説明する。ステップ１１０１において、ユーザインターフェイスを介したユーザからの要求に応答して、正規表現生成器１１０は、（たとえばデータリポジトリ１３０から）データを取り出し、そのデータをグラフィカルユーザインターフェイス内においてテーブル形式でレンダリング／表示してもよい。なお、この例ではテーブル形式データを用いているが、他の例ではテーブル形式データを使用および表示しなくてもよいことを理解されたい。たとえば、場合によっては、ユーザは、（ユーザインターフェイスからデータを選択するのではなく）生データを直接タイプすることができる。さらに、データがユーザインターフェイスを介して提示されるとき、データはテーブル形式である必要はなく、構造化されていないデータ（たとえばドキュメント）または半構造化（たとえば、ツイートまたはポストのような非フォーマット化／非構造化データアイテムのスプレッドシート）であってもよい。さまざまな例では、テーブル形式データは、取引データ、顧客データ、実績データ、予測データ、および／またはビジネスもしくは他の組織のためにデータリポジトリ１３０に記憶され得るデータの任意の他のカテゴリに対応し得る。ステップ１１０２において、入力データのユーザ選択がユーザインターフェイスを介して受信され得る。選択された入力データは、たとえば、ユーザによって選択されたあるデータセル全体、またはあるデータセル内のキャラクタのサブシーケンスに対応し得る。ステップ１１０３において、正規表現生成器１１０は、ステップ１１０２において受信された入力データ（たとえばデータセルまたはその一部分）に基づいて正規表現を生成し得る。ステップ１１０４において、ユーザインターフェイスは、正規表現の生成に応答して更新され得る。場合によっては、ユーザーインターフェイスは、単に、生成された正規表現をユーザーに表示するために更新されてもよく、一方、他の場合では、ユーザーインターフェイスは、以下で説明するさまざまな他の方法で更新されてもよい。この例に示されるように、ユーザは、ユーザインターフェイスを介して複数の異なる入力データキャラクタシーケンスを選択してもよく、受信された各新たな入力データに応答して、正規表現生成器１１０は、キャラクタシーケンスの第１および第２の（陽性の）例の両方を包含する更新された正規表現を生成してもよい。次いで、ユーザがキャラクタの第３のシーケンスを（たとえば、両方のキャラクタシーケンス外、または第１もしくは第２のキャラクタシーケンス内で）を強調表示すると、正規表現生成器１１０は、正規表現を再び更新してもよい等となる。いくつかの実施形態では、正規表現生成器１１０は、アルゴリズムをリアルタイム（またはほぼリアルタイム）で実行し得、全面的に新たな正規表現が、ユーザによってなされた各新たなキーストロークまたは各新たな強調表示されたセクションに応答して生成され得る。
【００７４】
したがって、図１１に示すように、ユーザインターフェイスを介するキャラクタシーケンスのユーザ選択に応答して、正規表現生成器１１０は、正規表現を生成および表示し得る。たとえば、ユーザがキャラクタの第１のシーケンスを強調表示すると、正規表現生成器は、キャラクタの第１のシーケンスを表す正規表現を生成し、表示し得る。ユーザがキャラクタの第２のシーケンスを強調表示すると、正規表現生成器は、キャラクタの第１のシーケンスとキャラクタの第２のシーケンスとの両方を包含する更新された正規表現を生成し得る。次いで、ユーザがキャラクタの第３のシーケンスを（たとえば第１のシーケンスまたは第２のシーケンスのいずれか内で）強調表示すると、正規表現生成器は正規表現を再び更新し得る等となる。
【００７５】
図１２は、ユーザインターフェイス内で受信されたユーザデータ選択を介して、正規表現を生成し、キャプチャグループに基づいてデータを抽出するための処理を示す別のフローチャートである。ステップ１２０１において、ステップ１１０１で上述したように、正規表現生成器１１０は、（たとえばデータリポジトリ１３０から）データを取り出し、そのデータをグラフィカルユーザインターフェイス内においてテーブル形式でレンダリング／表示することができる。ステップ１２０２において、正規表現生成器１１０は、特定のデータセル内のテキストフラグメントのユーザ強調表示の選択を受け取ることができる。ステップ１２０３において、正規表現生成器１１０は、選択されたデータセルの陽性例に基づいて正規表現を生成することができ、ステップ１２０４において、セル内で強調表示されたテキストフラグメントに基づいて正規表現キャプチャグループを作成することができる。ステップ１２０５において、正規表現生成器１１０は、生成された正規表現とマッチする、表示されたテーブル形式データ内の１つまたは複数の追加セルを判断することができ、ステップ１２０６において、生成された正規表現とマッチする追加セル内の対応するテキストフラグメントを抽出することができる。
【００７６】
したがって、陽性例を供給することに加えて、ユーザは、（たとえばマウステキスト強調表示を介して、）選択された陽性例のいずれか内でテキストフラグメントを選択してもよい。これに応答して、正規表現生成器１１０は、例から、そのテキストフラグメントを抽出し、正規表現が適用されているテキスト中の他のすべてのマッチから、対応するフラグメントを抽出するために、正規表現キャプチャグループを作成してもよい。マッチするデータセルからテキストフラグメントを抽出することは、削除および修正も含み得、場合によっては、半構造化または非構造化テキストの既存の列からデータの新たな列を作成するために用いられ得る。
【００７７】
ユーザが陽性のデータ例を選択する例を用いて、ユーザが年を強調表示した場合、正規表現生成器１１０は正規表現(?:[A-Z]{3}/s+/d/d,/s+|/d/d//d/d)(/d/d/d/d)を生成することができる。この例に示すように、正規表現生成器１１０は、年の周りに括弧を付けてあり、また、月および日の周りの古い括弧（代替のために使用）を?:レゲックス構文の使用により「非キャプチャ」グループに変換している。いくつかの実施形態では、抽出／キャプチャグループは、スパン境界上にあることが要求され得、そのような実施形態では、正規表現生成器１１０は、強調表示されたキャラクタ範囲を入力として取り得、最も近い位置指定子スパン境界を包含するようにそれを拡張し得る。しかしながら、他の例では、ミッドスパン抽出／キャプチャは、ユーザインターフェイスによってサポートされてもよい。
【００７８】
いくつかの実施形態では、ユーザインターフェイスは、第２のキャラクタシーケンス内の第１のキャラクタシーケンスの選択を含むユーザからの入力データをサポートしてもよい。たとえば、ユーザは、より大きな以前に強調表示されたキャラクタシーケンス内の１つまたは複数のキャラクタを強調表示することができ、第２のユーザ選択は、より大きな第１のユーザ選択のためのコンテキストを提供してもよい。そのような実施形態は、入力データが、より高い特異性で正規表現生成器１１０に提供されることを可能にし得る。
【００７９】
さらに、いくつかの例では、ユーザがユーザインターフェイス内で選択する（たとえばテキストを強調表示する）ことに応答して、動作を開始し、ダイアログを開くことができる。場合によっては、ダイアログは、メイン画面とのユーザ対話を妨げないフローティングツールボックスウィンドウなどの非モデルダイアログであってもよい。ダイアログはまた、ユーザがどのような主要な操作を行っているかに応じて外観および／または機能性を変化させることもできる。したがって、そのような場合、ユーザは、キャプチャグループテキストフラグメントの修正、抽出などを開始するために、選択されたテキストを強調表示した後にさらなるメニューアイテムを検索する必要がない。さらに、特定の実施形態では、正規表現を生成するために提供されるユーザインターフェイスは、３つの強調表示モード、すなわちネスト化自動、ネスト化手動、および単一レベルを含み得る。場合によっては、デフォルト動作モードは、セル全体が強調表示された領域として識別されることであってもよく、ユーザは、強調されたセル内の１つまたは複数の追加のサブシーケンスをさらに強調表示してもよい。他のモードでは、ユーザは、テーブル形式データディスプレイのデータセル内で両方の強調表示を手動で指定することを許可されてもよい。さらに他のモードでは、ユーザは、内側強調表示なしで外側強調表示を手動で指定することを許可されてもよい。これらのその他のモードは、半構造化データ、たとえば、ブラウザ「ユーザエージェント」ストリングなどのツイートまたは他の長いストリングからなるデータの列に、より適し得る。「半構造化」データは、ユーザインターフェイス内でテーブル形式で表示され得るデータを指すが、テーブル内の列は非構造化テキストからなる。
【００８０】
いくつかのそのような実施形態では、ユーザインターフェイスを介したユーザによる内側および外側の選択（たとえば強調表示）は、カラーコード化によって区別され得る。たとえば、陽性例の外側強調表示は、第１のテキスト／背景色の組み合わせで示されてもよく、陽性例の内側強調表示は、異なる対照的なテキスト／背景色の組み合わせで示されてもよい。
【００８１】
上述したように、ユーザは、キャラクタサブシーケンスの選択を介してキャプチャグループの選択を指定することができる。ＧＵＩを用いて、強調表示（または他の表示）を介するユーザ選択を容易にしてもよい。一例を図１３に示し、例示的ユーザインターフェイス画面がテーブル形式データディスプレイとともに示される。この例では、図１３は、たとえば、ユーザが列値の１つまたは複数の所望の要素を横切ってマウスをドラッグすることによって引き起こされる、列値内の強調表示を示す。なお、ユーザ強調表示が実行される「セル」は、列値の選択を示す色変化を示してもよい。この色変化は、ユーザ強調表示に応答する自動化された強調表示と解釈されてもよい。
【００８２】
図１４および図１５は、テーブル形式ディスプレイからのデータの選択に基づく正規表現およびキャプチャグループの生成を示す例示的なユーザインターフェイス画面である。これらの例では、図１４および図１５は、テーブル形式データディスプレイ内のユーザ強調表示１４０１の検出が自動的に表示される追加のユーザインターフェイスウィンドウを示す。ウィンドウは、陽性例を表示するためのフィールド１４０２と、陰性例を表示するためのフィールドと、テーブル形式データディスプレイからの陽性例の選択に応答して動的に（およびほぼ瞬時に）生成される正規表現を表示するためのフィールドとを含む。これらの例では、列値１４０１内のユーザ強調表示は、自動化された強調表示内のユーザ強調表示と同等であり得る。したがって、エリアコードのユーザ強調表示により、ユーザ強調表示されたエリアコード１４０１だけでなく、電話番号の残りの部分も陽性例フィールド１４０２にポピュレートされる。
【００８３】
しかしながら、ユーザ強調表示は、自動強調表示内の性能に限定されないことを理解されたい。たとえば、ユーザ強調表示は、代替的に、他のユーザ強調表示内で実行されてもよい。別の例として、ユーザ強調表示は、代替的に、内側強調表示（たとえば、強調表示されたテキスト内でのさらに強調表示）なしで実行されてもよい。これらの代替例は、「ツイート」または他の長いストリング（たとえばブラウザ「ユーザエージェント」ストリング）を含むデータの列などの半構造化データに特に適している。
【００８４】
さらに、対応する正規表現が生成されると、正規表現にマッチする他の列値１４０２が、追加の自動化された強調表示に基づいて識別され得る。図１４および図１５に示される例では、追加の自動化された強調表示は、生成された正規表現のキャプチャグループにマッチする、これらの他の列値の要素を示す。追加の自動化された強調表示は、ユーザ強調表示に使用される色とは異なる色を使用して実行されてもよい。
【００８５】
図１５に示すように、他の例のユーザ選択を示すために、追加のユーザ強調表示が示される。追加のユーザ強調表示は、上述の方法と同様の方法で実行され得る。したがって、図１５のユーザインターフェイスは、陽性例を表示するためのフィールド１５０２における他の例のポピュレーションを示す。これは、追加のユーザ強調表示の検出に応答して起こり得る。さらに、生成された正規表現１５０３は、それが陽性例１５０２のすべてにマッチするように、動的にかつほぼ瞬時に更新されてもよい。更新された正規表現の生成に応答して、更新された正規表現にマッチする他の列値１５０４の自動化された強調表示も更新され得る。いくつかの実現形態では、動的カラーコード化も使用され得る。たとえば、マッチは、第１の色（たとえば青色）を使用してカラーコード化されてもよく、陽性例は、第２の色（たとえば緑色）を使用してカラーコード化されてもよく、陰性例は、第３の色（たとえば赤色）を使用してカラーコード化されてもよい。
【００８６】
図１６Ａおよび図１６Ｂは、テーブル形式ディスプレイからの陽性例および陰性例の選択に基づく正規表現の生成を示すユーザインターフェイス画面例である。図１６Ａ〜図１６Ｂでは、陽性例フィールド１６０２からの個々の例は、陽性例フィールド１６０３から除去され得、および／または陰性例フィールド１６０３に移され得る。ユーザインターフェイス内で、これは、たとえば、ユーザが例の１つをクリック（たとえば右クリック）してそれを選択することによって実行されてもよい。選択は、ユーザーインターフェイスに、削除オプションおよび変更オプションを含むメニュー１６０２を表示させることができる。その後、オプションをクリックすると、対応する機能が実行される。
【００８７】
図１６Ａおよび図１６Ｂに示される例において、変更オプションのユーザ選択の結果は、選択された例を陰性例フィールド１６０３に移動させ、正規表現１６０１を正規表現１６０４に更新させ、この正規表現１６０４は、動的にかつほぼ瞬時に生成され得る（たとえばある実施形態では、３０ｍｓ〜９０００ｍｓの間である）。更新された正規表現１６０４の生成に応答して、更新された正規表現にマッチする他の列値の自動化された強調表示も、テーブル形式データディスプレイ内で更新され得る。さらに、自動化された強調表示は、陰性例に対応する任意の列値を含む、陰性例の一部または全部に対して実行されてもよく、それは、上で使用された色のいずれとも異なる色を使用して強調表示されてもよく、または他の態様では他の視覚的技法を使用してユーザインターフェイス内で区別されてもよい。
【００８８】
いくつかの実施形態では、ユーザインターフェイスを介して陰性例を指定することは、図１６Ａおよび図１６Ｂに示されるように、最初にその例を陽性例として指定し、次いでそれを陰性例に変換することを必要とする必要はない。むしろ、陰性例は、さまざまな方法で指定され得る。たとえば、ユーザは、ユーザインターフェイスを介して列値（たとえば、自動化された強調表示が実行されて、生成された正規表現とマッチすることを示した、他の列値のうちの１つ）を選択する（たとえば右クリックする）ことができ、それによって、オプション（たとえば「新たな反例を作成する」）を含むメニューのディスプレイに、選択された列値を陰性例として指定させることができる。
【００８９】
したがって、図１６Ａおよび図１６Ｂに示される例を使用して、更新された正規表現１６０４の生成に応答して、更新された正規表現にマッチする他の列値の自動化された強調表示も更新され得る。これらの例では、更新された正規表現は、「９」で終わる電話番号を指定する。
【００９０】
図１４および図１５を簡単に参照すると、「抽出」ボタンがユーザによってクリックされるか、または他の態様で選択されると、現在の正規表現１４０３または１５０３にマッチするすべてのセル内の強調表示されたテキストフラグメントを抽出するための動作が、開始され得る。図１４および図１５には示されていないが、いくつかの実施形態では、ユーザインターフェイスは、「抽出」ボタンに加えて、またはその代わりに、他の選択可能なボタンを提供してもよい。たとえば、「置換」ボタンが、ユーザ強調表示された要素をユーザ指定された要素に置換するためのオプションとして提示されてもよい。追加または代替として、１つまたは複数の「削除」ボタンが、事実上、ユーザ強調表示された要素を何にも置換しないオプションとして提示されてもよい。たとえば、「フラグメントを削除」操作および／または「行を削除」操作の一方または両方が実現されてもよく、それは、それぞれ、ユーザ強調表示されたテキストフラグメントまたはいずれかの行のいずれかを削除することになる。さまざまな実施形態において実現され得る追加の操作は、「行を保持」操作、「分割」操作（たとえば、コンマを強調表示し、次いで、コンマ分離成分を別々の複数の新たな列に抽出する）、および「難読化」操作（たとえば、強調表示されたテキスト／キャプチャグループを「＃」または他の記号のシーケンスで置き換える）を含み得る。この例では、「抽出」ボタンが選択されたことに応答して、抽出操作が、下流の操作によって実行されるべき変換スクリプトのリストに追加され得る。いくつかの実施形態では、変換スクリプトのリストは、ユーザによるレビュー／修正のためにユーザインターフェイスの一部分に表示されてもよい。代替的に、抽出操作は、その場で実行されて、レゲックスキャプチャグループの内容（たとえば、陽性例のユーザ強調表示部分に対応する要素）を含む新たな列を生成してもよい。図１４および図１５に示される例では、エリアコードの新たな列および／または新たなテーブルが、「抽出」ボタンの選択に応答して生成されてもよい。
【００９１】
図１７は、本明細書に記載する１つまたは複数の実施形態による、テーブル形式ディスプレイからのデータの選択に基づく正規表現およびキャプチャグループの生成を示す別の例示的なユーザインターフェイス画面である。
【００９２】
ＶＩ．スパン上で最長共通サブシーケンスアルゴリズムを用いた正規表現生成
本明細書で説明されるさらなる態様は、１つまたは複数のデータ入力キャラクタシーケンスからのＬＣＳアルゴリズムに基づく正規表現の生成に関するが、正規表現生成器１１０は、例のいくつかのみに存在するキャラクタを取り扱うこともできる。いくつかの入力例においてのみ存在するキャラクタを取り扱うために、正規表現コードの最小発生数および最大発生数の両方が追跡されるスパンが定義され得る。たとえば、「9pm」および「9 pm」のキャラクタシーケンス入力については、数字と「pm」テキストとの間に任意選択の空白が存在する。そのような場合、所与の入力例のすべてに一定のスパン（たとえば「9」と「pm」との間の単一の空白）が存在しないかもしれない場合、最小発生数はゼロに設定されてもよい。次いで、これらの最小数および最大数は、正規表現マルチプリシティ構文にマッピングされ得る。最長共通サブシーケンス（ＬＣＳ）アルゴリズムを、すべての入力例に現れない「任意選択の」スパン（たとえばゼロの最小長さ）を含む、入力例から導出されたキャラクタのスパン上で実行してもよい。以下で説明するように、連続するスパンは、ＬＣＳアルゴリズムの実行中にマージされてもよい。そのような場合において、一緒に担持される追加の任意選択のスパンが連続して出現することに終わるとき、ＬＣＳアルゴリズムは、それらの任意選択のスパン上でも同様に再帰的に実行されてもよい。すなわち、ＬＣＳアルゴリズムの実行は、その性質上、再帰的であるが、これらの場合、ＬＣＳアルゴリズム全体を、再帰的に実行してもよい（たとえば、再帰的ＬＣＳアルゴリズムを再帰的に実行する）。他の技術的利点の中でもとりわけ、これは、より短く、よりクリーンで、より可読性のある正規表現生成を可能にし得る。たとえば、(am| am)（すなわち、amの前に任意選択の空白を有する）は、ＬＣＳアルゴリズムを再帰的に実行せずに生成されるかもしれず、一方、ＬＣＳアルゴリズムを再帰的に実行すると、正規表現は、より短く、よりクリーンな( ?am)として生成される結果となり得る。
【００９３】
図１８は、本明細書で説明する１つまたは複数の実施形態による、最長共通サブシーケンス（ＬＣＳ）アルゴリズムを使用して、任意選択のスパンを含む正規表現を生成するための処理を示すフローチャートである。ステップ１８０１において、正規表現生成器１１０は、陽性の正規表現例に対応する１つまたは複数のキャラクタシーケンスを入力データとして受け取ってもよい。ステップ１８０２において、正規表現生成器１１０は、キャラクタシーケンスを正規表現コードに変換してもよい。したがって、ステップ１８０１およびステップ１８０２は、上述の、先の対応する例と同様でも同一でもよい。次いで、ステップ１８０２において、正規表現コードは、スパンデータ構造（またはスパン）にさらに変換され得る。上述したように、各スパンは、キャラクタクラスコード（たとえばレゲックスコード）および繰り返しカウント範囲（たとえば最小カウントおよび／または最大カウント）を記憶するデータ構造を含むことができる。ステップ１８０４において、正規表現生成器１１０は、ＬＣＳアルゴリズムを実行して、アルゴリズムへの入力としてスパンのセットを提供することができる。この例におけるＬＣＳアルゴリズムの出力は、ＬＣＳアルゴリズムの出力内の任意選択のスパンに対応する、ゼロに等しい最小繰り返しカウント範囲を有する少なくとも１つのスパンを含むスパンの出力セットを含むことができる。最後に、ステップ１８０５において、正規表現生成器１１０は、任意選択のスパンを含むＬＣＳアルゴリズムの出力の出力に基づいて正規表現を生成することができる。
【００９４】
図１９は、最長共通サブシーケンス（ＬＣＳ）アルゴリズムを用いた正規表現の生成を示す例示的な図であり、生成された正規表現は、任意選択のスパンを含む。この例では、２つの入力データキャラクタシーケンスは、「8am」および「9 pm」である。入力データキャラクタシーケンスは、上述したように、まず正規表現コードに変換され（ステップ１８０２）、次にスパンに変換される（ステップ１８０３）。スパンは、ＬＣＳアルゴリズムへの入力として提供され得（ステップ１８０４）、ＬＣＳ出力は、任意選択のスパンZ <0, 1>を含み、任意選択の単一の空白が数字および２文字のテキストシーケンスであり得ることを示す。すなわち、この例における上付き表記は、先行するコード（たとえばZ＝空白）に適用される２つの数字、最小繰り返しカウント範囲（たとえば０）および最大繰り返しカウント範囲（たとえば１）を含み得る。最後に、正規表現は、ＬＣＳアルゴリズムの出力スパンに基づいて生成されてもよく、任意選択のスパンは、対応する正規表現コード「pZ*」に変換されてもよい。
【００９５】
いくつかの実施形態では、ＬＣＳアルゴリズムの実行中の正規表現生成器１１０による任意選択の空白の描出および使用は、性能および可読性に関してさらなる技術的利点を提供し得る。たとえば、正規表現を生成するとき、場合によっては、すべての所与の例の間で共通するキャラクタと、それらの例のうちのいくつかにおいてのみ存在するキャラクタとの両方を扱うことができることが望ましい。
【００９６】
ある実施形態では、各スパンデータ構造について、カテゴリコードの最小発生数およびカテゴリコードの最大発生数の両方が追跡され得る。所与の例の１つまたは複数においてスパンが全く存在しない場合、最小はゼロに設定される。別の例として、綴りで示された月を扱うための正規表現を生成するために、最小数および最大数を、次いで、中括弧を伴う正規表現マルチプリシティ構文（たとえば[A-Za-z]{3,9}）にマッピングしてもよい。
【００９７】
いくつかの実施形態では、正規表現生成器１１０は、各スパンについて最小発生数および最大発生数を追跡してもよいが、追加の実施詳細を処理してもよい。たとえば、任意選択のスパンを取り扱うこととキャラクタのスパン上でＬＣＳを実行することとの組み合わせの結果として、正規表現生成器１１０は、ＬＣＳアルゴリズムの実行を通して、連続的なスパンを検出し、マージするように構成され得る。加えて、一緒に担持されている任意の追加の任意選択のスパンが、時々、連続的に現れ、ＬＣＳアルゴリズムがそれら上でも同様に再帰的に実行されることが望ましい場合がある。たとえば、場合によっては、正規表現生成器１１０は、任意選択のシーケンス要素と必要なシーケンス要素（たとえばスパン）との間のより少ない遷移を好む（または重み付けする）よう、ＬＣＳアルゴリズムを修正および／または拡張する。たとえば、任意選択のスパンを一緒にグループ化することは、正規表現内で使用されなければならないグループ化括弧の数を最小にすることができ、したがって、生成された正規表現の人間の可読性を改善することができる。場合によっては、結果として生じる長さが、任意選択のスパンを考慮した後でさえ等しい場合、正規表現生成器１１０は、任意選択のスパンと必要なスパンとの間の遷移がより少ない代替物に対する選好を示してもよい。たとえば、場合によっては、ある標準ＬＣＳアルゴリズムは、その判断点でより長いシーケンスの選択を好むように実現され得る。しかしながら、選択肢が等しい長さのものである判断点では、構成選好が正規表現生成器１１０にプログラムされてもよい。１つのそのような構成選好は、たとえば、（任意選択のスパンが考慮されると）より短いシーケンスを好むことであり得る。したがって、この構成内のカスタマイズされたＬＣＳは、（必要なスパンの）より長いシーケンスおよび（必要なスパンおよび任意選択のスパンの合計の）より短いシーケンスを同時に最適化することができる。
【００９８】
いくつかの実施形態では、生成された正規表現は、任意選択のスパンで正規表現を開始するのではなく、必要なスパン（これは、人間の読者に対する精神的拠り所としても働き得る）で開始する場合、より可読性があり得る。したがって、場合によっては、結果として得られる選択肢が等しい数の遷移を有する場合、より早期の非任意選択のスパンを有する選択肢が選択され得る。加えて、正規表現生成器１１０によって実行されるＬＣＳアルゴリズムは、いくつかの実施形態では、正規表現内においてすべての空白（空白に対応する任意選択のスパンを含む）を右にプッシュするように構成されてもよい。すべての空白を右にプッシュすることによって、空白のスパンが一緒にマージされ得る機会が増大する可能性があり、これは、結果として生じる正規表現を単純化し、かつ可読性を改善し得る。このように、ＬＣＳアルゴリズムの実行中に、サブストリングの２つのセットが同じＬＣＳを有すると判断された場合、サブストリングの２つのセットのうちの１つのセットを恣意的に選択する代わりに、可読性の改善を容易にするセットを選択してもよい。さらに、いくつかの実施形態では、ＬＣＳアルゴリズムは、可読性を改善するために、より多くの数の必要なスパンおよび／またはより少ない数の任意選択のスパンを好むように構成されてもよい。
【００９９】
上述したように、場合によっては、陰性例は、任意選択のスパンに基づいてもよい。たとえば、ユーザは、「ab」および「a2b」の陽性例ならびに「a3b」の陰性例を提供してもよい。この場合、ある例示的な実現例は失敗し得、なぜならば、それは、必要とされるスパンのみに基づいて区別しようとし得、「2」の桁は任意選択のスパンにあるからである。そのような場合、ユーザは、失敗に対して警告されることができ、生成された正規表現を手動で修復するために、および／または陰性例の一部を除去するために、ユーザインターフェイスを介して選択肢を提供されることができる。
【０１００】
いくつかの実施形態では、ＲＥＳＴサービスから戻って来るＪＳＯＮの一部として返されるisSuccessが存在し得る。いくつかの実施形態では、生成されたレゲックスは、isSuccess＝偽のとき、異なる色（たとえば赤色）となってもよい。
【０１０１】
ＶＩＩ．コンビナトリック最長共通サブシーケンスアルゴリズムを用いた正規表現生成
本明細書で説明されるさらなる態様は、正規表現生成器１１０によって実行されるＬＣＳアルゴリズムが複数回実行されて、「正しい」正規表現（たとえば、すべての所与の陽性例と適切にマッチし、すべての所与の陰性例を適切に除外する正規表現）を生成し得る、および／または最も望ましいもしくは最適な正規表現が選択され得る複数の正しい正規表現を生成し得るコンビナトリック探索に関する。たとえば、コンビナトリック探索中、全ＬＣＳアルゴリズムおよび正規表現生成処理は、テキスト処理方向の異なる組み合わせ／置換、異なる位置指定、およびＬＣＳアルゴリズムの他の異なる特性を含めて、複数回実行されてもよい。
【０１０２】
図２０は、最長共通サブシーケンス（ＬＣＳ）アルゴリズムのコンビナトリックな実行に基づいて正規表現を生成するための処理を示すフローチャートである。ステップ２００１において、正規表現生成器１１０は、陽性例に対応する入力データキャラクタシーケンスを受け取り得る。ステップ２００２において、正規表現生成器１１０は、ＬＣＳアルゴリズムのための実行技法のさまざまな異なる組み合わせに対して反復することができる。この例に示されるように、ステップ２００２の各反復の間に、正規表現生成器１１０は、以下のＬＣＳアルゴリズム実行パラメータ（または特性）、すなわち位置指定子（すなわち、位置指定なし、行の始まりで位置指定、行の終わりで位置指定）、処理方向（すなわち、右から左の順序、左から右の順序）、空白プッシュ（すなわち、空白プッシュを行うかまたは行わない）、およびスパンを隠す（collapse）（すなわち、スパンを隠すことを行うかまたは行わない）、の異なる組み合わせを選択し得る。ステップ２００３において、ＬＣＳアルゴリズムは、入力データキャラクタシーケンスにおいて（または、入力キャラクタシーケンスが最初に変換された場合には正規表現コードにおいて）実行され、ＬＣＳアルゴリズムは、ステップ２００２において選択されたパラメータ／特性に基づいて構成される。ステップ２００４において、ＬＣＳアルゴリズムの出力は、正規表現生成器１１０によって格納されてもよく、アルゴリズムによってＬＣＳが成功裡に識別されたか否か、および対応する正規表現の長さなどのデータを含み得る。ステップ２００５において、処理は、ＬＣＳアルゴリズムがコンビナトリック探索のパラメータ／特性のすべての可能な組み合わせで実行されるまで、反復してもよい。最後に、ステップ２００６において、ＬＣＳの１つからの特定の出力が、最適出力（たとえば、成功および正規表現長に基づく）として選択され、正規表現が、選択されたＬＣＳアルゴリズム出力に基づいて生成され得る。
【０１０３】
さまざまな実施形態において、図２０を参照して上述したもののようなコンビナトリック探索は、パラメータ／特性のさまざまな異なる組み合わせに対して実行されてもよい。たとえば、幾つかの実施形態では、ＬＣＳアルゴリズムは、正規表現をテキストの始まりに位置指定するためにカレット記号^を使用し、および／または正規表現をテキストの終わりに位置指定するためにドル記号$を使用してもよい。場合によっては、そのような位置指定は、より短い正規表現を生成する結果となり得る。位置指定子は、ユーザがストリングの始まりおよび／または終わりに特定のパターンを発見することを望む場合に特に有用であり得る。たとえば、ユーザは始まりに製品名を望む場合がある。ＬＣＳアルゴリズムを、製品名を記述するさまざまな数の単語と混同するのを避けるために、下の画像に示されるように、カレットを使用して、レゲックスをストリングの始まりに位置指定することができる。
【０１０４】
さらに、いくつかの実施形態では、ＬＣＳアルゴリズムは、順方向または逆方向のいずれかである入力データを用いて実行され得る（または同様に、ＬＣＳアルゴリズムは、通常の順序で入力データを受け取り、次いでアルゴリズムを実行する前に順序を逆にするように構成されてもよい）。したがって、いくつかの実施形態では、入力キャラクタシーケンスまたはコードのペアに対して実行され得るＬＣＳアルゴリズムのコンビナトリック探索は、以下のようであってもよい。
【０１０５】
１．通常（右から左へ）の順序、開始または終了に対して位置指定しない
２．通常（右から左へ）の順序、カレット^を使用して行の始まりに対して位置指定する
３．通常（右から左へ）の順序、ドル$を使用して行の終わりに対して位置指定する
４．逆（左から右へ）の順序、始まりまたは終わりに対して位置指定しない
５．逆（左から右へ）の順序、カレット^を使用して行の始まりに対して位置指定する
６．逆（左から右へ）の順序で、ドル$を使用して行の終わりに対して位置指定する
この例では、ＬＣＳの６つの実行のうち、最も短い結果の正規表現が選択されてもよい（ステップ２００６）。
【０１０６】
幾つかの実施形態では、ＬＣＳアルゴリズムのコンビナトリック探索は、greedy量指定子「?」および非greedy量指定子「??」に対して反復してもよい。たとえば、デフォルトでは、任意選択のスパンが存在する場合、１つの疑問符が発せられ、たとえば、任意選択のミドルイニシャルを有するファーストネームおよびラストネームについては[A-Z]+(?: [A-Z]/.)? [A-Z]+ である。greedy量指定子を使用する場合に満足のいく正規表現が見つからない場合には、コンビナトリック探索は、すべての疑問符量指定子を二重疑問符量指定子（たとえば[A-Z]+(?: [A-Z]/.)?? [A-Z]+）に置き換えることを試みることができる。二重疑問符は、非greedy量指定子に対応し、それは、マッチを見つけるために、下流の正規表現マッチャーにバックトラッキングモードに入るように命令することができる。
【０１０７】
加えて、いくつかの実施形態では、ＬＣＳアルゴリズムのコンビナトリック探索は、右側の空白を好むかどうかに対して反復することもできる。たとえば、上記のように、空白を右にプッシュするいくつかの実施形態において、たとえば、ＬＣＳアルゴリズムが、他の態様であれば等しい選択肢の恣意的な選択に直面する場合、空白スパンがともにマージされ、全体のスパンの数がより少なくなる結果となることを期待して、ある戦略が使用されてもよい。この特徴は、別の選択肢をコンビナトリック探索に追加し、すなわち、空白を右にプッシュするか、または判断を任意のままにする従来のＬＣＳアプローチに従って実行するかのいずれかにするようにする。
【０１０８】
さらに、いくつかの実施形態では、ＬＣＳアルゴリズムのコンビナトリック探索はまた、元のストリング上でＬＣＳを実行することによって、すべての例で共通のリテラルに対する走査／非走査に対して反復してもよい。そのような実施形態では、ＬＣＳアルゴリズムは、共通単語を識別し、整列するように構成され得る。本明細書で使用される場合、「共通単語」は、すべての陽性例において現れる単語を指し得る。いったん共通単語が識別されると、そのスパンタイプは、LETTERからWORDに変換されてもよく、次いで、ＬＣＳアルゴリズムを介する後続の実行は、それに自然に整列してもよい。
【０１０９】
したがって、以下の例においては、コンビナトリック探索は、完全なＬＣＳアルゴリズムが実行される９６回に達するように、いくつかのパラメータ／特性に対して反復してもよい。この例において反復されるべきさまざまなパラメータ／特性は以下のとおりである：
・位置指定子（３）（値＝^, $, またはどちらもない）
・空白をプッシュ（２）（値＝ＹｅｓまたはＮｏ）
・低濃度スパンのワイルドカードへの合体（２）（値＝ＹｅｓまたはＮｏ）
・Greedy量指定子?（２）（値＝ＹｅｓまたはＮｏ）
・ＬＣＳアルゴリズムの共通トークン上での整列（２）（値＝ＹｅｓまたはＮｏ）
・別のスパンとして扱われる文字「/pL」および数字「/pN」を保持することに対して、英数字を表すよう「/w」を使用（２）（値＝ＹｅｓまたはＮｏ）
上述したように、この例では、完全なＬＣＳアルゴリズムは９６回（たとえば３＊２＊２＊２＊２＊２＝９６）実行される。
【０１１０】
しかしながら、他の実施形態では、正規表現生成器１１０は、性能向上を提供してもよく、それによって、上記のリストのうちの最初の３つの特性のみ（位置指定子、空白のプッシュ、および低濃度スパンのワイルドカードへの合体）が、コンビナトリック探索に加わってもよい。これは、遙かにより少ない数の完全なＬＣＳアルゴリズムが実行されることになる結果となり得る（たとえば３＊２＊２＝１２回）。そのような実施形態では、上記リストの最後の３つの特性（Greedy量指定子、ＬＣＳアルゴリズムの共通トークン上での整列、ならびに別のスパンとして扱われる文字「/pL」および数字「/pN」を保持することに対して、英数字を表すよう「/w」を使用）は、コンビナトリック探索に加わらないが、これらの特性は、最後に、個々におよび逐次、テストされ得る。そのような実施形態においては技術的利点が実現され得、なぜならば、探索空白をこのように分割することは、それでも、満足のいく正規表現が、性能において約８倍の高速化を伴って、見いだされる結果となり得るからである。
【０１１１】
説明すると、コンビナトリック探索の以下の例は、前の例よりも性能上の利点を提供し得る。この例では、コンビナトリック探索は、反復されるべき以下のパラメータ／特性に基づいて実行され得る：
・位置指定（３）：BEGINNING_OF_LINE_MODE（行の始まりモード）, END_OF_LINE_MODE (行の終わりモード), NO_EOL_MODE （行の終わりなしモード）
・順序／方向（２）：右から左（通常）ＬＣＳ対左から右（逆）ＬＣＳ
・プッシュ（２）：ＬＣＳアルゴリズム内で空白を右にプッシュしようとするか否か
・ワイルドカードに圧縮（２）：時々発生するにすぎないスパンの長いシーケンスをワイルドカード.*?に圧縮しようとするか否か
この例におけるコンビナトリックは、完全なアルゴリズムを３＊２＊２＊２＝２４回実行する結果となり得る。次いで、正規表現生成器１１０は、ＬＣＳアルゴリズムの２４個の結果のうち最良のものを取り得、ここで、「最良」とは、（ａ）ＬＣＳアルゴリズムが成功したこと、および（ｂ）最短正規表現が生成されたこと、を意味し得る。次いで、正規表現生成器１１０は、以下の３つの追加のタスクを実行することができる：
１．空白、句読点、または記号によって途切れない文字および数字のシーケンスを、/wの生成されたレゲックスに対応する、ALPHANUMERICと呼ばれる新たなスパンタイプＩまで圧縮することを試みる。これは、クリックストリームログからのＩＰｖ６アドレスに見られる１６進数に対して有用であり得る（２０１９年４月からのノベルティ６４を参照されたい）。
【０１１２】
２．greedy量指定子?の代わりに非greedy量指定子??を使用することを試みる。
３．リテラル上で整列を試みる。
【０１１３】
ハードウェア概要
図２１は、ある実施形態を実現するための分散型システム２１００の簡略図を示す。図示される実施形態において、分散型システム２１００は、１つ以上の通信ネットワーク２１１０を介してサーバ２１１２に結合された１つ以上のクライアントコンピューティングデバイス２１０２、２１０４、２１０６、および２１０８を含む。クライアントコンピューティングデバイス２１０２、２１０４、２１０６、および２１０８は、１つ以上のアプリケーションを実行するように構成され得る。
【０１１４】
さまざまな実施形態において、サーバ２１１２は、本開示に記載される正規表現の自動化された生成を可能にする１つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合され得る。たとえば、特定の実施形態では、サーバ２１１２は、クライアントデバイスから送信されたユーザ入力データを受信することができ、ユーザ入力データは、クライアントデバイスで表示されたユーザインターフェイスを介して、クライアントデバイスによって受信される。次いで、サーバ２１１２は、ユーザ入力データを、ユーザインターフェイスを介して表示するためにクライアントデバイスに送信される正規表現に変換することができる。
【０１１５】
特定の実施形態では、サーバ２１１２はまた、非仮想環境および仮想環境を含み得る他のサービスまたはソフトウェアアプリケーションを提供し得る。いくつかの実施形態では、これらのサービスは、クライアントコンピューティングデバイス２１０２、２１０４、２１０６および／または２１０８のユーザに対して、サービスとしてのソフトウェア（Software as a Service：ＳａａＳ）モデルのようなウェブベースのサービスまたはクラウドサービスとして提供され得る。クライアントコンピューティングデバイス２１０２、２１０４、２１０６および／または２１０８を操作するユーザは、１つ以上のクライアントアプリケーションを利用してサーバ２１１２とやり取りすることで、これらのコンポーネントによって提供されるサービスを利用し得る。
【０１１６】
図２１に示される構成では、サーバ２１１２は、サーバ２１１２によって実行される機能を実現する１つ以上のコンポーネント２１１８、２１２０および２１２２を含み得る。これらのコンポーネントは、１つ以上のプロセッサ、ハードウェアコンポーネント、またはそれらの組合わせによって実行され得るソフトウェアコンポーネントを含み得る。分散型システム２１００とは異なり得る多種多様なシステム構成が可能であることが認識されるはずである。したがって、図２１に示される実施形態は、実施形態のシステムを実現するための分散型システムの一例であり、限定するよう意図されたものではない。
【０１１７】
ユーザは、クライアントコンピューティングデバイス２１０２、２１０４、２１０６および／または２１０８を用いて、１つまたは複数のアプリケーションを実行し、それは、本開示の教示に従って正規表現を生成してもよい。クライアントデバイスは、当該クライアントデバイスのユーザが当該クライアントデバイスと対話することを可能にするインターフェイスを提供し得る。クライアントデバイスはまた、このインターフェイスを介してユーザに情報を出力してもよい。図２１は４つのクライアントコンピューティングデバイスだけを示しているが、任意の数のクライアントコンピューティングデバイスがサポートされ得る。
【０１１８】
クライアントデバイスは、ポータブルハンドヘルドデバイス、パーソナルコンピュータおよびラップトップのような汎用コンピュータ、ワークステーションコンピュータ、ウェアラブルデバイス、ゲームシステム、シンクライアント、各種メッセージングデバイス、センサまたはその他のセンシングデバイスなどの、さまざまな種類のコンピューティングシステムを含み得る。これらのコンピューティングデバイスは、さまざまな種類およびバージョンのソフトウェアアプリケーションおよびオペレーティングシステム（たとえばＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ａｐｐｌｅ  Ｍａｃｉｎｔｏｓｈ（登録商標）、ＵＮＩＸ（登録商標）またはＵＮＩＸ系オペレーティングシステム、Ｌｉｎｕｘ（登録商標）またはＬｉｎｕｘ系オペレーティングシステム、たとえば、各種モバイルオペレーティングシステム（たとえばＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ  Ｍｏｂｉｌｅ（登録商標）、ｉＯＳ（登録商標）、Ｗｉｎｄｏｗｓ  Ｐｈｏｎｅ（登録商標）、Ａｎｄｒｏｉｄ（登録商標）、ＢｌａｃｋＢｅｒｒｙ（登録商標）、Ｐａｌｍ  ＯＳ（登録商標））を含むＧｏｏｇｌｅ  Ｃｈｒｏｍｅ（登録商標）ＯＳ）を含み得る。ポータブルハンドヘルドデバイスは、セルラーフォン、スマートフォン（たとえばｉＰｈｏｎｅ（登録商標））、タブレット（たとえばｉＰａｄ（登録商標））、携帯情報端末（ＰＤＡ）などを含み得る。ウェアラブルデバイスは、Ｇｏｏｇｌｅ  Ｇｌａｓｓ（登録商標）ヘッドマウントディスプレイおよびその他のデバイスを含み得る。ゲームシステムは、各種ハンドヘルドゲームデバイス、インターネット接続可能なゲームデバイス（たとえばＫｉｎｅｃｔ（登録商標）ジェスチャ入力デバイス付き／無しのＭｉｃｒｏｓｏｆｔ  Ｘｂｏｘ（登録商標）ゲーム機、Ｓｏｎｙ  ＰｌａｙＳｔａｔｉｏｎ（登録商標）システム、Ｎｉｎｔｅｎｄｏ（登録商標）が提供する各種ゲームシステムなど）を含み得る。クライアントデバイスは、各種インターネット関連アプリケーション、通信アプリケーション（たとえばＥメールアプリケーション、ショートメッセージサービス（ＳＭＳ）アプリケーション）のような多種多様なアプリケーションを実行可能であってもよく、各種通信プロトコルを使用してもよい。
【０１１９】
ネットワーク２１１０は、利用可能な多様なプロトコルのうちのいずれかを用いてデータ通信をサポートできる、当該技術の当業者には周知のいずれかの種類のネットワークであればよく、上記プロトコルは、ＴＣＰ／ＩＰ（伝送制御プロトコル／インターネットプロトコル）、ＳＮＡ（システムネットワークアーキテクチャ）、ＩＰＸ（インターネットパケット交換）、ＡｐｐｌｅＴａｌｋ（登録商標）などを含むがこれらに限定されない。単に一例として、ネットワーク２１１０は、ローカルエリアネットワーク（ＬＡＮ）、Ｅｔｈｅｒｎｅｔ（登録商標）に基づくネットワーク、トークンリング、ワイドエリアネットワーク（ＷＡＮ）、インターネット、仮想ネットワーク、仮想プライベートネットワーク（ＶＰＮ）、イントラネット、エクストラネット、公衆交換電話網（ＰＳＴＮ）、赤外線ネットワーク、無線ネットワーク（たとえば電気電子学会（ＩＥＥＥ）８０２．１１プロトコルスイートのいずれかの下で動作する無線ネットワーク、Ｂｌｕｅｔｏｏｔｈ（登録商標）および／または任意の他の無線プロトコル）、および／またはこれらおよび／または他のネットワークの任意の組み合わせを含み得る。
【０１２０】
サーバ２１１２は、１つ以上の汎用コンピュータ、専用サーバコンピュータ（一例としてＰＣ（パーソナルコンピュータ）サーバ、ＵＮＩＸ（登録商標）サーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラックマウント型サーバなどを含む）、サーバファーム、サーバクラスタ、またはその他の適切な構成および／または組み合わせで構成されてもよい。サーバ２１１２は、仮想オペレーティングシステムを実行する１つ以上の仮想マシン、または仮想化を伴う他のコンピューティングアーキテクチャを含み得る。これはたとえば、サーバに対して仮想記憶装置を維持するように仮想化できる論理記憶装置の１つ以上のフレキシブルプールなどである。各種実施形態において、サーバ２１１２を、上記開示に記載の機能を提供する１つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合させてもよい。
【０１２１】
サーバ２１１２内のコンピューティングシステムは、上記オペレーティングシステムのうちのいずれかを含む１つ以上のオペレーティングシステム、および、市販されているサーバオペレーティングシステムを実行し得る。また、サーバ２１１２は、ＨＴＴＰ（ハイパーテキスト転送プロトコル）サーバ、ＦＴＰ（ファイル転送プロトコル）サーバ、ＣＧＩ（コモンゲートウェイインターフェイス）サーバ、ＪＡＶＡ（登録商標）サーバ、データベースサーバなどを含むさまざまなさらに他のサーバアプリケーションおよび／または中間層アプリケーションのうちのいずれかを実行し得る。例示的なデータベースサーバは、Ｏｒａｃｌｅ（登録商標）、Ｍｉｃｒｏｓｏｆｔ（登録商標）、Ｓｙｂａｓｅ（登録商標）、ＩＢＭ（登録商標）（International Business Machines）などから市販されているものを含むが、それらに限定されない。
【０１２２】
いくつかの実現例において、サーバ２１１２は、クライアントコンピューティングデバイス２１０２、２１０４、２１０６および２１０８のユーザから受信したデータフィードおよび／またはイベントアップデートを解析および整理統合するための１つ以上のアプリケーションを含み得る。一例として、データフィードおよび／またはイベントアップデートは、センサデータアプリケーション、金融株式相場表示板、ネットワーク性能測定ツール（たとえば、ネットワークモニタリングおよびトラフィック管理アプリケーション）、クリックストリーム解析ツール、自動車交通モニタリングなどに関連するリアルタイムのイベントを含んでもよい、１つ以上の第三者情報源および連続データストリームから受信される、Ｔｗｉｔｔｅｒ（登録商標）フィード、Ｆａｃｅｂｏｏｋ（登録商標）アップデートまたはリアルタイムのアップデートを含み得るが、それらに限定されない。サーバ２１１２は、データフィードおよび／またはリアルタイムのイベントをクライアントコンピューティングデバイス２１０２、２１０４、２１０６および２１０８の１つ以上の表示デバイスを介して表示するための１つ以上のアプリケーションも含み得る。
【０１２３】
分散型システム２１００はまた、１つ以上のデータリポジトリ２１１４、２１１６を含み得る。特定の実施形態において、これらのデータリポジトリを用いてデータおよびその他の情報を格納することができる。たとえば、データリポジトリ２１１４、２１１６のうちの１つ以上を用いて、システムにより生成された正規表現とマッチする新たなデータの列のような情報を格納することができる。データリポジトリ２１１４、２１１６は、さまざまな場所に存在し得る。たとえば、サーバ２１１２が使用するデータリポジトリは、サーバ２１１２のローカル位置にあってもよく、またはサーバ２１１２から遠隔の位置にあってもよく、ネットワークベースの接続または専用接続を介してサーバ２１１２と通信する。データリポジトリ２１１４、２１１６は、異なる種類であってもよい。特定の実施形態において、サーバ２１１２が使用するデータリポジトリは、データベース、たとえば、Ｏｒａｃｌｅ  Ｃｏｒｐｏｒａｔｉｏｎ（登録商標）および他の製造業者が提供するデータベースのようなリレーショナルデータベースであってもよい。これらのデータベースのうちの１つ以上を、ＳＱＬフォーマットのコマンドに応じて、データの格納、アップデート、およびデータベースとの間での取り出しを可能にするように適合させてもよい。
【０１２４】
特定の実施形態では、データリポジトリ２１１４、２１１６のうちの１つ以上は、アプリケーションデータを格納するためにアプリケーションによって用いられてもよい。アプリケーションが使用するデータリポジトリは、たとえば、キー値ストアリポジトリ、オブジェクトストアリポジトリ、またはファイルシステムがサポートする汎用ストレージリポジトリのようなさまざまな種類のものであってもよい。
【０１２５】
特定の実施形態において、本開示に記載される機能は、クラウド環境を介してサービスとして提供され得る。図２２は、特定の例に係る、各種サービスをクラウドサービスとして提供し得るクラウドベースのシステム環境の簡略化されたブロック図である。図２２に示される例において、クラウドインフラストラクチャシステム２２０２は、ユーザが１つ以上のクライアントコンピューティングデバイス２２０４、２２０６および２２０８を用いて要求し得る１つ以上のクラウドサービスを提供し得る。クラウドインフラストラクチャシステム２２０２は、サーバ２１１２に関して先に述べたものを含み得る１つ以上のコンピュータおよび／またはサーバを含み得る。クラウドインフラストラクチャシステム２２０２内のコンピュータは、汎用コンピュータ、専用サーバコンピュータ、サーバファーム、サーバクラスタ、またはその他任意の適切な配置および／または組み合わせとして編成され得る。
【０１２６】
ネットワーク２２１０は、クライアント２２０４、２２０６、および２２０８と、クラウドインフラストラクチャシステム２２０２との間におけるデータの通信および交換を容易にし得る。ネットワーク２２１０は、１つ以上のネットワークを含み得る。ネットワークは同じ種類であっても異なる種類であってもよい。ネットワーク２２１０は、通信を容易にするために、有線および／または無線プロトコルを含む、１つ以上の通信プロトコルをサポートし得る。
【０１２７】
図２２に示される例は、クラウドインフラストラクチャシステムの一例にすぎず、限定を意図したものではない。なお、その他いくつかの例において、クラウドインフラストラクチャシステム２２０２が、図２２に示されるものよりも多くのコンポーネントもしくは少ないコンポーネントを有していてもよく、２つ以上のコンポーネントを組み合わせてもよく、または、異なる構成または配置のコンポーネントを有していてもよいことが、理解されるはずである。たとえば、図２２は３つのクライアントコンピューティングデバイスを示しているが、代替例においては、任意の数のクライアントコンピューティングデバイスがサポートされ得る。
【０１２８】
クラウドサービスという用語は一般に、サービスプロバイダのシステム（たとえばクラウドインフラストラクチャシステム２２０２）により、インターネット等の通信ネットワークを介してオンデマンドでユーザにとって利用可能にされるサービスを指すのに使用される。典型的に、パブリッククラウド環境では、クラウドサービスプロバイダのシステムを構成するサーバおよびシステムは、顧客自身のオンプレミスサーバおよびシステムとは異なる。クラウドサービスプロバイダのシステムは、クラウドサービスプロバイダによって管理される。よって、顧客は、別途ライセンス、サポート、またはハードウェアおよびソフトウェアリソースをサービスのために購入しなくても、クラウドサービスプロバイダが提供するクラウドサービスを利用できる。たとえば、クラウドサービスプロバイダのシステムはアプリケーションをホストし得るとともに、ユーザは、アプリケーションを実行するためにインフラストラクチャリソースを購入しなくても、インターネットを介してオンデマンドでアプリケーションをオーダーして使用し得る。クラウドサービスは、アプリケーション、リソースおよびサービスに対する容易でスケーラブルなアクセスを提供するように設計される。いくつかのプロバイダがクラウドサービスを提供する。たとえば、ミドルウェアサービス、データベースサービス、Ｊａｖａ（登録商標）クラウドサービスなどのいくつかのクラウドサービスが、カリフォルニア州レッドウッド・ショアーズのＯｒａｃｌｅ  Ｃｏｒｐｏｒａｔｉｏｎ（登録商標）から提供される。
【０１２９】
特定の実施形態において、クラウドインフラストラクチャシステム２２０２は、ハイブリッドサービスモデルを含む、サービスとしてのソフトウェア（ＳａａＳ）モデル、サービスとしてのプラットフォーム（ＰａａＳ）モデル、サービスとしてのインフラストラクチャ（ＩａａＳ）モデルなどのさまざまなモデルを使用して、１つ以上のクラウドサービスを提供し得る。クラウドインフラストラクチャシステム２２０２は、各種クラウドサービスのプロビジョンを可能にする、アプリケーション、ミドルウェア、データベース、およびその他のリソースのスイートを含み得る。
【０１３０】
ＳａａＳモデルは、アプリケーションまたはソフトウェアを、インターネットのような通信ネットワークを通して、顧客が基本となるアプリケーションのためのハードウェアまたはソフトウェアを購入しなくても、サービスとして顧客に配信することを可能にする。たとえば、ＳａａＳモデルを用いることにより、クラウドインフラストラクチャシステム２２０２がホストするオンデマンドアプリケーションに顧客がアクセスできるようにし得る。Ｏｒａｃｌｅ  Ｃｏｒｐｏｒａｔｉｏｎ（登録商標）が提供するＳａａＳサービスの例は、人的資源／資本管理のための各種サービス、カスタマー・リレーションシップ・マネジメント（ＣＲＭ）、エンタープライズ・リソース・プランニング（ＥＲＰ）、サプライチェーン・マネジメント（ＳＣＭ）、エンタープライズ・パフォーマンス・マネジメント（ＥＰＭ）、解析サービス、ソーシャルアプリケーションなどを含むがこれらに限定されない。
【０１３１】
ＩａａＳモデルは一般に、インフラストラクチャリソース（たとえばサーバ、ストレージ、ハードウェアおよびネットワーキングリソース）を、クラウドサービスとして顧客に提供することにより、柔軟な計算およびストレージ機能を提供するために使用される。各種ＩａａＳサービスがＯｒａｃｌｅ  Ｃｏｒｐｏｒａｔｉｏｎ（登録商標）から提供される。
【０１３２】
ＰａａＳモデルは一般に、顧客が、環境リソースを調達、構築、または管理しなくても、アプリケーションおよびサービスを開発、実行、および管理することを可能にするプラットフォームおよび環境リソースをサービスとして提供するために使用される。Ｏｒａｃｌｅ  Ｃｏｒｐｏｒａｔｉｏｎ（登録商標）が提供するＰａａＳサービスの例は、Oracle Java Cloud Service（ＪＣＳ）、Oracle Database Cloud Service（ＤＢＣＳ）、データ管理クラウドサービス、各種アプリケーション開発ソリューションサービスなどを含むがこれらに限定されない。
【０１３３】
クラウドサービスは一般に、オンデマンドのセルフサービスベースで、サブスクリプションベースで、柔軟にスケーラブルで、信頼性が高く、可用性が高い、安全なやり方で提供される。たとえば、顧客は、サブスクリプションオーダーを介し、クラウドインフラストラクチャシステム２２０２が提供する１つ以上のサービスをオーダーしてもよい。次いで、クラウドインフラストラクチャシステム２２０２は、処理を実行することにより、顧客のサブスクリプションオーダーで要求されたサービスを提供する。クラウドインフラストラクチャシステム２２０２を、１つまたは複数のクラウドサービスを提供するように構成してもよい。
【０１３４】
クラウドインフラストラクチャシステム２２０２は、さまざまなデプロイメントモデルを介してクラウドサービスを提供し得る。パブリッククラウドモデルにおいて、クラウドインフラストラクチャシステム２２０２は、第三者クラウドサービスプロバイダによって所有されていてもよく、クラウドサービスは一般のパブリックカスタマーに提供される。このカスタマーは個人または企業であってもよい。プライベートクラウドモデルでは、クラウドインフラストラクチャシステム２２０２がある組織内で（たとえば企業組織内で）機能してもよく、サービスはこの組織内の顧客に提供される。たとえば、この顧客は、人事部、給与部などの企業のさまざまな部署であってもよく、企業内の個人であってもよい。コミュニティクラウドモデルでは、クラウドインフラストラクチャシステム２２０２および提供されるサービスは、関連コミュニティ内のさまざまな組織で共有されてもよい。上記モデルの混成モデルなどのその他各種モデルが用いられてもよい。
【０１３５】
クライアントコンピューティングデバイス２２０４、２２０６、および２２０８は、異なるタイプであってもよく（たとえば図２１に示されるデバイス２１０２、２１０４、２１０６および２１０８）、１つ以上のクライアントアプリケーションを操作可能であってもよい。ユーザは、クライアントデバイスを用いることにより、クラウドインフラストラクチャシステム２２０２が提供するサービスを要求することなど、クラウドインフラストラクチャシステム２２０２とのやり取りを行い得る。
【０１３６】
いくつかの実施形態において、クラウドインフラストラクチャシステム２２０２が、管理関連サービスを提供するために実行する処理は、ビッグデータ解析を含み得る。この解析は、大きなデータセットを使用し、解析し、処理することにより、このデータ内のさまざまな傾向、挙動、関係などを検出し可視化することを含み得る。この解析は、１つ以上のプロセッサが、場合によっては、データを並列に処理し、データを用いてシミュレーションを実行するなどして、実行してもよい。たとえば、自動化された態様で正規表現を決定するために、ビッグデータ解析がクラウドインフラストラクチャシステム２２０２によって実行されてもよい。この解析に使用されるデータは、構造化データ（たとえばデータベースに格納されたデータもしくは構造化モデルに従って構造化されたデータ）および／または非構造化データ（たとえばデータブロブ（blob）（binary large object：バイナリ・ラージ・オブジェクト））を含み得る。
【０１３７】
図２２の例に示されるように、クラウドインフラストラクチャシステム２２０２は、クラウドインフラストラクチャシステム２２０２が提供する各種クラウドサービスのプロビジョンを容易にするために利用されるインフラストラクチャリソース２２３０を含み得る。インフラストラクチャリソース２２３０は、たとえば、処理リソース、ストレージまたはメモリリソース、ネットワーキングリソースなどを含み得る。
【０１３８】
特定の実施形態において、異なる顧客に対しクラウドインフラストラクチャシステム２２０２が提供する各種クラウドサービスをサポートするためのこれらのリソースを効率的にプロビジョニングし易くするために、リソースを、リソースのセットまたはリソースモジュール（「ポッド」とも処される）にまとめてもよい。各リソースモジュールまたはポッドは、１種類以上のリソースを予め一体化し最適化した組み合わせを含み得る。特定の実施形態において、異なるポッドを異なる種類のクラウドサービスに対して予めプロビジョニングしてもよい。たとえば、第１のポッドセットをデータベースサービスのためにプロビジョニングしてもよく、第１のポッドセット内のポッドと異なるリソースの組み合わせを含み得る第２のポッドセットをＪａｖａサービスなどのためにプロビジョニングしてもよい。いくつかのサービスについて、これらのサービスをプロビジョニングするために割り当てられたリソースをサービス間で共有してもよい。
【０１３９】
クラウドインフラストラクチャシステム２２０２自体が、クラウドインフラストラクチャシステム２２０２の異なるコンポーネントによって共有されるとともにクラウドインフラストラクチャシステム２２０２によるサービスのプロビジョニングを容易にするサービス２２３２を、内部で使用してもよい。これらの内部共有サービスは、セキュリティ・アイデンティティサービス、統合サービス、エンタープライズリポジトリサービス、エンタープライズマネージャサービス、ウィルススキャン・ホワイトリストサービス、高可用性、バックアップリカバリサービス、クラウドサポートを可能にするサービス、Ｅメールサービス、通知サービス、ファイル転送サービスなどを含み得るが、これらに限定されない。
【０１４０】
クラウドインフラストラクチャシステム２２０２は複数のサブシステムを含み得る。これらのサブシステムは、ソフトウェア、またはハードウェア、またはそれらの組み合わせで実現され得る。図２２に示されるように、サブシステムは、クラウドインフラストラクチャシステム２２０２のユーザまたは顧客がクラウドインフラストラクチャシステム２２０２とやり取りすることを可能にするユーザインターフェイスサブシステム２２１２を含み得る。ユーザインターフェイスサブシステム２２１２は、ウェブインターフェイス２２１４、クラウドインフラストラクチャシステム２２０２が提供するクラウドサービスが宣伝広告され消費者による購入が可能なオンラインストアインターフェイス２２１６、およびその他のインターフェイス２２１８などの、各種異なるインターフェイスを含み得る。たとえば、顧客は、クライアントデバイスを用いて、クラウドインフラストラクチャシステム２２０２がインターフェイス２２１４、２２１６、および２２１８のうちの１つ以上を用いて提供する１つ以上のサービスを要求（サービス要求２２３４）してもよい。たとえば、顧客は、オンラインストアにアクセスし、クラウドインフラストラクチャシステム２２０２が提供するクラウドサービスをブラウズし、クラウドインフラストラクチャシステム２２０２が提供するとともに顧客が申し込むことを所望する１つ以上のサービスについてサブスクリプションオーダーを行い得る。このサービス要求は、顧客と、顧客が申しむことを所望する１つ以上のサービスを識別する情報を含んでいてもよい。たとえば、顧客は、クラウドインフラストラクチャシステム２２０２によって提供される正規表現の自動生成関連サービスの申し込み注文を出すことができる。
【０１４１】
図２２に示される例のような特定の実施形態において、クラウドインフラストラクチャシステム２２０２は、新しいオーダーを処理するように構成されたオーダー管理サブシステム（order management subsystem：ＯＭＳ）２２２０を含み得る。この処理の一部として、ＯＭＳ２２２０は、既に作成されていなければ顧客のアカウントを作成し、要求されたサービスを顧客に提供するために顧客に対して課金するのに使用する課金および／またはアカウント情報を顧客から受け、顧客情報を検証し、検証後、顧客のためにこのオーダーを予約し、各種ワークフローを調整することにより、プロビジョニングのためにオーダーを準備するように、構成されてもよい。
【０１４２】
適切に妥当性確認がなされると、ＯＭＳ２２２０は、処理、メモリ、およびネットワーキングリソースを含む、このオーダーのためのリソースをプロビジョニングするように構成されたオーダープロビジョニングサブシステム（ＯＰＳ）２２２４を呼び出し得る。プロビジョニングは、オーダーのためのリソースを割り当てることと、顧客オーダーが要求するサービスを容易にするようにリソースを構成することとを含み得る。オーダーのためにリソースをプロビジョニングするやり方およびプロビジョニングされるリソースのタイプは、顧客がオーダーしたクラウドサービスのタイプに依存し得る。たとえば、あるワークフローに従うと、ＯＰＳ２２２４を、要求されている特定のクラウドサービスを判断し、この特定のクラウドサービスのために予め構成されたであろうポッドの数を特定するように構成されてもよい。あるオーダーのために割り当てられるポッドの数は、要求されたサービスのサイズ／量／レベル／範囲に依存し得る。たとえば、割り当てるポッドの数は、サービスがサポートすべきユーザの数、サービスが要求されている期間などに基づいて決定してもよい。次に、割り当てられたポッドを、要求されたサービスを提供するために、要求している特定の顧客に合わせてカスタマイズしてもよい。
【０１４３】
クラウドインフラストラクチャシステム２２０２は、要求されたサービスがいつ使用できるようになるかを示すために、レスポンスまたは通知２２４４を、要求している顧客に送ってもよい。いくつかの例において、顧客が、要求したサービスの利益の使用および利用を開始できるようにする情報（たとえばリンク）を顧客に送信してもよい。特定の実施形態では、正規表現の自動生成関連サービスを要求する顧客に対して、応答は、実行されるとユーザインターフェイスの表示を引き起こす命令を含み得る。
【０１４４】
クラウドインフラストラクチャシステム２２０２はサービスを複数の顧客に提供し得る。各顧客ごとに、クラウドインフラストラクチャシステム２２０２は、顧客から受けた１つ以上のサブスクリプションオーダーに関連する情報を管理し、オーダーに関連する顧客データを維持し、要求されたサービスを顧客に提供する役割を果たす。また、クラウドインフラストラクチャシステム２２０２は、申し込まれたサービスの顧客による使用に関する使用統計を収集してもよい。たとえば、統計は、使用されたストレージの量、転送されたデータの量、ユーザの数、ならびにシステムアップタイムおよびシステムダウンタイムの量などについて、収集されてもよい。この使用情報を用いて顧客に課金してもよい。課金はたとえば月ごとに行ってもよい。
【０１４５】
クラウドインフラストラクチャシステム２２０２は、サービスを複数の顧客に並列に提供してもよい。クラウドインフラストラクチャシステム２２０２は、場合によっては著作権情報を含む、これらの顧客についての情報を格納してもよい。特定の実施形態において、クラウドインフラストラクチャシステム２２０２は、顧客の情報を管理するとともに管理される情報を分離することで、ある顧客に関する情報が別の顧客に関する情報からアクセスされないようにするように構成された、アイデンティティ管理サブシステム（ＩＭＳ）２２２８を含む。ＩＭＳ２２２８は、アイデンティティサービス、情報アクセス管理、認証および許可サービス、顧客のアイデンティティおよび役割ならびに関連する能力などを管理するためのサービスなどの、各種セキュリティ関連サービスを提供するように構成されてもよい。
【０１４６】
図２３は、コンピュータシステム２３００の例を示す。いくつかの実施形態では、コンピュータシステム２３００は、上述のシステムのいずれかを実現するために用いられ得る。図２３に示されるように、コンピュータシステム２３００は、バスサブシステム２３０２を介して他のいくつかのサブシステムと通信する処理サブシステム２３０４を含むさまざまなサブシステムを含む。これらの他のサブシステムは、処理加速ユニット２３０６、Ｉ／Ｏサブシステム２３０８、ストレージサブシステム２３１８、および通信サブシステム２３２４を含み得る。ストレージサブシステム２３１８は、記憶媒体２３２２およびシステムメモリ２３１０を含む非一時的なコンピュータ読取り可能記憶媒体を含み得る。
【０１４７】
バスサブシステム２３０２は、コンピュータシステム２３００のさまざまなコンポーネントおよびサブシステムに意図されるように互いに通信させるための機構を提供する。バスサブシステム２３０２は単一のバスとして概略的に示されているが、バスサブシステムの代替例は複数のバスを利用してもよい。バスサブシステム２３０２は、さまざまなバスアーキテクチャのうちのいずれかを用いる、メモリバスまたはメモリコントローラ、周辺バス、ローカルバスなどを含むいくつかのタイプのバス構造のうちのいずれかであってもよい。たとえば、このようなアーキテクチャは、業界標準アーキテクチャ（Industry Standard Architecture：ＩＳＡ）バス、マイクロチャネルアーキテクチャ（Micro Channel Architecture：ＭＣＡ）バス、エンハンストＩＳＡ（Enhanced ISA：ＥＩＳＡ）バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション（Video Electronics Standards Association：ＶＥＳＡ）ローカルバス、およびＩＥＥＥ  Ｐ１３８６．１規格に従って製造されるメザニンバスとして実現され得る周辺コンポーネントインターコネクト（Peripheral Component Interconnect：ＰＣＩ）バスなどを含み得る。
【０１４８】
処理サブシステム２３０４は、コンピュータシステム２３００の動作を制御し、１つ以上のプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を含み得る。プロセッサは、シングルコアまたはマルチコアプロセッサを含み得る。コンピュータシステム２３００の処理リソースを、１つ以上の処理ユニット２３３２、２３３４などに組織することができる。処理ユニットは、１つ以上のプロセッサ、同一のまたは異なるプロセッサからの１つ以上のコア、コアとプロセッサとの組み合わせ、またはコアとプロセッサとのその他の組み合わせを含み得る。いくつかの実施形態において、処理サブシステム２３０４は、グラフィックスプロセッサ、デジタル信号プロセッサ（ＤＳＰ）などのような１つ以上の専用コプロセッサを含み得る。いくつかの実施形態では、処理サブシステム２３０４の処理ユニットの一部または全部は、特定用途向け集積回路（ＡＳＩＣ）またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）などのカスタマイズされた回路を使用し得る。
【０１４９】
いくつかの実施形態において、処理サブシステム２３０４内の処理ユニットは、システムメモリ２３１０またはコンピュータ読取り可能記憶媒体２３２２に格納された命令を実行し得る。さまざまな例において、処理ユニットはさまざまなプログラムまたはコード命令を実行するとともに、同時に実行する複数のプログラムまたはプロセスを維持し得る。任意の所定の時点で、実行されるべきプログラムコードの一部または全部は、システムメモリ２３１０および／または潜在的に１つ以上の記憶装置を含むコンピュータ読取り可能記憶媒体２３２２に常駐していてもよい。適切なプログラミングを介して、処理サブシステム２３０４は、上述のさまざまな機能を提供し得る。コンピュータシステム２３００が１つ以上の仮想マシンを実行している例において、１つ以上の処理ユニットが各仮想マシンに割り当ててもよい。
【０１５０】
特定の実施形態において、コンピュータシステム２３００によって実行される全体的な処理を加速するように、カスタマイズされた処理を実行するために、または処理サブシステム２３０４によって実行される処理の一部をオフロードするために、処理加速ユニット２３０６を任意に設けることができる。
【０１５１】
Ｉ／Ｏサブシステム２３０８は、コンピュータシステム２３００に情報を入力するための、および／またはコンピュータシステム２３００から、もしくはコンピュータシステム２３００を介して、情報を出力するための、デバイスおよび機構を含むことができる。一般に、「入力デバイス」という語の使用は、コンピュータシステム２３００に情報を入力するためのすべての考えられ得るタイプのデバイスおよび機構を含むよう意図される。ユーザインターフェイス入力デバイスは、たとえば、キーボード、マウスまたはトラックボールなどのポインティングデバイス、ディスプレイに組み込まれたタッチパッドまたはタッチスクリーン、スクロールホイール、クリックホイール、ダイアル、ボタン、スイッチ、キーパッド、音声コマンド認識システムを伴う音声入力デバイス、マイクロフォン、および他のタイプの入力デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、ユーザが入力デバイスを制御しそれと対話することを可能にするＭｉｃｒｏｓｏｆｔ  Ｋｉｎｅｃｔ（登録商標）モーションセンサ、Ｍｉｃｒｏｓｏｆｔ  Ｘｂｏｘ（登録商標）３６０ゲームコントローラ、ジェスチャおよび音声コマンドを用いる入力を受信するためのインターフェイスを提供するデバイスなど、モーションセンシングおよび／またはジェスチャ認識デバイスも含んでもよい。ユーザインターフェイス入力デバイスは、ユーザから目の動き（たとえば、写真を撮っている間および／またはメニュー選択を行っている間の「まばたき」）を検出し、アイジェスチャを入力デバイス（たとえばＧｏｏｇｌｅ  Ｇｌａｓｓ（登録商標））への入力として変換するＧｏｏｇｌｅ  Ｇｌａｓｓ（登録商標）瞬き検出器などのアイジェスチャ認識デバイスも含んでもよい。また、ユーザインターフェイス入力デバイスは、ユーザが音声コマンドを介して音声認識システム（たとえばＳｉｒｉ（登録商標）ナビゲータ）と対話することを可能にする音声認識感知デバイスを含んでもよい。
【０１５２】
ユーザインターフェイス入力デバイスの他の例は、三次元（３Ｄ）マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、ならびにスピーカ、デジタルカメラ、デジタルカムコーダ、ポータブルメディアプレーヤ、ウェブカム、画像スキャナ、指紋スキャナ、バーコードリーダ３Ｄスキャナ、３Ｄプリンタ、レーザレンジファインダ、および視線追跡デバイスなどの聴覚／視覚デバイスも含んでもよいが、それらに限定されない。また、ユーザインターフェイス入力デバイスは、たとえば、コンピュータ断層撮影、磁気共鳴撮像、ポジションエミッショントモグラフィー、および医療用超音波検査デバイスなどの医療用画像化入力デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、たとえば、ＭＩＤＩキーボード、デジタル楽器などの音声入力デバイスも含んでもよい。
【０１５３】
一般に、出力デバイスという語の使用は、コンピュータシステム２３００からユーザまたは他のコンピュータに情報を出力するための考えられるすべてのタイプのデバイスおよび機構を含むことを意図している。ユーザインターフェイス出力デバイスは、ディスプレイサブシステム、インジケータライト、または音声出力デバイスなどのような非ビジュアルディスプレイなどを含んでもよい。ディスプレイサブシステムは、陰極線管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）またはプラズマディスプレイを使うものなどのフラットパネルデバイス、計画デバイス、タッチスクリーンなどであってもよい。たとえば、ユーザインターフェイス出力デバイスは、モニタ、プリンタ、スピーカ、ヘッドフォン、自動車ナビゲーションシステム、プロッタ、音声出力デバイスおよびモデムなどの、テキスト、グラフィックスおよび音声／映像情報を視覚的に伝えるさまざまな表示デバイスを含んでもよいが、それらに限定されない。
【０１５４】
ストレージサブシステム２３１８は、コンピュータシステム２３００によって使用される情報およびデータを格納するためのリポジトリまたはデータストアを提供する。ストレージサブシステム２３１８は、いくつかの例の機能を提供する基本的なプログラミングおよびデータ構成を格納するための有形の非一時的なコンピュータ読取り可能記憶媒体を提供する。処理サブシステム２３０４によって実行されると上述の機能を提供するソフトウェア（たとえばプログラム、コードモジュール、命令）が、ストレージサブシステム２３１８に格納されてもよい。ソフトウェアは、処理サブシステム２３０４の１つ以上の処理ユニットによって実行されてもよい。ストレージサブシステム２３１８はまた、本開示の教示に従って使用されるデータを格納するためのリポジトリを提供してもよい。
【０１５５】
ストレージサブシステム２３１８は、揮発性および不揮発性メモリデバイスを含む１つ以上の非一時的メモリデバイスを含み得る。図２３に示すように、ストレージサブシステム２３１８は、システムメモリ２３１０およびコンピュータ読取り可能記憶媒体２３２２を含む。システムメモリ２３１０は、プログラム実行中に命令およびデータを格納するための揮発性主ランダムアクセスメモリ（ＲＡＭ）と、固定命令が格納される不揮発性読取り専用メモリ（ＲＯＭ）またはフラッシュメモリとを含む、いくつかのメモリを含み得る。いくつかの実現例において、起動中などにコンピュータシステム２３００内の要素間における情報の転送を助ける基本的なルーチンを含むベーシックインプット／アウトプットシステム（basic input/output system：ＢＩＯＳ）は、典型的には、ＲＯＭに格納されてもよい。典型的に、ＲＡＭは、処理サブシステム２３０４によって現在操作および実行されているデータおよび／またはプログラムモジュールを含む。いくつかの実現例において、システムメモリ２３１０は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）などのような複数の異なるタイプのメモリを含み得る。
【０１５６】
一例として、限定を伴うことなく、図２３に示されるように、システムメモリ２３１０は、ウェブブラウザ、中間層アプリケーション、リレーショナルデータベース管理システム（ＲＤＢＭＳ）などのような各種アプリケーションを含み得る、実行中のアプリケーションプログラム２３１２、プログラムデータ２３１４、およびオペレーティングシステム２３１６を、ロードしてもよい。一例として、オペレーティングシステム２３１６は、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ａｐｐｌｅ  Ｍａｃｉｎｔｏｓｈ（登録商標）および／またはＬｉｎｕｘオペレーティングシステム、市販されているさまざまなＵＮＩＸ（登録商標）またはＵＮＩＸ系オペレーティングシステム（さまざまなＧＮＵ／Ｌｉｎｕｘオペレーティングシステム、Ｇｏｏｇｌｅ  Ｃｈｒｏｍｅ（登録商標）ＯＳなどを含むがそれらに限定されない）、および／または、ｉＯＳ（登録商標）、Ｗｉｎｄｏｗｓ（登録商標）  Ｐｈｏｎｅ、Ａｎｄｒｏｉｄ（登録商標）  ＯＳ、ＢｌａｃｋＢｅｒｒｙ（登録商標）  ＯＳ、Ｐａｌｍ（登録商標）  ＯＳオペレーティングシステムのようなさまざまなバージョンのモバイルオペレーティングシステムなどを、含み得る。
【０１５７】
コンピュータ読取り可能記憶媒体２３２２は、いくつかの例の機能を提供するプログラミングおよびデータ構成を格納することができる。コンピュータ読取り可能記憶媒体２３２２は、コンピュータシステム２３００のための、コンピュータ読取り可能命令、データ構造、プログラムモジュール、および他のデータのストレージを提供することができる。処理サブシステム２３０４によって実行されると上記機能を提供するソフトウェア（プログラム、コードモジュール、命令）は、ストレージサブシステム２３１８に格納されてもよい。一例として、コンピュータ読取り可能記憶媒体２３２２は、ハードディスクドライブ、磁気ディスクドライブ、ＣＤ  ＲＯＭ、ＤＶＤ、Ｂｌｕ−Ｒａｙ（登録商標）ディスクなどの光ディスクドライブ、またはその他の光学媒体のような不揮発性メモリを含み得る。コンピュータ読取り可能記憶媒体２３２２は、Ｚｉｐ（登録商標）ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス（ＵＳＢ）フラッシュドライブ、セキュアデジタル（ＳＤ）カード、ＤＶＤディスク、デジタルビデオテープなどを含んでもよいが、それらに限定されない。コンピュータ読取り可能記憶媒体２３２２は、フラッシュメモリベースのＳＳＤ、エンタープライズフラッシュドライブ、ソリッドステートＲＯＭなどのような不揮発性メモリに基づくソリッドステートドライブ（ＳＳＤ）、ソリッドステートＲＡＭ、ダイナミックＲＡＭ、スタティックＲＡＭのような揮発性メモリに基づくＳＳＤ、ＤＲＡＭベースのＳＳＤ、磁気抵抗ＲＡＭ（ＭＲＡＭ）ＳＳＤ、およびＤＲＡＭとフラッシュメモリベースのＳＳＤとの組み合わせを使用するハイブリッドＳＳＤも含み得る。
【０１５８】
特定の実施形態において、ストレージサブシステム２３１８は、コンピュータ読取り可能記憶媒体２３２２にさらに接続可能なコンピュータ読取り可能記憶媒体リーダ２３２０も含み得る。リーダ２３２０は、ディスク、フラッシュドライブなどのようなメモリデバイスからデータを受け、読取るように構成されてもよい。
【０１５９】
特定の実施形態において、コンピュータシステム２３００は、処理およびメモリリソースの仮想化を含むがこれに限定されない仮想化技術をサポートし得る。たとえば、コンピュータシステム２３００は、１つ以上の仮想マシンを実行するためのサポートを提供し得る。特定の実施形態において、コンピュータシステム２３００は、仮想マシンの構成および管理を容易にするハイパーバイザなどのプログラムを実行し得る。各仮想マシンには、メモリ、演算（たとえばプロセッサ、コア）、Ｉ／Ｏ、およびネットワーキングリソースを割り当てられてもよい。各仮想マシンは通常、他の仮想マシンから独立して実行される。仮想マシンは、典型的には、コンピュータシステム２３００によって実行される他の仮想マシンによって実行されるオペレーティングシステムと同じであり得るかまたは異なり得るそれ自体のオペレーティングシステムを実行する。したがって、潜在的に複数のオペレーティングシステムがコンピュータシステム２３００によって同時に実行され得る。
【０１６０】
通信サブシステム２３２４は、他のコンピュータシステムおよびネットワークに対するインターフェイスを提供する。通信サブシステム２３２４は、他のシステムとコンピュータシステム２３００との間のデータの送受のためのインターフェイスとして機能する。たとえば、通信サブシステム２３２４は、コンピュータシステム２３００が、１つ以上のクライアントデバイスとの間で情報を送受信するために、インターネットを介して１つ以上のクライアントデバイスへの通信チャネルを確立することを可能にし得る。
【０１６１】
通信サブシステム２３２４は、有線および／または無線通信プロトコルの両方をサポートし得る。ある実施形態において、通信サブシステム２３２４は、（たとえば、セルラー電話技術、３Ｇ、４ＧもしくはＥＤＧＥ（グローバル進化のための高速データレート）などの先進データネットワーク技術、ＷｉＦｉ（ＩＥＥＥ８０２．ＸＸファミリー規格、もしくは他のモバイル通信技術、またはそれらのいずれかの組み合わせを用いて）無線音声および／またはデータネットワークにアクセスするための無線周波数（ＲＦ）送受信機コンポーネント、グローバルポジショニングシステム（ＧＰＳ）受信機コンポーネント、および／または他のコンポーネントを含み得る。いくつかの実施形態において、通信サブシステム２３２４は、無線インターフェイスに加えてまたはその代わりに、有線ネットワーク接続（たとえばEthernet（登録商標））を提供し得る。
【０１６２】
通信サブシステム２３２４は、さまざまな形式でデータを受信および送信し得る。いくつかの実施形態において、通信サブシステム２３２４は、他の形式に加えて、構造化データフィードおよび／または非構造化データフィード２３２６、イベントストリーム２３２８、イベントアップデート２３３０などの形式で入力通信を受信してもよい。たとえば、通信サブシステム２３２４は、ソーシャルメディアネットワークおよび／またはＴｗｉｔｔｅｒ（登録商標）フィード、Ｆａｃｅｂｏｏｋ（登録商標）アップデート、Ｒｉｃｈ  Ｓｉｔｅ  Ｓｕｍｍａｒｙ（ＲＳＳ）フィードなどのウェブフィード、および／または１つ以上の第三者情報源からのリアルタイムアップデートなどのような他の通信サービスのユーザから、リアルタイムでデータフィード２３２６を受信（または送信）するように構成されてもよい。
【０１６３】
特定の実施形態において、通信サブシステム２３２４は、連続データストリームの形式でデータを受信するように構成されてもよく、当該連続データストリームは、明確な終端を持たない、本来は連続的または無限であり得るリアルタイムイベントのイベントストリーム２３２８および／またはイベントアップデート２３３０を含んでもよい。連続データを生成するアプリケーションの例としては、たとえば、センサデータアプリケーション、金融株式相場表示板、ネットワーク性能測定ツール（たとえばネットワークモニタリングおよびトラフィック管理アプリケーション）、クリックストリーム解析ツール、自動車交通モニタリングなどを挙げることができる。
【０１６４】
通信サブシステム２３２４は、コンピュータシステム２３００からのデータを他のコンピュータシステムまたはネットワークに伝えるように構成されてもよい。このデータは、構造化および／または非構造化データフィード２３２６、イベントストリーム２３２８、イベントアップデート２３３０などのような各種異なる形式で、コンピュータシステム２３００に結合された１つ以上のストリーミングデータソースコンピュータと通信し得る１つ以上のデータベースに、伝えられてもよい。
【０１６５】
コンピュータシステム２３００は、ハンドヘルドポータブルデバイス（たとえばｉＰｈｏｎｅ（登録商標）セルラーフォン、ｉＰａｄ（登録商標）コンピューティングタブレット、ＰＤＡ）、ウェアラブルデバイス（たとえばＧｏｏｇｌｅ  Ｇｌａｓｓ（登録商標）ヘッドマウントディスプレイ）、パーソナルコンピュータ、ワークステーション、メインフレーム、キオスク、サーバラック、またはその他のデータ処理システムを含む、さまざまなタイプのうちの１つであればよい。コンピュータおよびネットワークの性質が常に変化しているため、図２３に示されるコンピュータシステム２３００の記載は、具体的な例として意図されているに過ぎない。図２３に示されるシステムよりも多くのコンポーネントまたは少ないコンポーネントを有するその他多くの構成が可能である。当業者であれば、本明細書における開示および教示に基づいて、さまざまな例を実現するための他の態様および／または方法を認識するだろう。
【０１６６】
特定の例について説明したが、さまざまな変形、変更、代替構成、および均等物が可能である。例は、特定のデータ処理環境内の動作に限定されず、複数のデータ処理環境内で自由に動作させることができる。さらに、例を特定の一連のトランザクションおよびステップを使用して説明したが、これが限定を意図しているのではないことは当業者には明らかであるはずである。いくつかのフローチャートは動作を逐次的プロセスとして説明しているが、これらの動作のうちの多くは並列または同時に実行されてもよい。加えて、動作の順序を再指定してもよい。プロセスは図に含まれない追加のステップを有し得る。上記の例の各種特徴および局面は、個別に使用されてもよく、またはともに使用されてもよい。
【０１６７】
さらに、特定の例をハードウェアとソフトウェアとの特定の組み合わせを用いて説明してきたが、ハードウェアとソフトウェアとの他の組み合わせも可能であることが理解されるはずである。特定の例は、ハードウェアでのみ、またはソフトウェアでのみ、またはそれらの組み合わせを用いて実現されてもよい。本明細書に記載されたさまざまなプロセスは、同じプロセッサまたは任意の組み合わせの異なるプロセッサ上で実現されてもよい。
【０１６８】
デバイス、システム、コンポーネントまたはモジュールが特定の動作または機能を実行するように構成されると記載されている場合、そのような構成は、たとえば、動作を実行するように電子回路を設計することにより、動作を実行するようにプログラミング可能な電子回路（マイクロプロセッサなど）をプログラミングすることにより、たとえば、非一時的なメモリ媒体に格納されたコードもしくは命令またはそれらの任意の組み合わせを実行するようにプログラミングされたコンピュータ命令もしくはコード、またはプロセッサもしくはコアを実行するなどにより、達成され得る。プロセスは、プロセス間通信のための従来の技術を含むがこれに限定されないさまざまな技術を使用して通信することができ、異なる対のプロセスは異なる技術を使用してもよく、同じ対のプロセスは異なる時間に異なる技術を使用してもよい。
【０１６９】
本開示では具体的な詳細を示すことにより例が十分に理解されるようにしている。しかしながら、例はこれらの具体的な詳細がなくとも実施し得るものである。たとえば、周知の回路、プロセス、アルゴリズム、構造、および技術は、例が曖昧にならないようにするために不必要な詳細事項なしで示している。本明細書は例示的な例のみを提供し、他の例の範囲、適用可能性、または構成を限定するよう意図されたものではない。むしろ、例の上記説明は、各種例を実現することを可能にする説明を当業者に提供する。要素の機能および構成の範囲内でさまざまな変更が可能である。
【０１７０】
したがって、明細書および図面は、限定的な意味ではなく例示的なものとみなされるべきである。しかしながら、請求項に記載されているより広範な精神および範囲から逸脱することなく、追加、削減、削除、ならびに他の修正および変更がこれらになされ得ることは明らかであろう。このように、具体的な例を説明してきたが、これらは限定を意図するものではない。さまざまな変形例および同等例は添付の特許請求の範囲内にある。
【０１７１】
上記の明細書では、本開示の局面についてその具体的な例を参照して説明しているが、本開示はそれに限定されるものではないということを当業者は認識するであろう。上記の開示のさまざまな特徴および局面は、個々にまたは一緒に用いられてもよい。さらに、例は、明細書のさらに広い精神および範囲から逸脱することなく、本明細書に記載されているものを超えて、さまざまな環境および用途で利用することができる。したがって、明細書および図面は、限定的ではなく例示的であると見なされるべきである。
【０１７２】
上記の説明では、例示の目的で、方法を特定の順序で記載した。代替の例では、方法は記載された順序とは異なる順序で実行されてもよいことを理解されたい。また、上記の方法は、ハードウェアコンポーネントによって実行されてもよいし、マシン実行可能命令であって、用いられると、そのような命令でプログラムされた汎用もしくは専用のプロセッサまたは論理回路などのマシンに方法を実行させてもよいマシン実行可能命令のシーケンスで具体化されてもよいことも理解されたい。これらのマシン実行可能命令は、ＣＤ−ＲＯＭもしくは他の種類の光ディスク、フロッピー（登録商標）ディスク、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気もしくは光学カード、フラッシュメモリのような、１つ以上の機械可読媒体、または電子命令を記憶するのに適した他の種類の機械可読媒体に保存できる。代替的に、これらの方法は、ハードウェアとソフトウェアとの組み合わせによって実行されてもよい。
【０１７３】
構成要素が特定の動作を実行するように構成されるとして記載されている場合、そのような構成は、たとえば、特定の動作を実行するよう電子回路もしくは他のハードウェアを設計すること、特定の動作を実行するようプログラミング可能な電子回路（たとえばマイクロプロセッサもしくは他の好適な電子回路）をプログラミングすること、またはそれらの任意の組み合わせによって達成されてもよい。
【０１７４】
本願の説明のための例をここに詳細に記載したが、本発明の概念は、他の態様で様々に具現化および採用され得ること、および特許請求の範囲は、先行技術によって制限される場合を除き、そのような変形を含むように解釈されるよう意図されることを理解されたい。
【０１７５】
構成要素が特定の動作を実行する「ように構成される」として記載されている場合、そのような構成は、たとえば、特定の動作を実行するよう電子回路もしくは他のハードウェアを設計すること、特定の動作を実行するようプログラミング可能な電子回路（たとえばマイクロプロセッサもしくは他の好適な電子回路）をプログラミングすること、またはそれらの任意の組み合わせによって達成されてもよい。
【図１】
2021527260.tif 000005
【図２】
2021527260.tif 000006
【図３】
2021527260.tif 000007
【図４】
2021527260.tif 000008
【図５】
2021527260.tif 000009
【図６】
2021527260.tif 000010
【図７】
2021527260.tif 000011
【図８Ａ】
2021527260.tif 000012
【図８Ｂ】
2021527260.tif 000013
【図９】
2021527260.tif 000014
【図１０Ａ】
2021527260.tif 000015
【図１０Ｂ】
2021527260.tif 000016
【図１１】
2021527260.tif 000017
【図１２】
2021527260.tif 000018
【図１３】
2021527260.tif 000019
【図１４】
2021527260.tif 000020
【図１５】
2021527260.tif 000021
【図１６Ａ】
2021527260.tif 000022
【図１６Ｂ】
2021527260.tif 000023
【図１７】
2021527260.tif 000024
【図１８】
2021527260.tif 000025
【図１９】
2021527260.tif 000026
【図２０】
2021527260.tif 000027
【図２１】
2021527260.tif 000028
【図２２】
2021527260.tif 000029
【図２３】
2021527260.tif 000030
【国際調査報告】
2021527260.tif 000031
2021527260.tif 000032
2021527260.tif 000033