(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-08-29
(45)【発行日】2024-09-06
(54)【発明の名称】コンテキストを用いた陰性例のための正規表現生成
(51)【国際特許分類】
G06F 16/215 20190101AFI20240830BHJP
【FI】
G06F16/215
(21)【出願番号】P 2021539860
(86)(22)【出願日】2020-06-18
(86)【国際出願番号】 US2020038431
(87)【国際公開番号】W WO2020263675
(87)【国際公開日】2020-12-30
【審査請求日】2023-05-25
(32)【優先日】2019-06-24
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-06-17
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】マラック,マイケル
(72)【発明者】
【氏名】リーバス,ルイス・イー
(72)【発明者】
【氏名】クライダー,マーク・エル
【審査官】齊藤 貴孝
(56)【参考文献】
【文献】米国特許出願公開第2007/0198565(US,A1)
【文献】米国特許出願公開第2017/0220218(US,A1)
【文献】特開2010-250450(JP,A)
【文献】特開2019-049823(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
正規表現を生成する方法であって、
1つまたは複数のプロセッサを備える正規表現生成器が、1つまたは複数の陽性のキャラクタシーケンスを含む第1の選択を受け取ることを含み、前記1つまたは複数の陽性のキャラクタシーケンスの各々は、前記正規表現生成器によって生成される正規表現によってマッチされるべき陽性例に対応し、前記方法はさらに、
前記正規表現生成器が第1の正規表現を生成することを含み、前記第1の正規表現は前記陽性例にマッチし、前記方法はさらに、
前記正規表現生成器が、1つまたは複数の陰性のキャラクタシーケンスを含む第2の選択を受け取ることを含み、前記1つまたは複数の陰性のキャラクタシーケンスの各々は、前記正規表現生成器によって生成される前記正規表現によってマッチされるべきでない陰性例に対応し、前記方法はさらに、
前記第2の選択を受け取ることに応答して、前記陰性例に対応する前記1つまたは複数の陰性のキャラクタシーケンスのコンテキストを判断することと、
前記1つまたは複数の陰性のキャラクタシーケンスの前記判断されたコンテキストに基づいて、前記第1の正規表現を更新することとを含む、方法。
【請求項2】
前記第1の選択を受け取ることは、ユーザインターフェイスを介して、データセットの第1のデータセルにおいて前記1つまたは複数の陽性のキャラクタシーケンスの選択を受け取ることを含む、請求項1に記載の方法。
【請求項3】
前記正規表現生成器が、前記データセット内の複数のデータセル内において、前記1つまたは複数の陽性のキャラクタシーケンスを含む第1の選択に対応するキャラクタシーケンスを自動的に選択することをさらに含む、請求項2に記載の方法。
【請求項4】
前記第2の選択を受け取ることは、前記ユーザインターフェイスを介して、前記データセットの第2のデータセルにおいて前記1つまたは複数の陰性のキャラクタシーケンスの選択を受け取ることを含む、請求項3に記載の方法。
【請求項5】
前記正規表現生成器によって、前記データセット内の前記複数のデータセル内において、前記1つまたは複数の陰性のキャラクタシーケンスを含む第2の選択に対応するキャラクタシーケンスを自動的に選択することをさらに含む、請求項4に記載の方法。
【請求項6】
前記第1の選択は、第1の強調表示フォーマットで強調表示され、前記第2の選択は、前記第1の強調表示フォーマットとは異なる第2の強調表示フォーマットで強調表示される、請求項3
から5のいずれか1項に記載の方法。
【請求項7】
前記陰性例に対応する前記1つまたは複数の陰性のキャラクタシーケンスの前記コンテキストを判断することは、
前記第2の選択の、埋め込まれた強調表示位置を識別することと、
前記第2の選択の前記埋め込まれた強調表示位置の左側のデータからコンテキストを判断することと、
前記強調表示された第2の選択の前記埋め込まれた強調表示位置の右側のデータからコンテキストを判断することととを含む、請求項6に記載の方法。
【請求項8】
前記陰性例に対応する前記1つまたは複数の陰性のキャラクタシーケンスの前記コンテキストを判断することは、さらに、
前記埋め込まれた強調表示位置の左側のデータからの前記判断されたコンテキストおよび前記埋め込まれた強調表示位置の右側のデータからの前記判断されたコンテキストに基づいて自動的に選択された、前記1つまたは複数の陰性のキャラクタシーケンスを含む前記第1の選択に対応する、前記データセット内の前記複数のデータセル内におけるキャラクタシーケンスをフィルタリングすることと、
前記データセット内の前記複数のデータセル内の前記選択されたキャラクタシーケンスから、前記選択された1つまたは複数の陰性のキャラクタシーケンスに対応する前記フィルタリングされたキャラクタシーケンスを除去することとを含む、請求項7に記載の方法。
【請求項9】
前記埋め込まれた強調表示位置の左側のデータから前記コンテキストを判断することは、前記埋め込まれた強調表示位置の左側の第1のスパンを識別することを含み、
前記選択された1つまたは複数の陰性のキャラクタシーケンスに対応する前記データセット内の前記複数のデータセル内の前記キャラクタシーケンスをフィルタリングすることは、前記選択された1つまたは複数の陰性のキャラクタシーケンスに対応する前記複数のデータセル内の前記キャラクタシーケンスにおいて、前記埋め込まれた強調表示位置の左側の前記第1のスパンとマッチしないスパンを識別することをさらに含む、請求項8に記載の方法。
【請求項10】
前記埋め込まれた強調表示位置の左側のデータからコンテキストを判断することは、前記埋め込まれた強調表示の左側の第2のスパンを識別することをさらに含み、
前記選択された1つまたは複数の陰性のキャラクタシーケンスに対応する前記データセット内の前記複数のデータセル内の前記キャラクタシーケンスをフィルタリングすることは、前記選択された1つまたは複数の陰性のキャラクタシーケンスに対応する前記複数のデータセル内の前記キャラクタシーケンスにおいて、前記埋め込まれた強調表示位置の左側の前記第2のスパンとマッチしないスパンを識別することをさらに含む、請求項9に記載の方法。
【請求項11】
前記埋め込まれた強調表示位置の右側のデータから前記コンテキストを判断することは、前記埋め込まれた強調表示位置の右側の第1のスパンを識別することを含み、
前記1つまたは複数の陰性のキャラクタシーケンスを含む第2の選択に対応する前記データセット中の前記複数のデータセル中の前記キャラクタシーケンスをフィルタリングすることは、前記1つまたは複数の陰性のキャラクタシーケンスを含む第2の選択に対応する前記複数のデータセル中の前記キャラクタシーケンスにおいて、前記埋め込まれた強調表示位置の右側の前記第1のスパンとマッチしないスパンを識別することをさらに含む、請求項7に記載の方法。
【請求項12】
正規表現生成器サーバコンピュータであって、
プロセッサと、
メモリと、
前記プロセッサに結合される
記憶媒体とを備え、前記
記憶媒体は、
請求項1から11のいずれか1項に記載の方法を実現するために前記プロセッサによって実行可能な命令を格納
する、正規表現生成器サーバコンピュータ。
【請求項13】
1つまたは複数のプロセッサによって実行されると、当該1または複数のプロセッサに、請求項1から11のいずれか1項に記載の方法を実行させるための命令を有したプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、2019年6月11日に提出された、「USER INTERFACE FOR REGULAR EXPRESSION GENERATION(正規表現生成のためのユーザインターフェイス)」と題される米国特許出願第16/438,327号の一部係属であり、米国特許法第119条(e)に基づき、2018年6月13日に提出された「AUTOMATED GENERATION OF REGULAR EXPRESSIONS(自動化された正規表現生成)」と題される米国仮特許出願第62/684,498号に対する優先権を主張し、および米国特許法第119条(e)に基づき、2018年10月22日に提出された「AUTOMATED GENERATION OF REGULAR EXPRESSIONS(自動化された正規表現生成)」と題される米国仮特許出願第62/749,001号に対する優先権を主張する。本出願はまた、米国特許法第119条(e)に基づき、2019年6月24日に提出された「AUTOMATED GENERATION OF REGULAR EXPRESSIONS(正規表現の自動生成)」と題される米国仮特許出願第62/865,797号に対する優先権を主張する。それらの全内容は、あらゆる目的のために参照により本明細書に組み込まれる。
【背景技術】
【0002】
背景
ビッグデータ解析システムは、予測解析、ユーザ挙動解析、および他の高度なデータ解析に使用することができる。しかしながら、有用な結果を提供するために任意のデータ解析が効果的に実行される前に、最初のデータセットは、クリーンかつキュレートされたデータセットにフォーマットされる必要があり得る。このデータオンボード化は、多くの場合、さまざまな異なるデータソースおよび/またはデータストリームからのデータが単一のデータリポジトリにコンパイルされ得るクラウドベースのデータリポジトリならびに他のビッグデータシステムに対する課題を提示する。そのようなデータは、複数の異なるフォーマットの構造化データ、異なるデータモデルに従った半構造化データ、およびさらには非構造化データを含み得る。そのようなデータのリポジトリは、多くの場合、さまざまな異なるフォーマットおよび構造内のデータ表現を含み、重複データおよび誤ったデータを含む場合もある。これらのデータリポジトリが報告、予測モデリング、および他の解析タスクのために解析されるとき、初期データセットの低信号対雑音比は、不正確であるかまたは有用でない結果につながり得る。
【0003】
データフォーマッティングおよび前処理の問題に対する多くの現在の解決策は、データ解析を実行する前にデータを共通のフォーマットに操作するために、データを浄化およびキュレートするための手動およびアドホック処理を含む。これらの手動処理は、特定のより小さいデータセットに対しては有効であり得るが、そのような処理は、大規模なデータセットを前処理およびフォーマットすることを試みる場合は、非効率的かつ非実用的であり得る。
【発明の概要】
【課題を解決するための手段】
【0004】
概要
本明細書で説明される態様は、正規表現を生成するためのさまざまな技法を提供する。本明細書で使用される場合、「正規表現」は、より長い入力テキストストリング内のマッチを検索するために使用され得る、パターンを定義するキャラクタのシーケンスを指し得る。いくつかの実施形態では、正規表現は、記号のワイルドカードマッチング言語を使用して構成されてもよく、正規表現によって定義されたパターンは、キャラクタストリングとマッチするよう、および/または入力として与えられるキャラクタストリングから情報を抽出するよう、使用されてもよい。本明細書で説明するさまざまな実施形態では、データ処理システムとして実現される正規表現生成器を使用して、入力テキストデータを受信および表示し、クライアントユーザインターフェイスを介して入力テキストの特定のキャラクタサブセットの選択を受け取り、次いで、選択されたキャラクタサブセットに基づいて1つまたは複数の正規表現を生成することができる。1つまたは複数の正規表現を生成した後、正規表現エンジンを使用して、正規表現のパターンを1つまたは複数のデータセットに対してマッチさせることができる。さまざまな実施形態において、正規表現にマッチするデータは、抽出、再フォーマット、または修正などされてもよい。場合によっては、正規表現にマッチするデータに基づいて、追加の列、テーブル、または他のデータセットが作成されてもよい。
【0005】
本明細書で説明するいくつかの態様によれば、データ処理システムを介して実現される正規表現生成器は、1つまたは複数の正規表現コードの、異なるセットによって共有される、判断された最長共通サブシーケンス(LCS)に基づいて、正規表現を生成することができる。正規表現コード(カテゴリコードとも称され得る)は、たとえば、英語アルファベットの文字に対するL、数字に対するN、空白に対するZ、句読点に対するP、および他の記号に対するSを含み得る。1つまたは複数の正規表現コードの各セットは、ユーザインターフェイスを介して入力データとして受信された1つまたは複数のキャラクタの異なるシーケンスから変換され得る。LCSから除外される正規表現コードは、任意選択および/または代替として表され得る。いくつかの実施形態では、正規表現コードは、正規表現コードの最小発生数に関連付けられてもよい。追加または代替として、正規表現コードは、正規表現コードの最大発生数に関連付けられてもよい。たとえば、あるカテゴリコードのセットは、LCSの特定の部分が、ある文字を、もしあったとしてもせいぜい1回含む旨を示すよう、L<0,1>を含んでもよい。以下でより詳細に説明するように、入力データを中間正規表現コード(IREC)として一般化することは、非常にわずかな入力データを使用することを含むさまざまな技術的利点を提供し得、それは、まだ見られていないデータにおける偽陽性マッチまたは偽陰性マッチに屈しない正規表現のほぼ即時的な生成を可能にする。
【0006】
本明細書で説明される追加の態様によれば、正規表現は、3つ以上のキャラクタシーケンスを含む入力データに基づいて生成され得る。3つ以上のキャラクタシーケンスが入力データとして識別される場合、キャラクタシーケンスのLCSを識別する正規表現生成器は、ランタイムの指数関数的な増加をもたらし得る。すべてのキャラクタシーケンスのLCSを充分に機能する態様で識別するために、正規表現生成器は、2つのキャラクタシーケンスの各別個の組み合わせに対してLCSアルゴリズムを実行してもよい。LCSアルゴリズムの結果に基づいて、全結合グラフを生成してもよく、各グラフノードは異なるキャラクタシーケンスを表し、各グラフエッジの長さは、グラフエッジを定義するノードのLCSに対応する。次いで、全結合グラフに対して最小スパニングツリーの深さ優先トラバースを実行することによって、キャラクタシーケンスを選択する順序を判断してもよい。
【0007】
本明細書で説明されるさらなる態様は、陽性キャラクタシーケンス例および陰性キャラクタシーケンス例の両方を含む入力に基づいて正規表現を生成することに関する。陽性例は、生成されるべき正規表現にマッチするキャラクタのシーケンスを指し得、陰性例は、生成されるべき正規表現にマッチしないキャラクタのシーケンスを指し得る。いくつかの実施形態では、陽性例および陰性例の両方が受け取られた場合、正規表現生成器は、弁別子、つまり陽性例を陰性例から区別する1つまたは複数のキャラクタの最短サブシーケンスを識別してもよい。選択された弁別子は、(たとえばカテゴリコードで表現された)最短シーケンスであってもよく、陽性または陰性のいずれかであってもよく、したがって、陽性例はマッチし、陰性例はマッチしないことになる。次いで、弁別子は、正規表現生成器によって生成される正規表現にハードコード化されてもよい。場合によっては、最短サブシーケンスは、陰性例のプレフィックス部分またはサフィックス部分に含まれてもよい。
【0008】
本明細書で説明されるさらなる態様は、正規表現を生成するために入力データが提供され得る1つまたは複数のユーザインターフェイスに関する。いくつかの実施形態では、ユーザインターフェイスは、正規表現生成サーバに通信可能に結合されたクライアントデバイスに表示されてもよい。ユーザインターフェイスは、サーバによって、クライアントデバイスによって、またはサーバおよびクライアントにおいて実行されるソフトウェアコンポーネントの組み合わせによってプログラム的に生成され得る。ユーザインターフェイスを介して受信された入力データは、陽性例または陰性例を表し得る1つまたは複数のキャラクタシーケンスのユーザ選択に対応し得る。場合によっては、ユーザインターフェイスは、第2のキャラクタシーケンス内の第1のキャラクタシーケンスの選択を含む入力データをサポートしてもよい。たとえば、ユーザは、より大きな、以前に強調表示されたキャラクタシーケンス内の、1つまたは複数のキャラクタを強調表示することができ、第2のユーザ選択は、より大きな第1のユーザ選択のためのコンテキストを提供することができる。これは、入力データが、より高い特異性で正規表現生成器に提供されることを可能にし、正規表現生成器に「コンテキスト」を提供して、それが、偽陽性を回避する正規表現を生成できるようにすることを可能にする。ユーザインターフェイスを介してユーザがキャラクタシーケンスを選択することに応答して、正規表現生成器は正規表現を生成して表示してもよい。たとえば、ユーザがキャラクタの第1のシーケンスを強調表示すると、正規表現生成器は、キャラクタの第1のシーケンスにマッチする正規表現、ならびに他の同様のキャラクタシーケンス(たとえば、マッチするシーケンスについてユーザの意図と整合する)を生成し、表示することができる。ユーザがキャラクタの第2のシーケンスを強調表示すると、正規表現生成器は、キャラクタの第1のシーケンスとキャラクタの第2のシーケンスとの両方を包含する更新された正規表現を生成してもよい。次いで、ユーザが(たとえば第1のシーケンスまたは第2のシーケンスのいずれか内で)キャラクタの第3のシーケンスを強調表示すると、正規表現生成器は正規表現を再び更新してもよいなどとなる。
【0009】
本明細書で説明される追加の態様によれば、正規表現は、1つまたは複数の入力シーケンス例からの最長共通サブシーケンスに基づいて生成され得るが、例のいくつかにのみ存在するキャラクタを取り扱うこともできる。いくつかの入力例においてのみ存在するキャラクタを取り扱うために、正規表現コードの最小発生数および最大発生数の両方が追跡されるスパンを定義してもよい。所与の入力例のすべてにスパンが存在しない可能性がある場合、最小発生数はゼロにセットされてもよい。次いで、これらの最小数および最大数は、正規表現マルチプリシティ構文にマッピングされ得る。最長共通サブシーケンス(LCS)アルゴリズムを、すべての入力例には現れない「任意選択の」スパン(たとえばゼロの最小長さ)を含む、入力例から導出されたキャラクタのスパン上で実行してもよい。以下で説明するように、連続するスパンは、LCSアルゴリズムの実行中にマージされてもよい。そのような場合において、一緒に担持されている追加の任意選択のスパンが連続して出現することに終わるとき、LCSアルゴリズムは、それらの任意選択のスパン上でも同様に再帰的に実行されてもよい。
【0010】
本明細書で説明されるさらなる態様は、正規表現生成器によって実行されるLCSアルゴリズムが複数回実行されて、「正しい」正規表現(たとえば、すべての所与の陽性例と適切にマッチし、すべての所与の陰性例を適切に除外する正規表現)を生成してもよく、および/または最も望ましいもしくは最適な正規表現が選択され得る複数の正しい正規表現を生成してもよい、コンビナトリック探索に関する。いくつかの実施形態では、LCSアルゴリズムは一般に、正規表現を生成するために、入力例において右から左に実行され得る。しかしながら、比較の目的のために、および代替的な正規表現を見つけるために、LCSアルゴリズムは、入力例において逆方向に(たとえば左から右への方向で)別途実行されてもよい。たとえば、ユーザ入力として受信された例示的なキャラクタシーケンスは、それらがLCSアルゴリズムを通過する前に反転されてもよく、次いで、LCSアルゴリズムからの結果を、(元のテキストフラグメントを含んで)反転して戻してもよい。さらに、いくつかの実施形態では、LCSアルゴリズムは、正規表現生成器によって、複数回、通常のキャラクタシーケンス順序および逆の順序の両方で、行の始まりでの位置指定、行の終わりでの位置固定、行の始まりまたは終わりでの位置指定なしで、実行されてもよい。したがって、場合によっては、LCSアルゴリズムは、少なくともこれら6回実行されてもよく、最短の成功裡な正規表現が、これらの実行から選択されてもよい。
【図面の簡単な説明】
【0011】
【
図1】さまざまな実施形態が実現され得る、正規表現を生成するための例示的な分散システムの構成要素を示すブロック図である。
【
図2】本明細書で説明する1つまたは複数の実施形態による、ユーザインターフェイスを介して受信された入力に基づいて正規表現を生成するための処理を示すフローチャートである。
【
図3】本明細書で説明する1つまたは複数の実施形態による、正規表現コードのセット上で最長共通サブシーケンス(LCS)アルゴリズムを使用して正規表現を生成するための処理を示すフローチャートである。
【
図4】本明細書で説明する1つまたは複数の実施形態による、正規表現コードのセット上で最長共通サブシーケンス(LCS)アルゴリズムを使用して、2つのキャラクタシーケンス例に基づいて正規表現を生成するための例示的な図である。
【
図5】本明細書で説明する1つまたは複数の実施形態による、より大きな正規表現コードのセット上で最長共通サブシーケンス(LCS)アルゴリズムを使用して正規表現を生成するための処理を示すフローチャートである。
【
図6】本明細書で説明する1つまたは複数の実施形態による、正規表現コードのセット上で最長共通サブシーケンス(LCS)アルゴリズムを使用して、5つのキャラクタシーケンス例に基づいて正規表現を生成するための例示的な図である。
【
図7】本明細書で説明する1つまたは複数の実施形態による、より大きな正規表現コードのセット上で最長共通サブシーケンス(LCS)アルゴリズムについて実行の順序を判断するための処理を示すフローチャートである。
【
図8A】本明細書に記載する1つまたは複数の実施形態による、より大きな正規表現コードのセット上で最長共通サブシーケンス(LCS)アルゴリズムについて実行の順序を判断するために用いられる、全結合グラフを示す。
【
図8B】本明細書に記載する1つまたは複数の実施形態による、より大きな正規表現コードのセット上で最長共通サブシーケンス(LCS)アルゴリズムについて実行の順序を判断するために用いられる、全結合グラフの最小スパニングツリー表現を示す。
【
図9】本明細書に記載する1つまたは複数の実施形態による、陽性キャラクタシーケンス例および陰性キャラクタシーケンス例に基づいて正規表現を生成するための処理を示すフローチャートである。
【
図10A】本明細書に記載する1つまたは複数の実施形態による、陽性キャラクタシーケンス例に基づく正規表現の生成を示す例示的なユーザインターフェイス画面である。
【
図10B】本明細書に記載する1つまたは複数の実施形態による、陽性キャラクタシーケンス例および陰性キャラクタシーケンス例に基づく正規表現の生成を示す例示的なユーザインターフェイス画面である。
【
図11】本明細書で説明する1つまたは複数の実施形態による、ユーザインターフェイス内で受信されるユーザデータ選択に基づいて正規表現を生成するための処理を示すフローチャートである。
【
図12】本明細書で説明する1つまたは複数の実施形態による、ユーザインターフェイス内で受信されるユーザデータ選択を介して、正規表現を生成し、キャプチャグループに基づいてデータを抽出する処理を示すフローチャートである。
【
図13】本明細書に記載する1つまたは複数の実施形態によるテーブル形式データディスプレイを示す例示的なユーザインターフェイス画面である。
【
図14】本明細書に記載する1つまたは複数の実施形態による、テーブル形式ディスプレイからのデータの選択に基づく正規表現およびキャプチャグループの生成を示す例示的なユーザインターフェイス画面である。
【
図15】本明細書に記載する1つまたは複数の実施形態による、テーブル形式ディスプレイからのデータの選択に基づく正規表現およびキャプチャグループの生成を示す例示的なユーザインターフェイス画面である。
【
図16A】本明細書に記載する1つまたは複数の実施形態による、テーブル形式ディスプレイからの陽性例および陰性例の選択に基づく正規表現の生成を示す例示的なユーザインターフェイス画面である。
【
図16B】本明細書に記載する1つまたは複数の実施形態による、テーブル形式ディスプレイからの陽性例および陰性例の選択に基づく正規表現の生成を示す例示的なユーザインターフェイス画面である。
【
図17】本明細書に記載する1つまたは複数の実施形態による、テーブル形式ディスプレイからのデータの選択に基づく正規表現およびキャプチャグループの生成を示す別の例示的なユーザインターフェイス画面である。
【
図18】本明細書で説明する1つまたは複数の実施形態による、最長共通サブシーケンス(LCS)アルゴリズムを使用して、任意選択のスパンを含む、正規表現を生成するための処理を示すフローチャートである。
【
図19】本明細書で説明する1つまたは複数の実施形態による、最長共通サブシーケンス(LCS)アルゴリズムを使用して、任意選択のスパンを含む、正規表現を生成するための例示的な図である。
【
図20】本明細書で説明する1つまたは複数の実施形態による、最長共通サブシーケンス(LCS)アルゴリズムのコンビナトリックな実行に基づいて正規表現を生成するための処理を示すフローチャートである。
【
図21】本発明のさまざまな実施形態が実現され得る例示的な分散システムの構成要素を示すブロック図である。
【
図22】本発明の実施形態によって提供されるサービスがクラウドサービスとして提供され得るシステム環境の構成要素を示すブロック図である。
【
図23】本発明の実施形態が実現され得る例示的なコンピュータシステムを示すブロック図である。
【
図24】いくつかの例示的実施形態による、正規表現生成器を示す。
【
図25A】いくつかの例示的実施形態による、分割コマンドを実現するためのユーザインターフェイスを示す。
【
図25B】いくつかの例示的実施形態による、分割コマンドを実現するためのユーザインターフェイスを示す。
【
図26】いくつかの例示的実施形態による、分割コマンドの結果をデータセットに表示するユーザインターフェイスを示す。
【
図27】いくつかの例示的な実施形態による、分割コマンドを実行するための方法のフローチャートを示す。
【
図28】いくつかの例示的実施形態による、削除コマンドを実現するためのユーザインターフェイスを示す。
【
図29】いくつかの例示的実施形態による、データセット上に削除コマンドの結果を表示するユーザインターフェイスを示す。
【
図30】いくつかの例示的な実施形態による、削除コマンドを実行するための方法のフローチャートを示す。
【
図31】いくつかの例示的実施形態による、難読化コマンドを実現するためのユーザインターフェイスを示す。
【
図32】いくつかの例示的実施形態による、データセット上に難読化コマンドの結果を表示するユーザインターフェイスを示す。
【
図33】いくつかの例示的実施形態による、難読化コマンドを実行するための方法のフローチャートを示す。
【
図34】いくつかの例示的実施形態による、置換コマンドを実現するためのユーザインターフェイスを示す。
【
図35】いくつかの例示的実施形態による、置換コマンドを実現するためのユーザインターフェイスを示す。
【
図36】いくつかの例示的実施形態による、置換コマンドの結果をデータセットに表示するユーザインターフェイスを示す。
【
図37】いくつかの例示的な実施形態による、置換コマンドを実行するための方法のフローチャートを示す。
【
図38】いくつかの例示的実施形態による、行フィルタリングコマンドを実現するためのユーザインターフェイスを示す。
【
図39】いくつかの例示的実施形態による、行フィルタリングコマンドを実現するためのユーザインターフェイスを示す。
【
図40】いくつかの例示的実施形態による、データセット上に行フィルタリングコマンドの結果を表示するユーザインターフェイスを示す。
【
図41】いくつかの例示的な実施形態による、行フィルタリングコマンドを実行するための方法のフローチャートを示す。
【
図42】いくつかの例示的実施形態による、単一レベルモードでデータセットのビューを表示するユーザインターフェイスを示す。
【
図43】いくつかの例示的実施形態による、ネスト化された完全制御モードで強調表示されたデータを表示するユーザインターフェイスを示す。
【
図44】いくつかの例示的実施形態による、ネスト化された完全制御モードで強調表示されたデータを表示するユーザインターフェイスを示す。
【
図45】いくつかの例示的な実施形態による、例を提供するためのユーザインターフェイスを示す。
【
図46】いくつかの例示的実施形態による、更新された生成されたレゲックスを表示するユーザインターフェイスを示す。
【
図47】いくつかの例示的実施形態による、代替データ強調表示を表示するユーザインターフェイスを示す。
【
図48】いくつかの例示的実施形態による、更新された生成されたレゲックスを表示するユーザインターフェイスを示す。
【
図49】いくつかの例示的な実施形態による、多重強調表示を実行するための方法のフローチャートである。
【
図50】いくつかの例示的な実施形態による、陰性例を提供するための方法のフローチャートを示す。
【
図51】いくつかの例示的な実施形態による、陰性例からコンテキストを判断するための方法のフローチャートを示す。
【
図52】いくつかの例示的実施形態による、スパン強調表示整列に基づいて正規表現を生成するための図を示す。
【
図53】いくつかの例示的実施形態による、スパン強調表示整列を実行するための方法のフローチャートを示す。
【
図54】いくつかの例示的実施形態による、スパンを追跡する方法のフローチャートを示す。
【
図55】いくつかの例示的実施形態による、句読点スパンおよび記号スパンを表示するユーザインターフェイスを示す。
【発明を実施するための形態】
【0012】
詳細な説明
以下の記載では、説明を目的として、本発明のさまざまな実施形態の完全な理解のために、多数の具体的な詳細が記載される。しかしながら、本発明の実施形態は、これらの具体的な詳細のいくつかを伴わずに実施され得ることが当業者には明白であろう。他の例では、周知の構造およびデバイスがブロック図の形で示される。
【0013】
以下の説明は、例示的な実施形態のみを提供するものであり、本開示の範囲、適用可能性、または構成を限定することを意図したものではない。むしろ、例示的な実施形態の以下の説明は、例示的な実施形態を実施するための実施可能な説明を当業者に提供するであろう。特許請求の範囲に記載されている本発明の精神および範囲から逸脱することなく、要素の機能および構成にさまざまな変更を加えることができることを理解されたい。
【0014】
具体的な詳細が、以下の説明において、実施の形態の十分な理解を与えるよう与えられる。しかしながら、当業者には、実施の形態はこれらの具体的な詳細なしに実施されてもよいことが理解される。たとえば、回路、システム、ネットワーク、プロセスおよび他のコンポーネントは、実施の形態を不必要な詳細で曖昧にしないように、ブロック図形式におけるコンポーネントとして示され得る。他の例では、周知の回路、プロセス、アルゴリズム、構造および技術は、実施の形態を曖昧にすることを回避するために、不必要な詳細なしに示され得る。
【0015】
さらに、個々の実施の形態は、フローチャート、フロー図、データフロー図、構造図またはブロック図として示されるプロセスとして記載され得ることが注記される。フローチャートは動作をシーケンシャルなプロセスとして記載するかもしれないが、動作の多くは並列または同時に実行され得る。加えて、動作の順序は再構成されてもよい。プロセスは、その動作が完了されるときに終結されるが、図に含まれない追加のステップを含み得る。プロセスは、方法、関数、プロシージャ、サブルーチン、サブプログラムなどに対応し得る。プロセスが関数に対応する場合では、その終結は、その関数が呼出関数または主関数に戻ることに対応し得る。
【0016】
「コンピュータ読取可能媒体」という語は、命令および/もしくはデータを記憶するか、含むか、または担持することができるポータブルまたは固定された記憶装置、光記憶装置、ならびにさまざまな他の媒体のような非一時的媒体を含むが、それらに限定はされない。コードセグメントまたはコンピュータ実行可能な命令は、プロシージャ、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、または、命令、データ構造もしくはプログラム文の任意の組合せを表し得る。コードセグメントは、情報、データ、引数、パラメータまたはメモリコンテンツを受け渡すおよび/または受け取ることによって、別のコードセグメントまたはハードウェア回路に結合されてもよい。情報、引数、パラメータ、データなどは、メモリ共有、メッセージ受渡し、トークン受渡し、ネットワーク伝送などを含む任意の好適な手段を介して渡されるか、転送されるか、または伝送されてもよい。
【0017】
さらに、実施の形態は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはそれらの任意の組み合わせによって実現されてもよい。ソフトウェア、ファームウェア、ミドルウェアまたはマイクロコードにおいて実現される場合には、必要なタスクを実行するプログラムコードまたはコードセグメントを機械読取可能媒体に記憶してもよい。プロセッサは必要なタスクを実行してもよい。
【0018】
本明細書では、1つまたは複数の入力データ例内で識別されるパターンに対応する正規表現を生成するためのさまざまな技法(たとえば、方法、システム、1つまたは複数のプロセッサによって実行可能な複数の命令を記憶する非一時的なコンピュータ読取可能記憶メモリなど)について説明する。特定の実施形態では、入力データの選択を受け取ることに応答して、入力データ内の1つまたは複数のパターンが自動的に識別され、識別されたパターンを表すよう、正規表現(または短く「レゲックス」)が自動的かつ効率的に生成され得る。そのようなパターンは、キャラクタのシーケンス(たとえば、文字、数字、空白、句読点、記号等のシーケンス)に基づくことができる。本明細書では、方法、システム、1つもしくは複数のプロセッサによって実行可能なプログラム、コード、または命令を記憶する非一時的コンピュータ読取可能記憶媒体などを含むさまざまな実施形態について説明する。
【0019】
いくつかの実施形態では、正規表現は、キャラクタストリングにマッチするために、および/または入力として与えられるキャラクタストリングから情報を抽出するために、記号的なワイルドカードマッチング言語を使用して構成され得る。
【0020】
【0021】
正規表現生成システムによって受信される入力データは、たとえば、1つもしくは複数の「陽性」データ例および/または1つもしくは複数の「陰性」データ例を含み得る。本明細書で使用される場合、陽性例は、入力として受信され、その入力に基づいて生成される正規表現によってマッチされることになるキャラクタシーケンスを指し得る。一方、陰性例は、その入力に基づいて生成される正規表現によってマッチされることにならない、入力されたキャラクタシーケンスを指し得る。
【0022】
いくつかの技術的利点が、本明細書に記載されるさまざまな実施形態および例内で実現され得る。たとえば、本開示で説明するいくつかの技法は、正規表現生成処理の速度および効率を向上させ得る(たとえば、レゲックス解は、1秒未満で生成され得、ユーザインターフェイスは、対話型リアルタイム使用に適し得る)。本明細書で説明されるさまざまな技法はまた、判断論的であってもよく、トレーニングデータを必要としなくてもよく、いかなる初期正規表現入力も必要とせずに解を生成してもよく、完全に自動化されてもよい(たとえば、任意の人的介入を必要とする範囲内で正規表現を生成する)。さらに、本明細書で説明されるさまざまな技法は、効果的に処理され得るデータ入力のタイプに関して限定される必要はなく、そのような技法は、結果として得られる正規表現の人間による可読性を改善し得る。
【0023】
本明細書で説明するいくつかの実施形態は、最長共通サブシーケンス(LCS)アルゴリズムの1つまたは複数の実行を含む。LCSアルゴリズムは、ある状況においては、2つのテキストファイル間の差分を判断し示すように構成された差分エンジン(たとえば、Unix(登録商標) “diff”utilityの背後にあるエンジン)として使用され得る。いくつかの実施形態では、入力データ(たとえば、ストリングおよび他のキャラクタシーケンス)は、抽象的なトークンに変換され得、次いで、それらは、LCSアルゴリズムへの入力として提供され得る。そのような抽象的なトークンは、たとえば、正規表現キャラクタクラスを表す正規表現コード(たとえば、Loogleコードまたは他のキャラクタクラスコード)に基づくトークンであってもよい。そのようなコードのさまざまな異なる例が考えられ、本明細書では「正規表現コード」または「中間正規表現コード」(IREC)と称され得る。たとえば、入力されたキャラクタシーケンス「May 3」は、IRECコード「LLLZN」に変換されてもよく、その後、トークン化されたストリングは、他のトークン化されたストリングとともにLCSアルゴリズムに供されてもよい。いくつかの実施形態では、入力されたキャラクタシーケンスが共通に有さないIREC(たとえば正規表現コード)が、最終的に生成された正規表現において、任意選択(たとえば任意選択のスパン)として現れてもよい。特定の実施形態では、正規表現コードは、https://www.regular-expressions.info/unicode.html#categoryで示されるユニコードカテゴリコードに基づくカテゴリコードであってもよく、またはhttp://unicode.org/reports/tr18/#General_Category_Propertyの一般的なカテゴリプロパティコードであってもよい。たとえば、コードLは文字を表してもよく、コードNは数字を表してもよく、コードZは空白を表してもよく、コードSは記号を表してもよく、コードPは句読点を表してもよい等である。
【0024】
【0025】
加えて、これらの異なるカテゴリは、互いに素、つまり相互に排他的であってもよい。すなわち、この例では、カテゴリL、N、Z、PおよびSは、カテゴリのメンバ間に重複がないように、互いに素にされてもよい。
【0026】
さらなる技術的利点は、正規表現コード(たとえばカテゴリコード)、スパンなどの使用に基づく正規表現のより効率的な生成を含むさまざまな実施形態において実現され得る。そのようなコードを使用することによって、LCSアルゴリズムが入力ストリング内のキャラクタのすべてまたは実質的にすべてを異なるものとして首尾よく識別する場合には、計算資源を無駄にする必要がない。本明細書においてさまざまな実施形態によって提供されるさらなる技術的利点は、生成された正規表現の改善された可読性、ならびに陽性例および陰性例の両方を入力データとしてサポートすること、およびさまざまな有利なユーザインターフェイス特徴を提供すること(たとえば、ユーザが、抽出のために、より大きなキャラクタシーケンスまたはデータセル内のテキストフラグメントを強調表示することを可能にする)を含む。
【0027】
I.全体の概要
本明細書に開示されるさまざまな実施形態は、正規表現の生成に関連する。いくつかの実施形態では、正規表現生成器として構成されるデータ処理システムは、正規表現コード(たとえばカテゴリコード)の異なるセットによって共有される最長共通サブシーケンス(LCS)を識別することによって正規表現を生成することができる。正規表現コードの各セットは、ユーザインターフェイスを介して入力データとして受け取られるキャラクタのシーケンスから変換され得る。本明細書で説明する技術的利点のうち、入力データを中間コード(たとえば、正規表現コード、スパンなど)として抽象化することにより、非常に少ない入力データを使用して正規表現を効率的に生成することができる。
【0028】
図1は、さまざまな実施形態が実現され得る、正規表現を生成するための例示的な分散システムの構成要素を示すブロック図である。この例に示されるように、クライアントデバイス120は、正規表現生成サーバ110(または正規表現生成器)と通信し、ユーザインターフェイスと対話してテーブル形式データを取り出し表示し、ユーザインターフェイスを介した入力データ(たとえば例)の選択に基づいて正規表現を生成することができる。いくつかの実施形態では、クライアントデバイス120は、クライアントウェブブラウザ121および/またはクライアント側正規表現アプリケーション122(たとえば、サーバ110によって生成された正規表現を受信/消費するクライアント側アプリケーション)を介して正規表現生成器110と通信してもよい。正規表現生成器110内で、クライアントデバイス120からの要求は、ネットワークインターフェイスにおいてさまざまな通信ネットワークを介して受信され、REST API112などのアプリケーションプログラミングインターフェイス(API)によって処理され得る。ユーザインターフェイスデータモデル生成器114コンポーネントは正規表現生成器110とともに、サーバ側プログラミングコンポーネントおよびロジックを提供して、本明細書で説明されるさまざまなユーザインターフェイス特徴を生成し、レンダリングすることができる。そのような特徴は、ユーザがデータリポジトリ130からテーブル形式データを取り出し、表示すること、入力データ例を選択して正規表現の生成を開始し、生成された正規表現に基づいてデータを修正および/または抽出することを可能にする機能を含み得る。この例では、正規表現生成器コンポーネント116は、入力キャラクタシーケンスを正規表現コードおよび/またはスパンに変換すること、入力データに対してアルゴリズム(たとえばLCSアルゴリズム)を実行すること、および正規表現を生成/単純化することを含んで、正規表現を生成するように実現され得る。正規表現生成器116によって生成された正規表現は、RESTサービス112によってクライアントデバイス120に送信されてもよく、そこで、クライアントブラウザ121(または対応するクライアント側アプリケーションコンポーネント122)上のJavascriptコードは、次いで、ブラウザ内でレンダリングされたスプレッドシート列内のすべてのセルに対して正規表現を適用することができる。他の場合では、サーバ側でマッチするデータ/マッチしないデータを識別するために、サーバ側で別個の正規表現エンジンコンポーネントを実現して、生成された正規表現を、ユーザインターフェイス上に表示されるテーブル形式データおよび/またはデータリポジトリ130に格納された他のデータ内で比較してもよい。さまざまな実施形態において、マッチする/マッチしないデータは、ユーザインターフェイス内で自動的に選択(たとえば強調表示)されてもよく、抽出、修正、削除などのために選択されてもよい。正規表現の生成に基づいて、ユーザインターフェイスを介して抽出または修正される任意のデータは、1つまたは複数のデータリポジトリ130に記憶され得る。さらに、いくつかの実施形態では、生成された正規表現(および/またはLCSアルゴリズムへの対応する入力)は、将来の検索および使用のために正規表現ライブラリ135に記憶されてもよい。いくつかの実施形態では、生成された正規表現は、実際に「ライブラリ」に格納される必要はなく、「変換スクリプト」に組み込まれてもよい。たとえば、ET.S.特許番号10,210,246(すべての目的のために、ここに引用により援用する)においてより詳細に記載されるように、そのような変換スクリプトは、受信されたデータを変換するために1つまたは複数の処理ユニットによって実行可能であり得るプログラム、コード、または命令を含み得る。変換スクリプトの他の考えられ得る例は、「改名列」、「大文字列データ」、または「ファーストネームから性別を推測し性別を伴う新たな列を作成する」などを含み得る。
【0029】
図2は、本明細書に記載される1つまたは複数の実施形態に係る、ユーザインターフェイスを介して受信される入力に基づいて正規表現を生成するための処理200を示すフローチャートである。ステップ201において、正規表現生成器110は、正規表現生成器ユーザインターフェイスにアクセスし、ユーザインターフェイスを介して特定のデータを閲覧するための要求をクライアントデバイス120から受信することができる。ステップ201における要求は、REST API112、および/またはウェブサーバ、認証サーバなどを介して受信されてもよく、ユーザの要求はパーズおよび認証されてもよい。たとえば、ビジネスまたは組織内のユーザは、取引データ、顧客データ、実績データ、予測データ、および/または組織のデータリポジトリ130に記憶され得るデータの任意の他のカテゴリを解析および/または修正するために、正規表現生成器110にアクセスすることができる。ステップ202において、正規表現生成器110は、選択された入力データに基づく正規表現の生成をサポートするユーザインターフェイスを介して、要求されたデータを取り出し、表示することができる。そのようなユーザインターフェイスのさまざまな実施形態および例は、以下で詳細に説明される。
【0030】
ステップ203において、ユーザは、正規表現生成器110によって提供されるユーザインターフェイスに表示されたデータから1つまたは複数の入力キャラクタシーケンスを選択し得る。いくつかの実施形態では、データは、特定のデータタイプおよび/またはデータのカテゴリを有するラベル付き列を含んで、ユーザインターフェイス内にテーブル形式で表示されてもよい。そのような場合、ステップ203における入力データの選択は、ユーザがデータセルを選択すること、またはデータセル内の個々のテキストフラグメントを選択する(たとえば強調表示すること)ことに対応し得る。しかしながら、他の実施形態では、正規表現生成器110は、ユーザインターフェイスを介して半構造化および非構造化データの検索ならびに表示をサポートしてもよく、ユーザは、半構造化または非構造化データからキャラクタシーケンスを選択することによって正規表現生成のための入力データを選択してもよい。後述する例で説明されるように、ユーザが表示されたテーブル形式データから入力キャラクタシーケンスを選択することは、単なる使用ケースの一例である。他の例では、ユーザ(たとえば、おそらく、Linux(登録商標)コマンドラインツールgrep、sed、またはawkなどのために正規表現を構築することを試みるソフトウェア開発者またはパワーユーザ)は、スプレッドシートから例を拾うのではなく、例において初めからタイプしてもよい。
【0031】
ステップ204において、正規表現生成器110は、ステップ203においてユーザにより選択された入力データに基づいて、1つまたは複数の正規表現を生成してもよい。ステップ205において、正規表現生成器110は、たとえば、生成された正規表現を表示するように、および/または表示されたデータ内のマッチする/マッチしないデータを強調表示するように、ユーザインターフェイスを更新してもよい。いくつかの実施形態では任意選択であり得るステップ206において、ユーザインターフェイスは、ユーザが生成された正規表現に基づいて基礎となるデータを修正することを可能にする機能をサポートしてもよい。たとえば、ユーザインターフェイスは、ユーザが、テーブル形式データから、特定のデータフィールドを、それらフィールドが正規表現とマッチするか否かに基づいて、フィルタリング、修正、削除、または抽出することを可能にする特徴をサポートしてもよい。データをフィルタリングまたは修正することは、リポジトリ130に格納された基礎となるデータを修正することを含むことができ、場合によっては、抽出したデータを新たな列および/または新たなテーブルとしてリポジトリ130に格納することができる。
【0032】
これらのステップは、正規表現生成器110のユーザインターフェイスとの例示的なユーザ対話の一般的かつハイレベルの概要を示すが、他の実施形態では、さまざまな追加の特徴および機能性をサポートしてもよい。たとえば、いくつかの実施形態では、正規表現コード(またはカテゴリコード)は、コードの最小発生数に関連付けられ得る。追加的または代替的に、正規表現コードは、コードの最大発生数に関連付けられてもよい。一例として、正規表現コードのセットは、LCSの特定の部分がある文字を少なくとも0回、および最大でも1回のいずれかで含むことを示すコードL<0,1>を含むことができる。
【0033】
さらに、いくつかの実施形態では、入力データは、3つ以上のキャラクタシーケンスを含み得る。そのような実施形態では、さまざまな技法を用いて、3つ以上のキャラクタシーケンスに対してLCSアルゴリズムを実行するための順序を判断し、結果として生じる正規表現が充分に機能する態様で生成され得るようにして、3つ以上の入力キャラクタシーケンスによって引き起こされるランタイムの指数関数的な増加を回避することができる。なお、正規表現生成器110は、かわりに、一度に2つのキャラクタシーケンス上でLCSアルゴリズムを実行し、グラフに基づいてキャラクタシーケンスのペアを選択するための順序を判断してもよい。たとえば、全結合グラフは、LCSアルゴリズムの第1の実行(たとえばLCS1)は、シーケンス1およびシーケンス3に対して実行されるべきであることを示し、次いで、LCSアルゴリズムの第2の実行(たとえばLCS2)は、LCS1およびシーケンス2に対して実行されるべきであることなどを示し得る。グラフは、全結合グラフであってもよく、ノードは、キャラクタシーケンスを表し、エッジはノードを接続して、接続されたノードによって共有されるLCSの長さを表す。グラフ内の各ノードは、グラフ内の他のすべてのノードに接続されてもよく、キャラクタシーケンスを選択する順序は、グラフについて最小スパニングツリーの深さ優先トラバースを実行することによって判断されてもよい。
【0034】
さらなる実施形態では、入力データは、いくつかの異なる方法でユーザインターフェイスを介して提供されてもよい。たとえば、入力データは、キャラクタのセットの第2のユーザ選択内の、1つまたは複数のキャラクタの第1のユーザ選択を示してもよい。たとえば、ユーザは、以前に強調表示されたキャラクタのセット内のうちのあるキャラクタを強調表示してもよい。したがって、第2のユーザ選択は、第1のユーザ選択のためのコンテキストを提供し得、これは、入力データが、より高い特異性で正規表現生成器110に提供されることを可能にし得る。いくつかの実施形態では、正規表現生成器110は、各ユーザ選択に応答して、ほぼリアルタイムで正規表現を生成し、表示することができる。たとえば、ユーザがキャラクタの第1の範囲を強調表示する場合、正規表現生成器110は、キャラクタの第1の範囲を表す正規表現を表示してもよい。そして、ユーザが、キャラクタの第1の範囲内の、キャラクタの第2の範囲を強調表示すると、正規表現生成器110は、表示される正規表現を更新してもよい。
【0035】
さらに、いくつかの実施形態では、正規表現生成器110は、陽性および陰性の両方の例を含む入力に基づいて正規表現を生成することができる。上述したように、陽性例は、正規表現に包含されるべきキャラクタのシーケンスを指し得、陰性例は、正規表現に包含されるべきでないキャラクタのシーケンスを指し得る。そのような場合、正規表現生成器110は、特定の位置において、陽性例を陰性例から区別する、1つまたは複数のキャラクタからなる最短サブシーケンスを識別することができる。次いで、最短サブシーケンスは、正規表現生成器110によって生成された正規表現内でハードコード化され得る。さまざまな例では、最短サブシーケンスは、プレフィックス/サフィックス部分、または陰性例内のミッドスパンに含まれ得る。
【0036】
特定の実施形態による、正規表現を自動的に生成するさらなる例を以下に記載する。これらの例は、
図2の一般的技法のさまざまな具体的な考えられ得る実現例に対応し得、それぞれのシステムの1つまたは複数の処理ユニット(たとえば、プロセッサ、コア)によって実行されるソフトウェア(たとえば、コード、命令、プログラムなど)、ハードウェア、またはそれらの組み合わせにおいて実現され得る。ソフトウェアは、非一時的記憶媒体上に(たとえばメモリデバイス上に)記憶され得る。以下で説明するさらなる例は、例示的かつ非限定的であることを意図している。これらの例は、特定の順番または順序で生じるさまざまな処理ステップを示すが、これは限定することを意図するものではない。いくつかの代替実施形態では、ステップは、ある異なる順序で実行されてもよく、またはいくつかのステップは、並行して実行されてもよい。
【0037】
いくつかの例では、ユーザインターフェイス(たとえばステップ203)を介して受信されるユーザ入力は、正規表現出力によってマッチされる1つまたは複数の「陽性例」と、正規表現出力によってマッチされない0またはそれより多い「陰性例」とを含み得る。任意選択で、陽性例のうちの1つまたは複数を強調表示して、キャラクタの特定の範囲(またはサブシーケンス)を選択することができる。場合によっては、ステップ204において、ユーザインターフェイスを介して受信された陽性例は、正規表現コード(たとえば、ユニコードカテゴリコードのようなキャラクタカテゴリコード)のスパンに変換され得る。各陽性例に対して、スパンのシーケンスが生成され得る。いくつかの実施形態では、各頂点が、スパンのシーケンスのうちの1つに対応し、エッジ重みが、エッジのエンドポイントに対応するスパンのそれらの2つのシーケンス上で実行されるLCSアルゴリズムからの出力の長さに等しい、グラフが生成されてもよい。グラフについて、最小スパニングツリーを判断することができる。たとえば、いくつかの実施形態では、Primのアルゴリズムを用いて、最小スパニングツリーを得てもよい。深さ優先トラバースを最小スパニングツリー上で実行してトラバース順序を判断してもよく、その後、LCSアルゴリズムを、トラバースの最初の2つの要素上で実行してもよい。次いで、1つずつ、トラバースの各追加要素が、前のLCS反復の出力および次の現在のトラバース要素に対してLCSアルゴリズムを再び実行することによって、現在のLCS出力に順番にマージされてもよい。次いで、スパンのシーケンスであり得る、LCSアルゴリズムの最終出力が、正規表現に変換されてもよい。この変換は、いくつかの実施形態では、1対1変換であり得るが、本明細書で説明される特定の任意選択的な実施形態は、1対1変換に対応しないかもしれない。最後に、得られた正規表現は、ステップ203でユーザインターフェイスを介して受信されたすべての陽性例および陰性例に対してテストされてもよい。テストのいずれかが失敗した場合、すべての陽性例および失敗した任意の陰性例を使用して、上述の処理を繰り返してもよい。
【0038】
II.正規表現コード上で最長共通サブシーケンスアルゴリズムを用いた正規表現生成
上述したように、本明細書で説明するいくつかの態様は、入力データに対応する正規表現コードの異なるセットによって共有される最長共通サブシーケンス(LCS)の計算に基づく正規表現の生成に関する。
【0039】
図3は、本明細書で説明する1つまたは複数の実施形態による、正規表現コードのセットに対してLCSアルゴリズムを使用して正規表現を生成するための処理300を示すフローチャートである。ステップ301において、正規表現生成器110は、入力データとして1つまたは複数のキャラクタシーケンスを受け取り得る。上述したように、いくつかの例では、入力データは、ユーザインターフェイスに表示されたテーブル形式データ内から選択された陽性例データに対応し得るが、いくつかの実施形態ではユーザインターフェイスは任意選択であり、入力データは、さまざまな例では任意の他の通信チャネル(たとえば非ユーザインターフェイス)を介して受信される任意のキャラクタシーケンスに対応し得ることを理解されたい。
【0040】
ステップ302において、ステップ301において受け取られた各キャラクタシーケンスは、対応する正規表現コードに変換され得る。さまざまな実施形態において、正規表現コードは、Loogleコード、ユニコードカテゴリコード、または正規表現キャラクタクラスを表す任意の他のキャラクタクラスコードであり得る。たとえば、ある入力キャラクタシーケンス「May 3」をLoogleコード「LLLZN」に変換してもよい。いくつかの実施形態では、正規表現コードは、https://www.regular-expressions.info/unicode.html#categoryに示されるユニコードカテゴリコードに基づくカテゴリコードであり得る。たとえば、コードLは文字を表してもよく、コードNは数字を表してもよく、コードZは空白を表してもよく、コードSは記号を表してもよく、コードPは句読点を表してもよい、等である。
【0041】
【0042】
ステップ303では、ステップ302で生成された正規表現コードのセットの中から最長共通サブシーケンスを判断することができる。いくつかの実施形態では、LCSアルゴリズムは、入力として正規表現コードの2つのセットを使用して実行され得る。LCSアルゴリズム(たとえば、処理の方向、位置指定、空白のプッシュ、低濃度スパンの合体(coalescing)、共通トークン上の整列など)の実行のさまざまな異なる特性が、異なる実施形態において使用され得る。ステップ304では、LCSアルゴリズムの出力に基づいて正規表現を生成することができる。場合によっては、ステップ304は、LCSアルゴリズムの出力を正規表現コードで捕捉すること、および正規表現コードを正規表現に変換することを含み得る。ステップ305において、正規表現は、たとえば、ユーザインターフェイスを介してユーザに正規表現を表示することによって、単純化され、出力されてもよい。
【0043】
図4は、2つのキャラクタシーケンス例に基づき、正規表現コードのセットに対して最長共通サブシーケンス(LCS)アルゴリズムを使用して、正規表現を生成するための例示的な図である。したがって、
図4は、
図3において上述した処理を適用する例を示している。
図4に示すように、本例の正規表現は、2つの入力ストリング「iPhone 5」および「iPhone X」に基づいて生成される。この例における各シーケンスは、正規表現コードのそれぞれのセットに変換され得る。したがって、iPhone 5は「LLLLLLZN」に変換されてもよく、iPhone Xは「LLLLLLZL」に変換されてもよい。
図4に示されるように、これらのカテゴリコードは、次いで、LCSアルゴリズムへの入力として提供され、LCSアルゴリズムは、IREC(またはカテゴリコード)の両方のセットは6つのLおよび1つのZを含む、と判断する。LCSから除外されるZカテゴリコードは、任意選択および/または代替として表され得る。
【0044】
【0045】
数字6を含む中括弧は、文字の6つのインスタンスを示し、疑問符は、最後の数字/文字が任意選択であることを示す。最後に、正規表現生成器によって単純化処理を実行することができ、その間に、正規表現は、共通テキストフラグメント「iPhone」を最終正規表現に挿入し戻すことによって単純化され、正規表現のより広い
【0046】
【0047】
部分を置き換える。
この例に示されるように、正規表現生成器110によって受け取られた入力ストリングは、正規表現ブロードカテゴリ(これは、「カテゴリコード」とも呼ばれ得る)を表す「正規表現コード」に変換されてもよく、LCSアルゴリズムは、それらの正規表現コード上で実行されてもよい。いくつかの実施形態では、正規表現コードのために、ユニコードカテゴリコードを使用し得る。たとえば、入力テキストストリングは、レゲックスユニコードブロードカテゴリ
【0048】
【0049】
を表すコードに変換され得る。
図3および
図4によって示されるこのアプローチは、間接的アプローチと称され得る。しかしながら、他の実施形態では、LCSアルゴリズムが入力として受け取られたキャラクタシーケンスに対して直接実行される直接的アプローチが使用されてもよい。
【0050】
いくつかの実施形態では、間接的アプローチは、大量のトレーニングデータを必要としないという点で、追加の技術的利点を提供し得、比較的より少ない数の入力例で有効な正規表現を生成し得る。これは、間接的なアプローチが、正規表現生成における不確実性を低減するために、および潜在的な偽陽性および偽陰性を除去するために、ヒューリスティックを使用するためである。たとえば、入力ストリング「May 3」および「Apr 11」に基づいて正規表現を生成する際に、直接的アプローチは、日付パターンにマッチする有効な正規表現を生成するために月毎に少なくとも1つの例を必要とし得る。それら2つの例のみに依拠して、直接的アプローチは、「[AM][ap][yr] [13]1?」のレゲックスを生成してもよい。対照的に、間接的アプローチは、ユニコードブロードカテゴリに基づいて、
【0051】
【0052】
の、より効果的な正規表現を生成してもよい。加えて、上述のように、本明細書で説明される技術的利点の1つは、場合によっては単一の例からさえ、非常にわずかな入力データを使用して正規表現を効率的に生成することを含む。たとえば、単一の例「am」からの正規表現の生成に関して、あるヒューリスティックは、正規表現のために「am」を生成するか
【0053】
【0054】
を生成するかを判断することができる。どちらも、おそらくは正しいが、プログラムされたヒューリスティックは、最適な正規表現を生成する方法(たとえば、それが「pm」にもマッチすべきか否か)を判断するために、ユーザ選好および/または基準を実現し得る。
【0055】
加えて、間接的アプローチは、さらに、生成された正規表現
【0056】
【0057】
を単純化して、それをより人間によって可読なものにすることができる。これは、いくつかの実施形態において、たとえば、正規表現のためのユニコード表現に精通していない可能性がある高度な知識のない正規表現ユーザに出力する場合に有益であり得る。
【0058】
さらに、いくつかの実施形態では、LCSアルゴリズムを実行する際に各キャラクタを独立して扱う代わりに、シーケンシャルかつ等しい正規表現コードが、スパンデータ構造(スパンとも称され得る)に変換され得る。場合によっては、スパンは、単一の正規表現コード(たとえばユニコードブロードカテゴリコード)の表現を、繰り返しカウント範囲(たとえば最小数および/または最大数)とともに含み得る。正規表現コードからスパンへの変換は、交代(オルタネーション)(たとえば分離)を認識するなど、以下に説明されるいくつかのさまざまな追加の特徴を容易にすることができ、また、生成された正規表現をさらに単純化するために、隣接する任意選択のスパンのマージを容易にすることもできる。
【0059】
上述したように、LCSアルゴリズムは、
図4のストリング「iPhone」のような、最終的な正規表現に潜在的に挿入して戻すことができる、入力キャラクタシーケンス内の基礎となるテキストフラグメントを記憶し、保持するように構成することができる。そのスパンに割り当てられたカテゴリコードを元々もたらしたテキストフラグメントを追跡することによって、そのような実施形態は、リテラルテキスト(たとえばamおよびpm)が、生成された正規表現に直接含まれることを可能にし、偽陽性を低減し、正規表現出力をより人間により可読なものにすることができる。
【0060】
いくつかの実施形態では、あるヒューリスティックを用いて、広くマッチする正規表現コードとは対照的に、生成された正規表現にいつストリングリテラルを出力するべきかを判断することができる。上述したように、場合によっては、正規表現がストリングフラグメントに対して正確なマッチを必要とすることが望ましい場合がある。したがって、いくつかの実施形態では、あるヒューリスティックを用いて、正確なストリングフラグメントが正規表現に出力されるかどうかを判断してもよい。例えば、あるヒューリスティックは、特定のスパンについて、今までにたった1つの特定のストリングフラグメント(例えば、"pm")に遭遇した場合、そしてそのスパンについて2つ以上の例が存在する場合、その正確なストリングフラグメントが正規表現に出力される、と判断してもよい。句読点スパンの場合、ヒューリスティックは、(例えば、句読点は変化する可能性がより低いという仮定に基づいて)そのスパンについて閾値を1回だけの発生に低下させてもよい。例えば、
【0061】
【0062】
の両方について、正規表現内にリテラルストリングを出力するために、閾値は、1回だけの発生まで下げられてもよい。ヒューリスティックは、正確なストリングフラグメントを正規表現に出力するのに必要な例の閾値数に基づいて、ある程度制限的になるように修正および/または調整されてもよい。ヒューリスティックが(リテラルストリングフラグメントをあまりに容易に正規表現に出力することによって)過剰に制限的であることにおいて誤る場合には、ユーザは、追加の陽性例を導入することによって補ってもよいことに留意されたい。同様に、ヒューリスティックエラーが(あまりにしばしば広範な正規表現コードを出力することによって)過剰に許容的であることにおいて誤る場合には、ユーザは、追加の陰性例を導入することによって補ってもよい。ヒューリスティックは、以前のユーザインタラクションおよび実験に基づいて、適切な量の制限を伴って最初にプログラムされ(およびその後調整され)ることができる。
【0063】
図4を参照して上述したように、単純化処理は、正規表現生成器110によって実行されてもよく、その間、正規表現は、様々な技法を用いて単純化されてもよい。場合によっては、単純化は、(例えば、中括弧を用いて)長形正規表現繰り返しコードを正規表現短手コード(例えば、*, +,および?)に置換することを含み得る。例えば、スパンが、例えば、0と3(最小と最大)との間の繰り返しを表すストリングフラグメント例から来る場合、正規表現生成器110は、偽陰性を防止し、判読性を改善するために、正規表現に{0,3}の代わりに*を出力することによって、表現を単純化することができる。さらに、{a,b}構文を頻繁に用いる代わりに、正規表現生成器110は、代わりに、a>2またはb>4の場合に、+構文を用いてもよい。これは、生成された正規表現をより判読性にし、偽陰性を回避する可能性を高める。
【0064】
場合によっては、予め定義されたキャラクタ範囲のバンクが用いられてもよい。例えば、文字に対する正規表現Unicodeキャラクタカテゴリは
【0065】
【0066】
であり、それは、[A-Z]などの、より古いキャラクタ範囲と比較して、周知でないかまたは容易に判読可能でないかもしれない。したがって、英語入力の場合、正規表現生成器110は、[A-Z], [a-z], および [A-Za-z]を
【0067】
【0068】
に置換することを、所与の例がそれら置換物の1つと上手くマッチし得る場合には、行ってもよい。
【0069】
さらに、正規表現生成器110は、いくつかの実施形態では、正規表現における空白に関して最大許容度までデフォルトするよう構成され得る。本明細書で説明されるように、正規表現生成器110は、例えば、場合によっては、広範なマッチするコードよりもリテラルストリングフラグメントを好み、中括弧内の繰り返し出力に最小および最大境界を適用することによって、より特定の正規表現を生成するよう構成され得る。しかしながら、空白に関しては、正規表現生成器110は、いくつかの実施形態では、最大許容度までデフォルトするよう構成されてもよい。すなわち、任意の空白(例えば、単語間に現れる1つの空白であっても)について、正規表現生成器110は、それを正規表現カテゴリコード
【0070】
【0071】
として維持するよう構成されてもよく、繰り返しを、1つまたは複数を意味する+であるよう指定してもよい。したがって、そのような実施形態は、余分の空白、または正確にマッチされることができる(例えば、完全に構造化されていないテキストにおけるような)タブおよび復帰さえも、予想し、マッチし得る。
【0072】
場合によっては、生成された正規表現内の繰り返しは、文字通り繰り返す正規表現コードに展開され得る。
【0073】
【0074】
例えば、正規表現生成器110は、Unicodeカテゴリコードの長さが2つのキャラクタ(例えば
【0075】
【0076】
)であり、繰り返し数が4以下の場合、またはUnicodeカテゴリコードの長さが3つのキャラクタ(例えば
【0077】
【0078】
)であり、繰り返し数が3以下の場合、またはUnicodeカテゴリコードの長さが3つのキャラクタより長く、繰り返し数が2以下である場合、繰り返しを展開してもよい。さらに、いくつかの実施形態では、リテラルキャラクタを出力する必要がある場合(例えば、正規表現「特殊文字」)、正規表現生成器110は、それを逃れるよう構成されてもよい。
【0079】
様々な追加の実施形態では、正規表現生成器110は、様々なタイプの対になった括弧(たとえば、{および})を検出し、否定されたキャラクタクラス(たとえば、[^}]*)を有する正規表現を生成するよう構成され得る。例えば、ユーザによって強調表示された(または別様に選択された)テキスト内、またはシステムへの陽性/陰性例他の入力内では、開いた括弧または閉じた括弧が検出され、対応する括弧とマッチされるかまたはペアリングされてもよい。いくつかの例では、
【0080】
【0081】
のうちのいくつかまたはすべてを含む複数の異なるタイプの括弧が入力テキスト内で検出されてもよい。したがって、一例として、HTMLタグの場合、<[a-z]+(?: [a-z]+=[a-z]+>のようなもの代わりに<[^>]*>を生成してもよい。様々な種類の括弧を検出およびペアリングするとき、正規表現生成器110は、括弧内にネスト化された括弧を適切に検出およびペアリングするよう構成されてもよいし、入力の強調表示された(またはそうでなければ、ユーザ選択された)部分と重なる括弧を無視するよう構成されてもよい。また、場合によっては、正規表現生成器110は、コンテンツが一意である場合に括弧間に新たな否定されたキャラクタクラスを用いないかもしれない。すなわち、コンテンツが常にすべて同じである場合(例えば、HTMLの例を続けると、識別されるすべてのタグが<h1>である場合)、リテラルは、否定された大括弧キャラクタクラスの代わりに、生成された正規表現に出力されてもよい(例えば、<[^>]*>の代わりに<h1>だけの出力)。
【0082】
例示的な実施形態では、強調表示がちょうど括弧によって包含されるとき、括弧内に隠すこと(collapsing)ことが許容されてもよい。これにより、挿入句的注釈の抽出が可能になる。例えば、(Windows NT)からWindows NTを抽出するためには、生成されたレゲックスは、
【0083】
【0084】
それは、より一般的であり、もたらされる偽陰性がより少ないであろう。
III.正規表現コードの組み合わせ上で最長共通サブシーケンスアルゴリズムを用いた正規表現生成
本明細書で説明するさらなる態様は、3つ以上のストリング(たとえば3つ以上の別個のキャラクタシーケンス)を含む入力データに基づく正規表現の生成に関する。3つ以上のストリングが入力データとして識別される場合、正規表現生成器110は、LCSアルゴリズム実行のシーケンスに対して最適な順序が判断される性能最適化特徴を使用し得る。以下で説明するように、3つ以上のストリングに関する性能最適化機能は、各ストリングに対応する頂点と、各ストリングと他のすべてのストリングとの間のLCS出力のサイズに基づき得るエッジ長さ/重みとでグラフを構築することを含み得る。次いで、それらのエッジ重みを使用して最小スパニングツリーが導出され得、入力ストリングの順序を判断するために、深さ優先トラバースが実行され得る。最後に、判断された入力ストリングの順序を使用して、一連のLCSアルゴリズムが行われてもよい。
【0085】
図5は、正規表現コードの、より大きなセット(たとえば3つ以上のキャラクタシーケンス)に対して、最長共通サブシーケンス(LCS)アルゴリズムを使用して、正規表現を生成するための処理500を示すフローチャートである。したがって、この例におけるステップ502~505は、
図3で上述したステップ303に対応し得る。しかしながら、この例は、3つ以上の入力キャラクタシーケンスに基づいて正規表現を生成することに関するため、LCSアルゴリズムは複数回実行されてもよい。たとえば、3つ以上の入力ストリングのランタイムの指数関数的な増加を避けるために、LCSアルゴリズムは複数回実行されてもよく、各実行は2つの入力ストリングだけに対して実行される。たとえば、正規表現生成器110は、2つのストリング(たとえば2つの入力キャラクタシーケンスまたは2つの変換された正規表現コード)に対してLCSアルゴリズムの最初の実行を実行してもよく、次いで、第1のLCSアルゴリズムの出力および第3のストリングに対してLCSアルゴリズムの第2の実行を実行してもよく、次いで、第2のLCSアルゴリズムの出力および第4のストリングに対してLCSアルゴリズムの第3の実行を実行してもよい等となる。
【0086】
そのような実施形態の性能を改善および/または最適化するために、LCSアルゴリズムのシーケンスを実行する入力ストリング(たとえば入力キャラクタシーケンスまたは正規表現コード)の最適な順序を判断することが望ましい場合がある。たとえば、入力ストリングを取り込むための良好な順序は、任意選択のスパンの数を最小にすることなどによって、生成された正規表現の可読性に影響を及ぼし得る。生成されたレゲックスを簡潔に保つために、現在のレゲックスにLCSされる追加のストリングは、現在のレゲックス(既に見られたストリングをLCSしたことからの中間結果)に既にいくらか類似していることが好ましい。
【0087】
これにより、ステップ501では、複数(たとえば3つ以上)の入力キャラクタシーケンスが正規表現コードに変換される。ステップ502では、LCSアルゴリズムを使用して正規表現コードを処理する順序を判断する。ステップ502における順序の判断については、
図7を参照して後述する。ステップ503において、判断された順序における最初の2つの正規表現コードが(ステップ503の最初の反復のために)選択されるか、または判断された順序における次の正規表現コードが(ステップ503の後続の反復のために)選択される。ステップ504において、LCSアルゴリズムは、正規表現コードのフォーマットに対応する2つの入力ストリングに対して実行される。ステップ504の第1の反復では、LCSアルゴリズムは、判断された順序における最初の2つの正規表現コードに対して実行され、ステップ504の後続の反復では、LCSアルゴリズムは、判断された順序における次の正規表現コードおよび前のLCSアルゴリズムの出力(同じ正規表現コードのフォーマットであってもよい)に対して実行される。ステップ505において、正規表現生成器110は、LCSアルゴリズムへの入力としてまだ提供されていない、判断された順序における追加の正規表現コードがあるか否かを判断する。判断された順序におけるそのような追加の正規表現コードがある場合、処理は、LCSアルゴリズムの別の実行のためにステップ503に戻る。そうでない場合には、ステップ506において、LCSアルゴリズムの最後の実行の出力に基づいて、正規表現が生成される。
【0088】
図6は、5つの入力キャラクタシーケンス例に基づいて正規表現を生成するための例示的な図である。この例では、各入力されたキャラクタシーケンスを正規表現コードに変換し、次いで、判断された正規表現コードの順序に基づいてLCSアルゴリズムを繰り返し実行する。したがって、
図6は、
図5において上述した処理を適用する一例を示す。この例では、5つの正規表現コードについて判断された順序は、コード#1~コード#5であり、各コードは、判断された順序でLCSアルゴリズムに入力されて、正規表現出力が生成される。最終の正規表現出力(Reg Ex#4)は、入力キャラクタシーケンスの5つすべてに基づいて生成された最終正規表現に対応する。
【0089】
図7は、正規表現コードの、より大きいセット(たとえば3つ以上)上における最長共通サブシーケンス(LCS)アルゴリズムについての実行順序を判断するための処理を示すフローチャートである。したがって、この例に示されるように、ステップ701~704は、上述のステップ502における順序判断に対応し得る。ステップ701において、LCSアルゴリズムは、入力データに対応する正規表現コードの各他とは異なるペア上で実行されてもよく、得られた出力LCSは、実行ごとに記憶されてもよい。したがって、k個の入力データについて、これは、LCSアルゴリズムを通して実行されるストリングのすべての(k(k-1))/2個の可能なペア形成、またはいくつかの実施形態ではk(k-1)を表し得る。たとえば、k=3の入力キャラクタシーケンスが受け取られた場合、LCSアルゴリズムは、ステップ701において3回実行されてもよく;k=4の入力キャラクタシーケンスが受け取られた場合、LCSアルゴリズムは、ステップ701において6回実行されてもよく;k=5の入力キャラクタシーケンスが受け取られた場合、LCSアルゴリズムは、ステップ701において10回実行されてもよい等となる。ステップ702において、全結合グラフは、(k(k-1))/2個のエッジのエッジ重みが2つのノード間の未処理LCS出力の長さでストリングを表すk個のノードから構築され得る。ステップ703では、ステップ702における全結合グラフから最小スパニングツリーを導出し得る。ステップ704では、深さ優先トラバースが最小スパニングツリー上で実行され得る。このトラバースの出力は、正規表現コードがLCSアルゴリズム実行のシーケンスに入力される順序に対応し得る。
【0090】
図8Aおよび
図8Bを簡単に参照すると、
図5に、受け取られたk=5の入力キャラクタシーケンスに基づいて生成された全結合グラフの例が示され、
図8Bに、全結合グラフに対する最小スパニングツリー表現が示されている。
【0091】
いくつかの実施形態では、
図5~
図8Bに記載されるアプローチは、性能に関して追加の技術的利点を提供し得る。たとえば、LCSアルゴリズムの、特定の従来の実現例は、O(n
2)のランタイム性能を示すことができ、ここで、nはストリングの長さである。そのような実現例を2だけの代わりにk個のストリングに拡張すると、指数関数的なランタイム性能O(n
k)をもたらし得、なぜならば、LCSアルゴリズムはk次元空間を探索するよう求められ得るからである。LCSアルゴリズムのそのような従来の実現例は、リアルタイムのオンラインユーザ体験に対しては、充分に機能しないか、または十分に適していないかもしれない。
【0092】
上述したように、LCSアルゴリズムは、(k(k-1))/2回実行されてもよく、その場合、時として重複は以前に見られたのと全く同じであり、なぜならば、LCSアルゴリズムは、ユーザからの生の入力例がレゲックスカテゴリコードに変換された場合であり得るためである。したがって、いくつかの場合においては、記憶化が実現され得、キャッシュを使用して、以前に見られたLCS問題を以前に機能したLCS解にマッピングすることができる。
【0093】
ある例示的な実施形態も、キャッシュテーブルが大きすぎる場合にキャッシュサイズを制御する有効な方法を提供する。キャッシュの一部を削除してもよい。例えば、切り捨てることができるハッシュマップテーブルを用いることができる。ハッシュマップテーブルは、任意に切り捨てることができる。
【0094】
IV.陽性および陰性パターンマッチング例に基づく正規表現の生成
本明細書で説明するさらなる態様は、陽性および陰性の両方の例に対応する入力データに基づいて正規表現を生成することに関する。上述したように、陽性例は、正規表現生成器によって生成される正規表現にマッチするべき例のストリングとして指定される入力データキャラクタシーケンスを指し得る。一方、陰性例は、正規表現生成器によって生成される正規表現とマッチするべきでない例のストリングとして指定される入力データキャラクタシーケンスを指し得る。以下で説明するように、いくつかの実施形態では、正規表現生成器110は、位置、およびその位置で陽性例を陰性例から区別するキャラクタの最短サブシーケンスを識別するように構成され得る。次いで、最短サブシーケンスは、生成された正規表現にハードコード化され得、陽性例は正規表現とマッチすることになり、陰性例は正規表現によって除外される(たとえばマッチしない)ことになる。
【0095】
図9は、陽性のキャラクタシーケンス例および陰性のキャラクタシーケンス例に基づいて正規表現を生成するための処理900を示すフローチャートである。ステップ901において、正規表現生成器110は、陽性例に対応する1つまたは複数の入力データキャラクタシーケンスを受け取ることができる。ステップ902において、正規表現生成器110は、受け取った陽性例に基づいて正規表現を生成し得る。したがって、ステップ901~902は、入力データキャラクタシーケンスに基づいて正規表現を生成するために、上で論じた
図3または
図5において実行されるステップの一部またはすべてを含み得る。
【0096】
ステップ903において、正規表現生成器110は、陰性例に対応する1つの追加入力データキャラクタシーケンスを受け取ることができる。したがって、ステップ902で生成された正規表現とマッチしないように、陰性例を具体的に指定する。いくつかの実施形態では、ステップ903において受け取られた陰性例は、ステップ902において生成された正規表現に対して最初にテストされてもよく、陰性例が正規表現とマッチしないと判断された場合、さらなるアクションはとられない。しかしながら、この例では、ステップ903において受け取られた陰性例のうちの少なくとも1つはステップ902において生成された正規表現とマッチする、と仮定されてもよい。したがって、ステップ904では、ステップ902で生成された正規表現内で曖昧性除去位置を判断してもよい。いくつかの実施形態では、曖昧性除去位置は、(たとえば正規表現の始まりにおける)プレフィックス位置または(たとえば正規表現の終わりにおける)サフィックス位置のいずれかとして選択され得る。たとえば、正規表現生成器110は、陽性例を陰性例から区別するためにプレフィックスで必要とされるであろう第1の数のキャラクタと、陽性例を陰性例から区別するためにサフィックスで必要とされるであろう第2の数のキャラクタとを判断してもよい。次いで、正規表現生成器110は、必要とされる置換キャラクタの最短数に基づいてサフィックスまたはプレフィックスを選択し得る。場合によっては、曖昧性除去位置としてプレフィックスを使用することが、可読性のために好まれる(たとえば重み付けされる)ことがある。さらに他の例では、曖昧性除去位置は、正規表現のプレフィックスまたはサフィックスに対応しないミッドスパン位置であり得る。
【0097】
ステップ905において、正規表現生成器110は、判断された位置で正規表現に挿入されると、陽性例を陰性例から区別することができるカスタムキャラクタクラスの置換シーケンス(またはより具体的には、カスタム「大括弧」正規表現キャラクタクラスのシーケンス)を判断することができる。いくつかの実施形態では、ステップ905において、正規表現生成器110は、陽性例および陰性例の各々から、曖昧性除去位置(または置換位置)に対応するテキストフラグメントを取り出し、次いで、それらテキストフラグメントを使用して、陽性例を陰性例から区別する置換シーケンスとして使用される弁別子を判断することができる。さらに、ステップ905で判断される弁別子置換シーケンスは、カスタムキャラクタクラスの、複数の異なる置換シーケンスを含むことができ、それらは、正規表現内の同じ位置または異なる位置のいずれかで置換されることができる。
【0098】
上述したように、場合によっては、ステップ905における置換シーケンスの判断は、ステップ904における曖昧性除去位置(または置換位置)の判断との関連で実行されてもよい。たとえば、正規表現生成器110は、第1の可能な置換位置において陽性例を陰性例から区別し得る1つまたは複数の置換シーケンスを判断し得る。正規表現生成器110はまた、第2の異なる可能な置換位置において陽性例を陰性例から区別し得る1つまたは複数の他の置換シーケンスも判断し得る。この例において、異なる可能な置換位置および対応する置換シーケンスの間で選択するとき、正規表現生成器110は、ヒューリスティック式を適用して、置換位置のキャラクタのサイズ、ならびに対応する置換シーケンスの数および/またはサイズ、のうちの1つまたは複数に基づいて選択を実行することができる。最後に、ステップ906において、正規表現は、1つまたは複数の判断された置換シーケンスを判断された位置に挿入して正規表現の以前の部分を置換することによって、修正され得る。場合によっては、ステップ906における正規表現の修正に続いて、陽性例および/または陰性例を、修正された正規表現に対してテストして、陽性例が正規表現とマッチし、陰性例が正規表現とマッチしないことを確認してもよい。
【0099】
図10Aおよび
図10Bは、陽性および陰性のキャラクタシーケンスの例に基づく正規表現の生成を示す例示的なユーザインターフェイス画面である。したがって、
図10Aおよび
図10Bに示される例は、上述の
図9の処理の実行中に表示されるユーザインターフェイスに対応し得る。
図10Aにおいて、ユーザは、データ入力キャラクタシーケンスの3つの陽性例1001を提供し、正規表現生成器110は、陽性例の各々にマッチする正規表現1002を生成する。次に、
図10Bにおいて、ユーザは、1つの陰性例1004を提供し、正規表現生成器110は、陽性例の現在のセット1003および陰性例の現在のセット1004の両方に基づく修正された正規表現1005を生成する。
【0100】
上で注記したように、いくつかの実施形態では、陽性例および陰性例の両方が受け取られると、正規表現生成器110は、弁別子、つまり陽性例を陰性例から区別する1つまたは複数のキャラクタの最短サブシーケンスを識別してもよい。選択された弁別子は、最短シーケンス(たとえばカテゴリコードで表現される)であってもよく、陽性または陰性のいずれかであってもよく、陽性例はマッチし、陰性例はマッチしないことになる。場合によっては、弁別子は、次いでステップ905で正規表現にハードコード化され得る置換サブシーケンスに対応してもよい。一例として、「[AL][a-z]+」において、[AL]は、それが街路サフィックスに適用されると仮定すると、「Alley(小路)」、「Avenue(大通り)」、および「Lane(横町)」とはマッチする(またはそれらを認める)であろうが、他のすべてのものとはマッチしない(または許容しない)であろう陽性の弁別子である。別の例として、「[BC][o][a-z]+」において、[BC][o]は、「Boulevard(並木道)」および「Court(袋小路)」とマッチするであろう2つのキャラクタクラスのシーケンスからなる陽性の弁別子である。さらに別の例として、「[^A][a-z]+」において、[LA]は、「Alley」および「Avenue」を許容しないであろう陰性の弁別子であってもよい。場合によっては、アルゴリズムは、正しく弁別するために陰性後読みを生成してもよい。たとえば、(?<!Av)[A-Za-z]+は、「Avenue」は除外するが、「Alley」は認めるであろう。
【0101】
別の例として、ユーザが陽性例「202-456-7800」および「313-678-8900」ならびに陰性例「404-765-9876」および「515-987-6570」を供給する場合、ある実施形態では、正規表現生成器110は、正規表現
【0102】
【0103】
を生成してもよい。すなわち、置換キャラクタサブシーケンスは、正規表現のサフィックスについて、(たとえば、目的が、ビジネス電話番号とマッチする正規表現であると仮定して、)00で終わる電話番号は陽性例を陰性例から区別するという判断に基づいて、識別され得る。これは、サフィックスによる陰性例の例(より具体的に言えば、陽性のサフィックスを使用することによって陰性例に対処する例)であるが、さまざまな他の実施形態は、プレフィックス、サフィックス、またはミッドスパン位置のいずれかでの置換をサポートしてもよい。ミッドスパン位置での置換の例では、スパン内にオフセットされるキャラクタが追跡され、ミッドスパンポイントで分割され得る。
【0104】
プレフィックスまたはサフィックスを使用するかどうかを判断するために、いくつかの実施形態では、kaおよびプレフィックス/サフィックスのすべての組み合わせにわたって最小スコアが選択されるヒューリスティックが使用される:
【0105】
【0106】
ka=アフィックス(プレフィックスまたはサフィックス)の曖昧性を除去すると考えられるキャラクタの数
|Fp|=アフィックスの曖昧性を除去するために必要とされる陽性例からの一意のテキストフラグメントの数
|Fn|=アフィックスの曖昧性を除去するために必要とされる陰性例からの一意のテキストフラグメントの数
|Ep|=ユーザによって提供される(完全な)陽性例の数
|En|=ユーザによって提供される(完全な)陰性例の数
上記の例では、ヒューリスティックは、より長い曖昧性除去テキストフラグメント(したがって、たとえば、kaによる乗算)よりもより短い曖昧性除去テキストフラグメントを好むように設計される。ヒューリスティックはまた、可読性を改善するよう、サフィックス(したがって、たとえば、サフィックスに対する0.1のペナルティ)よりもプレフィックスを好むように設計される。最後に、ヒューリスティックは、より長いプレフィックスまたはサフィックスの曖昧性除去(たとえば置換)を、より多数のストリングフラグメント(したがって、たとえば、置換されるべきストリングフラグメントの数を二乗)を使用することによる曖昧性除去よりも好むように設計される。
【0107】
上述したように、いくつかの実施形態はまた、陰性のミッドスパン例、ならびに陰性の後読み例および陰性の先読み例をサポートしてもよい。
【0108】
いったんプレフィックス/サフィックスおよびk(曖昧性除去すべきキャラクタの数)が判断されると、正規表現生成器110は、さらに、その曖昧性除去を、生成された正規表現においてどのように表現するかを判断することができる。生成された正規表現は、陽性例のように見えるアフィックス(たとえばプレフィックスまたはサフィックス)について許容的(permissive)であってもよく、または陰性例のように見えるアフィックスを除外してもよい。
【0109】
【0110】
usePermissiveがゼロよりも大きい場合、陽性例のように見えるものは、(各キャラクタ位置)について1つずつ、陽性例から取られたキャラクタを許容する正規表現を生成することによって通される。他の場合では、正規表現生成器110は(各キャラクタ位置について)1つずつ、陰性例から取られたキャラクタを許容しない正規表現を生成することにより、陰性例のように見えるものを許容しないアプローチをとってもよい。
【0111】
別の例として、陽性例8amおよび陰性例9pmについて生成された正規表現は、
【0112】
【0113】
であるかもしれない。これは、カレット構文を使用する。場合によっては、正規表現生成器110は、より短い正規表現を好むように構成されてもよく、それは、ユーザとってより可読であり得るだけでなく、より正しい可能性があり得る。その原理は、今後、頻繁に出現するキャラクタは、今後再び出現する可能性がよりありそうであり、したがって、頻繁に出現するキャラクタに強調がおかれるべきである、というものである。一意のキャラクタ|Fp|がより少ない場合(出現するものはより頻繁に出現するため、一意性はより少ない)、これは、分母内にそれを有することによって、ヒューリスティックにおいて報酬を与えられる。
【0114】
再び上記のusePermissive例のヒューリスティックを参照すると、1つの一意の陽性アフィックスを判断することは、ユーザから1つの陽性例しかない場合、大きな特色ではない。したがって、このヒューリスティックでは低い|Ep|は、分子内にそれを有することによってペナルティを科せられる(すなわち、高い|Ep|は、このヒューリスティックにおいて報酬を与えられる)。
【0115】
さらに、いくつかの実施形態では、陰性例は、後読みおよび/または先読みに基づいてもよい。たとえば、ユーザは、「323-1234」の陽性例および「202-754-9876」の陰性例を提供し、その場合、それはエリアコードを有する電話番号を除外するためにレゲックス後読み構文(?<!)の使用を伴う。
【0116】
場合によっては、陰性例は、任意選択のスパンに基づいてもよい。たとえば、ユーザは、「ab」および「a2b」の陽性例および「a3b」の陰性例を提供してもよい。この場合、ある例示的な実現例は失敗し得、なぜならば、それは、必要とされるスパンのみに基づいて弁別しようとし得、「2」の桁は任意選択のスパンにあるからである。この例において、失敗とは、生成された正規表現が、陽性例のすべてに(正しく)マッチし、また、陰性例の1つまたは複数に(誤って)マッチする状況を指し得る。そのような場合、ユーザは、失敗に対して警告されることができ、生成された正規表現を手動で修復するために、および/または陰性例の一部を除去するために、ユーザインターフェイスを介して選択肢を提供されることができる。
【0117】
V.正規表現生成のためのユーザインターフェイス
本明細書で説明する追加の態様は、正規表現の生成に関連するグラフィカルユーザインターフェイス内にいくつかの異なる特徴および機能を含む。以下で説明するように、これらの特徴のうちのあるものは、ユーザ選択のためのさまざまな選択肢、および陽性例および陰性例の強調表示、陽性例および陰性例のカラーコード化、ならびにデータセル内の複数の重複/ネストされた強調表示を含み得る。
【0118】
図11は、ユーザインターフェイス内で受信されたユーザデータ選択に基づいて正規表現を生成するための処理1100を示すフローチャートである。
図11の例示的な処理は、入力データキャラクタシーケンスに基づいて正規表現を生成する前述の例のいずれかに対応し得る。しかしながら、
図11は、クライアントデバイス120上で生成および表示され得るユーザインターフェイスに関する処理を説明する。ステップ1101において、ユーザインターフェイスを介したユーザからの要求に応答して、正規表現生成器110は、(たとえばデータリポジトリ130から)データを取り出し、そのデータをグラフィカルユーザインターフェイス内においてテーブル形式でレンダリング/表示してもよい。なお、この例ではテーブル形式データを用いているが、他の例ではテーブル形式データを使用および表示しなくてもよいことを理解されたい。たとえば、場合によっては、ユーザは、(ユーザインターフェイスからデータを選択するのではなく)生データを直接タイプすることができる。さらに、データがユーザインターフェイスを介して提示されるとき、データはテーブル形式である必要はなく、構造化されていないデータ(たとえばドキュメント)または半構造化(たとえば、ツイートまたはポストのような非フォーマット化/非構造化データアイテムのスプレッドシート)であってもよい。さまざまな例では、テーブル形式データは、取引データ、顧客データ、実績データ、予測データ、および/またはビジネスもしくは他の組織のためにデータリポジトリ130に記憶され得るデータの任意の他のカテゴリに対応し得る。ステップ1102において、入力データのユーザ選択がユーザインターフェイスを介して受信され得る。選択された入力データは、たとえば、ユーザによって選択されたあるデータセル全体、またはあるデータセル内のキャラクタのサブシーケンスに対応し得る。ステップ1103において、正規表現生成器110は、ステップ1102において受信された入力データ(たとえばデータセルまたはその一部分)に基づいて正規表現を生成し得る。ステップ1104において、ユーザインターフェイスは、正規表現の生成に応答して更新され得る。場合によっては、ユーザーインターフェイスは、単に、生成された正規表現をユーザーに表示するために更新されてもよく、一方、他の場合では、ユーザーインターフェイスは、以下で説明するさまざまな他の方法で更新されてもよい。この例に示されるように、ユーザは、ユーザインターフェイスを介して複数の異なる入力データキャラクタシーケンスを選択してもよく、受信された各新たな入力データに応答して、正規表現生成器110は、キャラクタシーケンスの第1および第2の(陽性の)例の両方を包含する更新された正規表現を生成してもよい。次いで、ユーザがキャラクタの第3のシーケンスを(たとえば、両方のキャラクタシーケンス外、または第1もしくは第2のキャラクタシーケンス内で)を強調表示すると、正規表現生成器110は、正規表現を再び更新してもよい等となる。いくつかの実施形態では、正規表現生成器110は、アルゴリズムをリアルタイム(またはほぼリアルタイム)で実行し得、全面的に新たな正規表現が、ユーザによってなされた各新たなキーストロークまたは各新たな強調表示されたセクションに応答して生成され得る。さらに、ユーザが、前の強調表示上を部分的に強調表示(または他の態様で選択)する場合、古い強調表示は削除されてもよく、新たな強調表示が追加されてもよい。
【0119】
したがって、
図11に示すように、ユーザインターフェイスを介するキャラクタシーケンスのユーザ選択に応答して、正規表現生成器110は、正規表現を生成および表示し得る。たとえば、ユーザがキャラクタの第1のシーケンスを強調表示すると、正規表現生成器は、キャラクタの第1のシーケンスを表す正規表現を生成し、表示し得る。ユーザがキャラクタの第2のシーケンスを強調表示すると、正規表現生成器は、キャラクタの第1のシーケンスとキャラクタの第2のシーケンスとの両方を包含する更新された正規表現を生成し得る。次いで、ユーザがキャラクタの第3のシーケンスを(たとえば第1のシーケンスまたは第2のシーケンスのいずれか内で)強調表示すると、正規表現生成器は正規表現を再び更新し得る等となる。
【0120】
図12は、ユーザインターフェイス内で受信されたユーザデータ選択を介して、正規表現を生成し、キャプチャグループに基づいてデータを抽出するための処理1200を示す別のフローチャートである。ステップ1201において、ステップ1101で上述したように、正規表現生成器110は、(たとえばデータリポジトリ130から)データを取り出し、そのデータをグラフィカルユーザインターフェイス内においてテーブル形式でレンダリング/表示することができる。ステップ1202において、正規表現生成器110は、特定のデータセル内のテキストフラグメントのユーザ強調表示の選択を受け取ることができる。ステップ1203において、正規表現生成器110は、選択されたデータセルの陽性例に基づいて正規表現を生成することができ、ステップ1204において、セル内で強調表示されたテキストフラグメントに基づいて正規表現キャプチャグループを作成することができる。ステップ1205において、正規表現生成器110は、生成された正規表現とマッチする、表示されたテーブル形式データ内の1つまたは複数の追加セルを判断することができ、ステップ1206において、生成された正規表現とマッチする追加セル内の対応するテキストフラグメントを抽出することができる。
【0121】
したがって、陽性例を供給することに加えて、ユーザは、(たとえばマウステキスト強調表示を介して、)選択された陽性例のいずれか内でテキストフラグメントを選択してもよい。これに応答して、正規表現生成器110は、例から、そのテキストフラグメントを抽出し、正規表現が適用されているテキスト中の他のすべてのマッチから、対応するフラグメントを抽出するために、正規表現キャプチャグループを作成してもよい。マッチするデータセルからテキストフラグメントを抽出することは、削除および修正も含み得、場合によっては、半構造化または非構造化テキストの既存の列からデータの新たな列を作成するために用いられ得る。
【0122】
ユーザが陽性のデータ例を選択する例を用いて、ユーザが年を強調表示した場合、正規表現生成器110は正規表現
【0123】
【0124】
を生成することができる。この例に示すように、正規表現生成器110は、年の周りに括弧を付けてあり、また、月および日の周りの古い括弧(交代のために使用)を?:レゲックス構文の使用により「非キャプチャ」グループに変換している。いくつかの実施形態では、抽出/キャプチャグループは、スパン境界上にあることが要求され得、そのような実施形態では、正規表現生成器110は、強調表示されたキャラクタ範囲を入力として取り得、最も近い位置指定子スパン境界を包含するようにそれを拡張し得る。しかしながら、他の例では、ミッドスパン抽出/キャプチャは、ユーザインターフェイスによってサポートされてもよい。
【0125】
いくつかの実施形態では、ユーザインターフェイスは、第2のキャラクタシーケンス内の第1のキャラクタシーケンスの選択を含むユーザからの入力データをサポートしてもよい。たとえば、ユーザは、より大きな以前に強調表示されたキャラクタシーケンス内の1つまたは複数のキャラクタを強調表示することができ、第2のユーザ選択は、より大きな第1のユーザ選択のためのコンテキストを提供してもよい。そのような実施形態は、入力データが、より高い特異性で正規表現生成器110に提供されることを可能にし得る。
【0126】
さらに、いくつかの例では、ユーザがユーザインターフェイス内で選択する(たとえばテキストを強調表示する)ことに応答して、動作を開始し、ダイアログを開くことができる。場合によっては、ダイアログは、メイン画面とのユーザ対話を妨げないフローティングツールボックスウィンドウなどの非モーダルダイアログであってもよい。ダイアログはまた、ユーザがどのような主要な操作を行っているかに応じて外観および/または機能性を変化させることもできる。したがって、そのような場合、ユーザは、キャプチャグループテキストフラグメントの修正、抽出などを開始するために、選択されたテキストを強調表示した後にさらなるメニューアイテムを検索する必要がない。
【0127】
さらに、特定の実施形態では、正規表現を生成するために提供されるユーザインターフェイスは、3つの強調表示モード、すなわち、ネスト化自動、ネスト化手動、および単一レベル、を含み得る。ネスト化自動は、ネスト化(自動-外側)としても知られる。ネスト化手動は、ネスト化(完全-制御)としても知られる。これらの例では、単一レベルは、1つのレベルの強調表示(または他の形態のテキスト選択)を指し得、これは、正規表現を、キャプチャグループを伴わずに生成させ得る。ネスト化手動強調表示モードは、2つのレベルの強調表示(または他の形態のテキスト選択)の識別を可能にする。これにより、キャプチャーグループを伴う正規表現の生成を引き起こす。ネスト化自動強調表示は、外側強調表示(または他の形態のテキスト選択)が、テキスト全体(例えば、スプレッドシートセル全体)のコンテンツとなるように自動的に設定され得ることを除き、ネスト化手動強調表示モードと同一であってもよい。
【0128】
場合によっては、デフォルト動作モードは、セル全体が強調表示された領域として識別されることであってもよく、ユーザは、強調されたセル内の1つまたは複数の追加のサブシーケンスをさらに強調表示してもよい。他のモードでは、ユーザは、テーブル形式データディスプレイのデータセル内で両方の強調表示を手動で指定することを許可されてもよい。さらに他のモードでは、ユーザは、内側強調表示なしで外側強調表示を手動で指定することを許可されてもよい。これらのその他のモードは、半構造化データ、たとえば、ブラウザ「ユーザエージェント」ストリングなどのツイートまたは他の長いストリングからなるデータの列に、より適し得る。「半構造化」データは、ユーザインターフェイス内でテーブル形式で表示され得るデータを指すが、テーブル内の列は非構造化テキストからなる。
【0129】
いくつかのそのような実施形態では、ユーザインターフェイスを介したユーザによる内側および外側の選択(たとえば強調表示)は、カラーコード化によって区別され得る。たとえば、陽性例の外側強調表示は、第1のテキスト/背景色の組み合わせで示されてもよく、陽性例の内側強調表示は、異なる対照的なテキスト/背景色の組み合わせで示されてもよい。
【0130】
上述したように、ユーザは、キャラクタサブシーケンスの選択を介してキャプチャグループの選択を指定することができる。GUIを用いて、強調表示(または他の表示)を介するユーザ選択を容易にしてもよい。一例を
図13に示し、例示的ユーザインターフェイス画面がテーブル形式データディスプレイとともに示される。この例では、
図13は、たとえば、ユーザが列値の1つまたは複数の所望の要素を横切ってマウスをドラッグすることによって引き起こされる、列値内の強調表示を示す。なお、ユーザ強調表示が実行される「セル」は、列値の選択を示す色変化を示してもよい。この色変化は、ユーザ強調表示に応答する自動化された強調表示と解釈されてもよい。
【0131】
図14および
図15は、テーブル形式ディスプレイからのデータの選択に基づく正規表現およびキャプチャグループの生成を示す例示的なユーザインターフェイス画面である。これらの例では、
図14および
図15は、テーブル形式データディスプレイ内のユーザ強調表示1401の検出が自動的に表示される追加のユーザインターフェイスウィンドウを示す。ウィンドウは、陽性例を表示するためのフィールド1402と、陰性例を表示するためのフィールドと、テーブル形式データディスプレイからの陽性例の選択に応答して動的に(およびほぼ瞬時に)生成される正規表現を表示するためのフィールドとを含む。これらの例では、列値1401内のユーザ強調表示は、自動化された強調表示内のユーザ強調表示と同等であり得る。したがって、エリアコードのユーザ強調表示により、ユーザ強調表示されたエリアコード1401だけでなく、電話番号の残りの部分も陽性例フィールド1402にポピュレートされる。
【0132】
しかしながら、ユーザ強調表示は、自動強調表示内の性能に限定されないことを理解されたい。たとえば、ユーザ強調表示は、代替的に、他のユーザ強調表示内で実行されてもよい。別の例として、ユーザ強調表示は、代替的に、内側強調表示(たとえば、強調表示されたテキスト内でのさらに強調表示)なしで実行されてもよい。これらの代替例は、「ツイート」または他の長いストリング(たとえばブラウザ「ユーザエージェント」ストリング)を含むデータの列などの半構造化データに特に適している。
【0133】
さらに、対応する正規表現が生成されると、正規表現にマッチする他の列値1402が、追加の自動化された強調表示に基づいて識別され得る。
図14および
図15に示される例では、追加の自動化された強調表示は、生成された正規表現のキャプチャグループにマッチする、これらの他の列値の要素を示す。追加の自動化された強調表示は、ユーザ強調表示に使用される色とは異なる色を使用して実行されてもよい。
【0134】
図15に示すように、他の例のユーザ選択を示すために、追加のユーザ強調表示が示される。追加のユーザ強調表示は、上述の方法と同様の方法で実行され得る。したがって、
図15のユーザインターフェイスは、陽性例を表示するためのフィールド1502における他の例のポピュレーションを示す。これは、追加のユーザ強調表示の検出に応答して起こり得る。さらに、生成された正規表現1503は、それが陽性例1502のすべてにマッチするように、動的にかつほぼ瞬時に更新されてもよい。更新された正規表現の生成に応答して、更新された正規表現にマッチする他の列値1504の自動化された強調表示も更新され得る。いくつかの実現形態では、動的カラーコード化も使用され得る。たとえば、マッチは、第1の色(たとえば青色)を使用してカラーコード化されてもよく、陽性例は、第2の色(たとえば緑色)を使用してカラーコード化されてもよく、陰性例は、第3の色(たとえば赤色)を使用してカラーコード化されてもよい。テーブル形式のデータビュー(スプレッドシートなど)またはその他の(たとえば半構造化データまたは非構造化データの)無限スクロールデータビュー内では、ビューが実際の追加データにスクロールダウンされると、新たに可視となるデータがカラーコード化されてもよい。
【0135】
図16Aおよび
図16Bは、テーブル形式ディスプレイからの陽性例および陰性例の選択に基づく正規表現の生成を示すユーザインターフェイス画面例である。
図16A~
図16Bでは、陽性例フィールド1602からの個々の例は、陽性例フィールド1603から除去され得、および/または陰性例フィールド1603に移され得る。ユーザインターフェイス内で、これは、たとえば、ユーザが例の1つをクリック(たとえば右クリック)してそれを選択することによって実行されてもよい。選択は、ユーザーインターフェイスに、削除オプションおよび変更オプションを含むメニュー1602を表示させることができる。その後、オプションをクリックすると、対応する機能が実行される。
【0136】
図16Aおよび
図16Bに示される例において、変更オプションのユーザ選択の結果は、選択された例を陰性例フィールド1603に移動させ、正規表現1601を正規表現1604に更新させ、この正規表現1604は、動的にかつほぼ瞬時に生成され得る(たとえばある実施形態では、30ms~9000msの間、または100msメジアンである)。更新された正規表現1604の生成に応答して、更新された正規表現にマッチする他の列値の自動化された強調表示も、テーブル形式データディスプレイ内で更新され得る。さらに、自動化された強調表示は、陰性例に対応する任意の列値を含む、陰性例の一部または全部に対して実行されてもよく、それは、上で使用された色のいずれとも異なる色を使用して強調表示されてもよく、または他の態様では他の視覚的技法を使用してユーザインターフェイス内で区別されてもよい。
【0137】
いくつかの実施形態では、ユーザインターフェイスを介して陰性例を指定することは、
図16Aおよび
図16Bに示されるように、最初にその例を陽性例として指定し、次いでそれを陰性例に変換することを必要とする必要はない。むしろ、陰性例は、さまざまな方法で指定され得る。たとえば、ユーザは、ユーザインターフェイスを介して列値(たとえば、自動化された強調表示が実行されて、生成された正規表現とマッチすることを示した、他の列値のうちの1つ)を選択する(たとえば右クリックする)ことができ、それによって、オプション(たとえば「新たな反例を作成する」)を含むメニューのディスプレイに、選択された列値を陰性例として指定させることができる。
【0138】
したがって、
図16Aおよび
図16Bに示される例を使用して、更新された正規表現1604の生成に応答して、更新された正規表現にマッチする他の列値の自動化された強調表示も更新され得る。これらの例では、更新された正規表現は、「9」で終わる電話番号を指定する。
【0139】
図14および
図15を簡単に参照すると、「抽出」ボタンがユーザによってクリックされるか、または他の態様で選択されると、現在の正規表現1403または1503にマッチするすべてのセル内の強調表示されたテキストフラグメントを抽出するための動作が、開始され得る。
図14および
図15には示されていないが、いくつかの実施形態では、ユーザインターフェイスは、「抽出」ボタンに加えて、またはその代わりに、他の選択可能なボタンを提供してもよい。たとえば、「置換」ボタンが、ユーザ強調表示された要素をユーザ指定された要素に置換するためのオプションとして提示されてもよい。追加または代替として、1つまたは複数の「削除」ボタンが、事実上、ユーザ強調表示された要素を何にも置換しないオプションとして提示されてもよい。たとえば、「フラグメントを削除」操作および/または「行を削除」操作の一方または両方が実現されてもよく、それは、それぞれ、ユーザ強調表示されたテキストフラグメントまたは行全体のいずれかを削除することになる。さまざまな実施形態において実現され得る追加の操作は、「行を保持」操作、「分割」操作(たとえば、コンマを強調表示し、次いで、コンマ分離成分を別々の複数の新たな列に抽出する)、および「難読化」操作(たとえば、強調表示されたテキスト/キャプチャグループを「#」または他の記号のシーケンスで置き換える)を含み得る。
【0140】
この例では、「抽出」ボタンが選択されたことに応答して、抽出操作が、下流の操作によって実行されるべき変換スクリプトのリストに追加され得る。いくつかの実施形態では、変換スクリプトのリストは、ユーザによるレビュー/修正のためにユーザインターフェイスの一部分に表示されてもよい。代替的に、抽出操作は、その場で実行されて、レゲックスキャプチャグループの内容(たとえば、陽性例のユーザ強調表示部分に対応する要素)を含む新たな列を生成してもよい。
図14および
図15に示される例では、エリアコードの新たな列および/または新たなテーブルが、「抽出」ボタンの選択に応答して生成されてもよい。
【0141】
図17は、本明細書に記載する1つまたは複数の実施形態による、テーブル形式ディスプレイからのデータの選択に基づく正規表現およびキャプチャグループの生成を示す別の例示的なユーザインターフェイス画面である。
【0142】
A.複数強調表示
いくつかの実施形態では、ユーザインターフェイスはまた、例につき複数の強調表示をサポートしてもよい。
図42,
図43,
図44,
図45,
図46,
図47,および
図48は、いくつかの例示的実施形態による、複数の強調表示を実現するためのユーザインターフェイス4200,4300,4400,4500,4600,4700,および4800を示す。異なる強調表示方法を以下に記載する。例示的な実施形態では、内側強調表示および外側強調表示は、異なるカラーコードを用いることによって区別することができる。
【0143】
図42は、いくつかの例示的実施形態による、単一レベルモードでデータセットのビューを表示するユーザインターフェイス4200を示す。
図42は、単一レベル強調表示モードにある間、強調表示がユーザインターフェイス上にどのように現れるかを示す。
図42において、ユーザは、アプリケーション4236(例えばMozilla)のバージョン番号4235(例えば、"5.0")を強調表示する。ユーザがバージョン番号4235を強調表示するのに応答して、ユーザインターフェイスデータモデル生成器は、バージョン番号4237("6.1")、4238("1.9")、4239("2.2")、および4240("3.6")を強調表示する。
【0144】
強調表示に基づいて、例別レゲックスダイアログボックス4230が現れる。例別レゲックスダイアログボックス4230は、ユーザによって指定された、指定された例4233を含む。この例では、バージョン番号"5.0"がユーザによって指定される。また、例別レゲックスダイアログボックス4230は、強調表示モード4250が単一レベル4251であることを示す。
【0145】
図43は、いくつかの例示的実施形態による、ネスト化された完全制御モードで強調表示されたデータを表示するユーザインターフェイス4300を示す。
図43に示す例では、ダイアログボックス4330の強調表示モードパネル4350から「ネスト化(完全制御)」4351が選択されている。また、
図43に示すように、ユーザは、外側強調表示を、ソフトウェア名4236(例えば「Mozilla」)およびバージョン番号4235(例えば"5.0")として表示する。例別レゲックスダイアログボックス4330は、強調表示モード4350がネスト化(完全制御)4351にあることを示す。さらに、データセットは、現在、マルチ強調表示モード4360にある。
図43において実行される強調表示は、外側強調表示を、ネスト化された全自動モードで行う。
【0146】
例示的な実施形態では、現在実行されている外側強調表示である進行中外側強調表示は、金色のようなそれ自体の緊急性の色で、第1のクラスの態様で取り扱うことができる。例示的な実施形態では、強調表示は、強調表示の緊急性、優先度、および/または重要性を示すために用いることができる異なる色で現れることができる。
【0147】
図44は、いくつかの例示的実施形態による、ネスト化された完全制御モードで強調表示されたデータを表示するユーザインターフェイス4400を示す。
図44に示すように、マルチ強調表示モード4460が選択される。ユーザは、外側強調表示を、ソフトウェア名4236およびバージョン番号4235として表示している。外側強調表示として選択されるソフトウェア名4236(例えば、Mozilla)およびバージョン番号4235(例えば、5.0)は、第1の色で強調表示され得る。ユーザは、外側強調表示を選択した後、内側強調表示を識別することができる。例えば、ユーザは、バージョン番号4235(例えば、"5.0")のみを内側強調表示として選択することができる。内側強調表示は、第1の色とは異なる第2の色で強調表示され得る。内側強調表示と外側強調表示とが異なる色で現れるので、外側強調表示と内側強調表示とを容易に識別することができる。
図44に示される例は、ネスト化された完全制御モード強調表示にある。したがって、強調表示モードパネル4450は、データセットがネスト化された完全制御モード4451にあることを示す。
【0148】
例示的な実施形態では、内側強調表示および外側強調表示は、異なる色またはカラーコードを用いることによって区別することができる。例えば、陽性例の外側強調表示は、淡緑色背景上に黒色テキストで示され得、陽性例の内側強調表示は、濃緑色背景上に淡緑色テキストで示され得る。
【0149】
図44では、ユーザは、要素4235として識別されるバージョン番号"5.0"を選択している。ユーザがバージョン番号"5.0"(要素4235)を選択すると、ユーザインターフェイスデータモデル生成器は、バージョン番号"3.6"(要素4240)および"5.1"(要素4241)を自動的に選択することができる。ユーザインターフェイスデータモデル生成器は、ユーザによって選択されたバージョン番号に加えて、バージョン番号を強調したので、ユーザインターフェイスデータモデル生成器によって識別される追加のバージョン番号がユーザによって望まれない場合には、ユーザは追加の例を与えることができる。あるいは、ユーザがユーザインターフェイスデータモデル生成器によって実行される追加の強調表示に同意する場合、ユーザは強調表示されたデータにコマンドを適用することに進むことができる。
【0150】
例別レゲックスダイアログボックス4430は、指定された例4433を表示する。さらに、例別レゲックスダイアログボックス4430は、強調表示モード4450がネスト化(完全制御)4451であることを示す。また、例別レゲックスダイアログボックス4430は、マルチ強調表示モード4460にあることを示す。生成された正規表現4432も、例別レゲックスダイアログボックス4430において識別される。
【0151】
図45、
図46、
図47に示すように、ユーザは、さらなる例を与えることができる。
図45は、いくつかの例示的実施形態による、2つの陽性例が提供されるユーザインターフェイス4500を示す。
図46は、いくつかの例示的実施形態による、2つの陽性例が提供されるユーザインターフェイス4600を示す。
図47は、いくつかの例示的実施形態による、3つの陽性例が提供されるユーザインターフェイス4500を示す。
【0152】
図45に示すように、陽性例を与えるために、ユーザは、外側強調表示をソフトウェア名4536およびバージョン番号4535として示すことができる。外側強調表示として選択されたソフトウェア名4536(例えば、WindowsNT)およびバージョン番号4535(例えば、6.1)は、第1の色で強調表示され得る。ユーザは、外側強調表示を選択した後、内側強調表示を識別することができる。例えば、ユーザは、バージョン番号4535(例えば、"6.1")を内側強調表示として選択することができる。内側強調表示は、第1の色とは異なる第2の色で強調表示され得る。正規表現4532は、強調表示に基づいて生成することができる。
【0153】
ユーザーによって与えられる強調表示例は、例別レゲックスダイアログボックス4530内の指定された例4533において識別される。
【0154】
図46は、いくつかの例示的実施形態による、更新された生成されたレゲックスを表示するユーザインターフェイス4600を示す。
図46に示されるように、生成されたレゲックス4632は、2つの指定された例4633(例えば、"Mozilla 5.0"および"WindowsNT 6.1")に基づいて更新される。追加の外側および内側強調表示が、ユーザによって、指定された例4633において与えられるので、生成されたレゲックス4632もそれに応じて変化する。生成されたレゲックス4632は、例別レゲックスダイアログボックス4630に現れる。
【0155】
図47は、いくつかの例示的実施形態による、代替データ強調表示を表示するユーザインターフェイス4700を示す。
図47に示すように、レゲックスを生成するための例としてアンダースコアを伴うバージョン番号を与えることができる。
【0156】
図47に示すように、別の陽性例を与えるために、ユーザは、外側強調表示をソフトウェア名4735およびバージョン番号4735として示すことができる。外側強調表示として選択されたソフトウェア名4735(例えばMacOS X)およびバージョン番号4736(例えば10_6_8)は、第1の色で強調表示され得る。ユーザは、外側強調表示を選択した後、内側強調表示を識別することができる。例えば、ユーザは、バージョン番号4736(例えば10_6_8)を内側強調表示として選択することができる。内側強調表示は、第1の色とは異なる第2の色で強調表示され得る。
【0157】
ユーザーによって与えられる強調表示例は、例別レゲックスダイアログボックス4730内の指定された例4733において識別される。
図47に示すように、生成されたレゲックス4732は、3つの指定された例4733(例えば、"Mozilla 5.0"、"WindowsNT 6.1" および"MacOS X 10_6_8")に基づいて更新される。追加の外側および内側強調表示が、ユーザによって、指定された例4733において与えられるので、生成されたレゲックス4732もそれに応じて変化する。
【0158】
図48は、いくつかの例示的実施形態による、更新された生成されたレゲックスを表示するユーザインターフェイス4800を示す。
図48に示されるように、ユーザがアンダースコアを伴うバージョン番号を選択することに応答して、生成されたレゲックス4832は、アンダースコア情報を含むように更新される。
【0159】
生成されたレゲックス4832は、3つの指定された例4833(例えば、"Mozilla 5.0"、"WindowsNT 6.1"および"MacOS X 10_6_8"」)に基づいて更新される。追加の外側および内側強調表示が、ユーザによって、指定された例4833において与えられるので、生成されたレゲックス4832もそれに応じて変化する。生成されたレゲックス4832は、例別レゲックスダイアログボックス4830に表示される。
【0160】
図49は、いくつかの例示的実施形態による、多重強調表示を実行するための方法4900のフローチャートである。
【0161】
ステップ4910において、ユーザは、データセット内のデータ(例えば、データフラグメント)を選択することができる。すなわち、ユーザは、外側強調表示(例えば、"Mozilla 5.0")および内側強調表示(例えば、"5.0")を選択することができる。ユーザは、第1のデータレコード4320において外側強調表示および内側強調表示を実行することができる。
【0162】
ステップ4920で、ユーザが初期強調表示を実施した後、ユーザインターフェイスデータモデル生成器は、ステップ4910でユーザによって行われた強調表示に対応する、データセット内の同じレコードおよび/または他のレコード内のデータ(例えば、データフラグメント)を自動的に強調表示することができる。
【0163】
ステップ4930では、正規表現を生成することができる。正規表現は、ステップ4910でユーザによって与えられる強調表示に基づいて、およびステップ4920でユーザインターフェイスデータモデル生成器によって実行される追加の強調表示に基づいて、生成される。
【0164】
ユーザが強調表示結果に満足しない場合、ユーザは、追加の例を与えるために、追加のデータを強調表示することができる。したがって、ステップ4910,4920および4930は、ユーザがデータセット上の最後の強調表示に満足するまで、繰り返すことができる。あるいは、ユーザは、生成された正規表現(例えば、4832)を修正して、所望の強調表示を生成することができる。
【0165】
例示的な実施形態では、ネスト化された(自動外側)モードにおける複数の強調表示について、必要な最小の数の周辺スパンに対して検索が実行される。ユーザインターフェイスが、複数の強調表示を伴うネスト化された(自動外側)モードである場合、バックエンドアルゴリズムは、特別モードに入ることができる。特別モードの理由は、例当たり複数の強調表示が、例示ストリングが通常よりも長いことを意味する傾向があるからである。LCSアルゴリズムは指数関数的なランタイムを有するので、これは外側強調表示の全長で実行するには長くかかりすぎるであろう。特別モードでは、アルゴリズムは内側強調表示で始まり、満足のいくレゲックスが生成されるまで、内側強調表示のまわりで外側強調表示を徐々に成長させる。
【0166】
特別モードを実行するための例示的なコードは、以下のコードの一部またはすべてを含むことができる:
【0167】
【0168】
【0169】
多重強調表示により、ユーザは、コマンド(例えば、抽出する、分割する、削除する、難読化する、置換する、および行をフィルタリングする)のいずれでも適用することができるデータ(例えばデータフラグメント)を容易に選択することができる。
【0170】
例単位複数強調表示の能力について、個々の強調表示は、全行の代わりにクリック可能であってもよい。場合によっては、チェックボックス(またはユーザインターフェイス内の他の技術)を用いて、例単位1強調表示モードと例単位複数強調表示モードとの間で切り換えてもよい。例えば、例につき複数の強調表示をサポートするモードでは、ユーザは、正規表現が生成され得る複数の異なる例を与えるために、単一のデータ例(例えば、スプレッドシートセル)内で複数の異なる強調表示された部分を選択し得る。例ごとの複数の強調表示において、陽性および陰性の両方の「例」が識別され得、1つの例のリストにおいてカラーコードとして示され得る。例えば、マルチ強調表示モードでは、ある強調表示をクリックすると、その1つのサブ例のみが陰性になる。例単位複数強調表示の機能が
図42~
図49に示されている。
【0171】
この一連の例に示すように、ユーザは、外側の強調表示された領域、それに続いて内側の強調表示された領域を順次選択して、対応する正規表現を生成/更新する。さらに、これらの図に示されるように、ユーザは、単一のデータセル内で複数の異なる内側/外側強調表示例を指定することができ、生成された正規表現は、ユーザインターフェイスを介して強調表示された(または他の方法でユーザによって選択された)各新たな例で更新され得る。
【0172】
いくつかの実施形態では、特別なマルチ強調表示ネスト化自動外側検索モードは、所定の数のスパン(例えば、10スパン)の直径に制限され得る。そのような場合、最後のdo-whileループに関する条件は、while (!result.isSuccess && !reachedMaximal && numLookAheadAndBehindSpans < 10)のようであり得る。
【0173】
特定のコマンドを実現するときに、マルチ強調表示を用いてもよい。
B.コマンド
上述したように、ユーザインターフェイスは、様々な実施形態において抽出コマンドに加えて追加のタイプのコマンドをサポートしてもよい。ユーザインターフェイスデータモデル生成器の要素は、それらのコマンドを実現するよう構成され得る。
【0174】
図24は、いくつかの例示的実施形態による、正規表現生成サーバ2400を示す。正規表現生成サーバ2400は、
図1に示した正規表現生成器サーバ111に対応する。正規表現生成サーバ2400は、複数のプロセッサおよびメモリを含むことができる。正規表現生成サーバ2400は、正規表現生成器2410およびユーザインターフェイスデータモデル生成器2420を含むことができる。正規表現生成器2410は、レゲックス生成器とも称され得る。正規表現生成器2410は、
図1の正規表現生成器116に対応し得る。ユーザインターフェイスデータモデル生成器2420は、
図1のユーザインターフェイスデータモデル生成器114に対応し得る。
【0175】
正規表現生成器2420は、抽出する、分割する、削除する、難読化する、置換する、および行をフィルタリングする、を含むいくつかの異なるコマンドを実行することができる。したがって、正規表現生成器2420は、抽出データ生成器2411、分割データ生成器2412、削除データ生成器2413、難読化データ生成器2414、置換データ生成器2415、行フィルタリングデータ生成器2416を含むことができる。以下、正規表現作成サーバ2400の各構成要素についてより詳細に説明する。
【0176】
抽出、分割、削除、難読化、置換、および行フィルタリングコマンドが説明されるが、例示的な実施形態は、追加のコマンドを実行するよう構成され得る。また、正規表現生成器2410は、
図24に示した以外のコマンド生成部を含むこともできる。
【0177】
1.抽出
上述したように、抽出コマンドにおいては、正規表現のパターンマッチが識別されてもよく、マッチするデータが、新たに作成された列に抽出されてもよい。抽出関数は、
図14および
図15に関して上で説明されている。
【0178】
2.分割
図25A、
図25B、および
図26は、ユーザインターフェイスを介して実現される分割コマンドの例を示す。
図25Aおよび
図25Bは、いくつかの例示的実施形態による、分割コマンドを実現するためのユーザインターフェイス2500およびユーザインターフェイス2501を示す。
図26は、いくつかの例示的実施形態による、データセット上の分割コマンドの結果を示す。
【0179】
分割コマンドは、デリミタとして用いられる特定の正規表現の存在に基づいて、複数の異なる列の作成をもたらすことができる。例えば、コンマ(「,」)がマッチされるべきパターンとして与えられる場合、コンマは、抽出操作中にデリミタとして用いられる。単一のコンマを含む抽出されるべき各データは、コンマにおいて分割され、2つの異なる列(すなわち、コンマの前のデータおよびコンマの後のデータ)に抽出される。分割されるべきデータ項目が2つのコンマを含む場合、そのデータはコンマに基づいて3つの部分に分割され、3つの新たな列に抽出される。したがって、分割コマンドは、(マッチが単一の列に入れられるであろう)パターンマッチに基づく抽出ではなく、デリミタに基づく(1つまたは複数の新たな列への)抽出を実行することができる。
【0180】
他の例では、分割コマンドは、特定のタイプのコンテンツに対して、マッチされるべきパターン(またはデリミタ)における中括弧または大括弧、アスタリスク、「<」もしくは「>」またはハイフンおよびダッシュ文字を用いるなどして、実行されてもよい。追加の記号を、デリミタとして用いてもよい。
【0181】
図25Aに示されるように、データセットがユーザインターフェイス2500上に表示される。データセットはスプレッドシートとすることができる。データセットは、電話番号を含む列2510を含むことができる。電話番号は、第1のハイフン2511および第2のハイフン2512を含むことができる。分割コマンドが電話番号の列2510上で実現される場合、電話番号は、ユーザによって所望のように分割され得る。
【0182】
図27は、いくつかの例示的実施形態による、分割コマンドを実行するための方法2700のフローチャートを示す。
図27の例では、データを分割するためのデリミタとしてハイフン文字が用いられる。
【0183】
ステップ2710において、ユーザは、「電話番号」列2510内において第1のレコード2520のハイフンを選択することができる。ハイフンは、ユーザが対話型ユーザインターフェイス上にいる場合、ユーザがデバイスのディスプレイ上で例えばマウスまたはジェスチャーを用いてハイフンを強調表示することによって、選択され得る。
図25Aに示される例では、ユーザは、第1のレコード2520内の第1のハイフン2511を強調表示している。
【0184】
ステップ2720において、ユーザが第1のレコード2520内の第1のハイフンを強調表示した後、ユーザインターフェイスデータモデル生成器は、データレコード(例えば、
図25Aに示すようなレコード2~25)の各々について、ユーザによって行われた選択に対応する電話番号列内の第1のハイフンのすべてを自動的に強調表示することができる。すなわち、ユーザインターフェイスデータモデル生成器は、第1のレコード2520に対してユーザにより行われた強調表示に基づいて、電話番号列の残りのレコード(例えば、2~25)に対してどのような強調表示をすべきかを判断することができる。図面では25個のレコードが示されているが、例示的な実施形態は、25個よりも多いかまたは少ないレコードに分割コマンドを適用することができる。さらに、データセットは、何千または数千のレコードなど、多数のレコードを含むことができる。正規表現は、ユーザによって行われた最初の強調表示に基づいて、どのような追加の強調表示を同じレコード内、または追加のレコード内で実行すべきかを判断することができる。
【0185】
ステップ2730では、強調表示が行われた後、強調表示に基づいて正規表現を生成することができる。
図25Aは、ユーザによって実行された強調表示、および正規表現生成器によって実行された自動強調表示に基づいて生成される、生成されたレゲックス2532を示す。生成される正規表現は、ユーザによって行われる強調表示の変化に基づいて更新される。
【0186】
ステップ2740では、「例別レゲックス」ダイアログボックス2530が自動的に画面上に現れる。
図25Aに示す例では、電話番号列2510のすべてのレコード(例えば、レコード1~25)に対して強調表示が行われた後に「例別レゲックス」ダイアログボックス2530が現れるが、「例別レゲックス」ダイアログボックス2530は初期入力(例えば、ユーザによる第1のレコードの強調表示)後に現れることもできる。
【0187】
図25Aには、指定された例2533が示されており、ユーザは、選択されたデータを容易に強調表示するかまたは選択されたデータに対して行われる強調表示を容易に修正できる。ユーザは、「電話番号」列2510のデータにおける強調表示を変更すること、指定された例2533における強調表示を変更すること、または生成されたレゲックス2532を修正することによって、強調表示を修正することができる。「電話番号」列2510に対してなされた変更は、生成される正規表現2532に反映される。
【0188】
ある例示的な実施形態では、最小スパニングツリーを、強調表示上ではなく、例上で用いることができる。したがって、与えられる各例に対して複数の強調表示があり、強調表示が重複する場合、最長共通サブシーケンスアルゴリズムの単一のコピーのみが、各例に対して実行される必要がある。与えられる例に対する強調表示が重複しない場合、最長共通サブシーケンスアルゴリズムは、強調表示の各々について実行することができる。
【0189】
例示的な実施形態では、最長スパンリストが最小スパニングツリー(MST)頂点に対して選択され、最初にLCSキューに供給される。LCSキューは、最長共通サブシーケンスアルゴリズムが適用されるスパンを含む。複数の強調表示を表す1つの例がgraphLcs()に渡される配列に含まれている例あたりの複数の強調表示で、最も長いそのような例は、スパンの順序リストがLCSキューに渡されると判断する最小スパニングツリーのグラフにおける頂点となるように選択される。
【0190】
ステップ2750において、「分割」コマンドの選択が受信される。例えば、ユーザは、例別レゲックスダイアログボックス2530上の「分割」ボタン2531を選択できる。例別レゲックスダイアログボックス2530に示すように、マルチ強調表示チェックボックス2534および強調表示モードドロップダウンリストは、分割が選択されると無効化される。
【0191】
例示的な実施形態では、チェックボックスは、ユーザが第2の強調表示を行うことに基づいてUIがチェックボックスを自動的にチェックすると、ユーザの注意を喚起するように、活性化(animated)されてもよい。ある例示的な実施形態は、ユーザがUIの他の場所で対話することによって引き起こされる状態の変化に基づいてチェックボックスを活性化する。チェックボックスは、サーバシステムが、画面上の他の場所におけるユーザ対話に基づいてチェックボックスにその状態を自動的に変化させた場合に、活性化される。
【0192】
「分割」コマンドの選択が受信された後、ステップ2760において、正規表現生成器2410の分割データ生成器2412は、強調表示されたデリミタに基づいて電話番号を自動的に分割することができる。
図25Bに示される例は、ユーザが
図25Aの「分割」コマンド2531を選択した後に生ずる。
【0193】
図25Bに示されるように、分割コマンドは、強調表示設定をマルチ強調表示に変更する。
図25Aでは、分割コマンドの選択に先立って、マルチ強調表示モード2534は選択されていない。
図25Bでは、分割コマンドの選択後、マルチ強調表示モード2534が選択される。いくつかの実施形態では、「分割」コマンドが選択されると、ユーザインターフェイスは、マルチ強調表示チェックボックスおよび強調表示モードドロップダウンリストを有効にすることができる。例えば、
図25Bを参照すると、ユーザが「分割」コマンドをクリックすると、強調表示モードは自動的に単一レベルに変更され得、その後、マルチ強調表示テキストボックスが有効化され得る。
【0194】
ステップ2770では、分割コマンド結果を表示することができる。
図26に示されるユーザインターフェイス2600に示されるように、電話番号列2510からの電話番号は、ここで3つの列2610,2620および2630に分割されている。列2610は、第1のハイフンの前に現れる電話番号の一部を含み、列2620は、第1のハイフンと第2のハイフンとの間に現れる電話番号の一部を含み、列2630は、第2のハイフンの後に現れる電話番号の一部を含む。デリミタとして機能するハイフンは2つあるため、電話番号は3つの列に分割される。一部の番号の場合、ある列は市外局番を市内局番とともに含み得、なぜならば、市外局番は第1のハイフンの前に現れるからである。電話番号について、その電話番号内の情報に基づいて、フィールドがポピュレートされることになる。電話番号が1つのハイフンのみを有する場合、その番号に対して2列の情報のみが現れる。
【0195】
3つの追加の列は、
図26に示されるように、スプレッドシートビュー内に生成される。電話番号が分割されているので、ユーザは所望の情報をより容易に識別することができる。例えば、ユーザは、データレコード内の市外局番をより容易に識別することができる。また、ユーザは、列2610,2620および2630の各々に対して追加処理を行うことができる。したがって、ユーザはより容易にデータを利用することができる。例えば、ユーザは顧客の一次市外局番を識別することができる。
【0196】
分割コマンドが実行されると、実行された分割コマンド(例えば、電話列分割)は、データセットのための変換スクリプトに追加され得る。変換スクリプトは、データの列に適用されるコマンドを示す。変換スクリプトは、同じコマンドを別のデータセットに適用するために用いることができる。
【0197】
したがって、例示的な実施形態は、データセット内のデータを分割するための迅速かつ効率的なユーザインターフェイスを提供する。さらに、正規表現生成器は、ユーザによって望まれる結果を生成する可能性がより高い設定を識別するように構成することができる。
【0198】
フロー図は特定のステップで説明されるが、ステップの順序は変更することができる。例えば、ユーザにより実行される初期強調表示に基づいて正規表現を生成することができる。
【0199】
3.削除
図28は、いくつかの例示的実施形態による、削除コマンドを実現するためのユーザインターフェイス2800を示す。
図29は、いくつかの例示的実施形態による、データセット上に削除コマンドの結果を表示するユーザインターフェイス2900を示す。削除コマンドにおいては、ユーザは、テキスト例を強調表示(または他の方法で選択)して、パターンに対応する正規表現を生成し、次いで、スプレッドシートまたは他のデータビューからパターンとマッチするデータを削除してもよい。削除機能は、データを空のストリングで置換する(例えば、削除コマンドは、生成されたレゲックスを3つのキャプチャグループに変換することによって実現することができる)。
【0200】
図28に示されるように、データセットがユーザインターフェイス2800に表示される。データセットは、ストリートアドレスを含む列2810を含むことができる。
図28に示す例では、ユーザはアドレスからストリート番号2811を削除したい。削除コマンドがレコード2820の「street_address」の列2810で実施される場合、ストリートアドレス情報は、ユーザによって所望されるように削除されることができる。
図28において、ユーザは、スプレッドシートの「ストリートアドレス」列内のストリート番号を識別するためにいくつかの陽性例を選択している。これらの例は、指定された例2833として現れる。次いで、ユーザは「削除」ボタンをクリックして、削除操作を開始する。
図29は、ストリート番号が削除された結果のスプレッドシートを示す。したがって、削除コマンドは本質的に(空のストリング)と置換される。これは、「置換」コマンドに関して以下で論じるように、生成されたレゲックスを3つのキャプチャグループに変換することによって実現され得る。
【0201】
図30は、いくつかの例示的な実施形態による、削除コマンドを実行するための方法3000のフローチャートを示す。
【0202】
ステップ3010において、ユーザは、削除のためにアドレス情報の一部を選択することができる。
図28に示す例では、第1レコード2820について、アドレス情報のストリート番号部分2811が選択されている。アドレス情報のストリート番号部分2811は、ユーザが対話型ユーザインターフェイス上にいる場合、ユーザがデバイスのディスプレイ上で例えばマウスまたはジェスチャーを用いてストリート番号部分を強調表示することによって、選択され得る。
【0203】
ステップ3020において、ユーザが第1のレコード2820内のストリート番号部分2811を強調表示した後、ユーザインターフェイスデータモデル生成器は、データレコード(例えば、
図28に示すレコード2~25)の各々について、「street_address」列2810内のストリート番号部分のすべてを自動的に強調表示することができる。すなわち、ユーザインターフェイスデータモデル生成器は、第1のレコード2820に対して実行される強調表示に基づいて、「street_address」列2810内の残りのレコード(例えば、2~25)に対してどのような強調表示が実行されるべきかを判断することができる。図面では25個のレコードが示されているが、例示的な実施形態は、25個よりも多いかまたは少ないレコードに削除コマンドを適用することができる。正規表現は、ユーザによる最初の強調表示に基づいて、どのような追加の強調表示をすべきかを判断することができる。
【0204】
ステップ3030では、正規表現が生成される。
図28には、生成された正規表現2832が示されている。生成された正規表現により、ユーザは、どのデータを選択するかを容易に強調表示することができる。削除コマンドの場合、生成された正規表現により、ユーザは、どのデータを削除するかを容易に強調表示することができる。生成された正規表現は、ユーザおよび正規表現生成器によって行われる強調表示に対応する。ユーザは、「street_address」列2810のデータにおける強調表示を変更することによって、または正規表現2832における強調表示を変更することによって、強調表示を修正することができる。「street_address」列2810に対する変更は、生成される正規表現2832に反映される。生成される正規表現は、ユーザによって行われる強調表示の変更に基づいて更新される。
【0205】
ステップ3040では、「street_address」列2810のすべてのストリート番号に対して強調表示を行った後、「例別レゲックス」ダイアログボックス2830を画面上に自動的に表示することができる。
図28に示す例では、「street_address」列2810のすべてのレコード(例えば、レコード1~25)に対して強調表示が行われた後に「例別レゲックス」ダイアログボックス2830が現れるが、「例別レゲックス」ダイアログボックス2830は初期入力(例えば、第1のレコードの強調表示)後に現れることもできる。指定された例2833は、ユーザによって与えられる例を識別する。
【0206】
ステップ3050では、削除コマンドの選択を受け付けることができる。例えば、ユーザは、「例別レゲックス」ダイアログボックス2830において、「削除」ボタン2831を選択することができる。
【0207】
削除コマンドの選択を受け付けた後、ステップ3060において、正規表現生成器2410の削除データ生成器2413は、強調表示に基づいてストリート番号を自動的に削除することができる。
図28に示す例では、「street_address」レコードのすべてが強調表示を含んでいるため、
図28に示すレコードの各々に対して削除コマンドが適用される。
【0208】
ステップ3070において、削除結果を表示することができる。
図29に表示されるユーザインターフェイス2900に示されるように、「street address」列2810のストリートアドレスからのストリート番号は除去されている。ストリート番号は、適所で削除される。
【0209】
削除コマンドが実行された後、実行された削除コマンド(例えば、ストリートアドレス列削除)は、データセットのための変換スクリプトに追加され得る。変換スクリプトは、データの列に適用されるコマンドを示す。変換スクリプトは、同じコマンドを別のデータセットに適用するために用いることができる。
【0210】
したがって、例示的な実施形態は、データセット内のデータを削除するための迅速かつ効率的なユーザインターフェイスを提供する。
【0211】
4.難読化
図31は、いくつかの例示的実施形態による、難読化コマンドを実現するためのユーザインターフェイス3100を示す。
図32は、いくつかの例示的実施形態による、データセット上に難読化コマンドの結果を示すユーザインターフェイス3200を示す。
【0212】
難読化コマンドでは、ユーザは、テキスト例を強調表示(または他の方法で選択)して、パターンに対応する正規表現を生成し、次いで、スプレッドシートまたは他のデータビューからパターンとマッチするデータを難読化(例えば、削除するのではなく曖昧化)してもよい。データは、レコード内のデータのすべてが見えないように難読化され得る。例えば、ユーザは、セキュリティまたはプライバシーの理由から情報を難読化することを望む場合がある。
【0213】
図31において、ユーザは、スプレッドシートの「ssn」列3110内の中央の2桁3112を選択している。次に、ユーザは「難読化」ボタンをクリックして難読化操作を開始する。
図32は、「ssn」列全体の中央の2桁を2つのポンド符号に置き換えた結果のスプレッドシートを示す。
【0214】
図31に示されるように、データセットがユーザインターフェイス3100に表示される。データセットは、例えば社会保障番号に向けられた列3110を含む。難読化コマンドを示すために社会保障番号が用いられているが、データの列内のデータのいずれでも、ユーザによって望まれるように難読化され得る。例えば、ユーザは、クレジットカード情報または銀行口座情報など、任意の種類の取り扱いに注意を要する情報を難読化することを望む場合がある。
【0215】
社会保障番号は、第1のフィールド3111、第2のフィールド3112、および第3のフィールド3113に分けることができる。第1のフィールド3111は、第1のダッシュの前にあり得、第2のフィールド3112は、ダッシュ間にあり得、第3のフィールド3113は、社会保障番号の第2のダッシュの後にあり得る。
図31に示される例では、ユーザは、社会保障番号のすべてが見えないように、社会保障番号の第2のフィールド3112(例えば、第1のダッシュと第2のダッシュとの間の数字)を難読化すること望む。第2のフィールドが難読化されているが、ユーザは社会保障番号内のフィールドのいずれかまたはすべてを難読化することを選択することができる。
【0216】
図33は、いくつかの例示的実施形態による、難読化コマンドを実行するための方法3300のフローチャートを示す。
【0217】
ステップ3310において、社会保障番号列3110内の第2のフィールド3112の選択が受け付けられる。選択されたフィールド3112は、第1のレコード3120について選択される。第2のフィールド3112は、ユーザが対話型ユーザインターフェイス上にいる場合、デバイスのディスプレイ上で例えばマウスまたはジェスチャーを用いることによって、選択され得る。ユーザによって選択された第2のフィールドは、第1の色で強調表示され得る。ユーザによってなされた選択は、ダイアログボックス3130内の指定された例3133として与えられる。
【0218】
ステップ3320では、社会保障番号列内の社会保障番号のすべてを、ステップ3320において実行される強調表示に対応するよう強調することができる。すなわち、列3110の社会保障番号内のすべての第2のフィールドは、第1の色で強調表示され、列3110の社会保障番号内のすべての第1のフィールド3111および第3のフィールド3113は、第2の色で強調表示されることになる。フィールドは、ユーザが修正されるフィールドと修正されないフィールドを容易に区別できるように、異なる色で強調表示される。
【0219】
ユーザインターフェイスデータモデル生成器は、すべてのレコード(例えば、2~25)を、第1のレコード3120に対してユーザによって実行された強調表示に対応するように、強調表示することができる。すなわち、ユーザインターフェイスデータモデル生成器は、第1のレコード3120に対して実行された強調表示に基づいて、社会保障番号列内の残りのレコード(例えば2~25)に対してどのような強調表示が実行されるべきかを判断することができる。図面では25個のレコードが示されているが、例示的な実施形態は、25個よりも多いかまたは少ないレコードに難読化コマンドを適用することができる。
【0220】
ステップ3030では、正規表現を生成することができる。
図31には、生成された正規表現3132が例別ダイアログボックス3130に示されている。生成された正規表現により、ユーザは、どのデータを難読化すべきかを容易に強調することができる。ユーザは、「ssn」列3110のデータにおける強調表示を変更することによって、または生成された正規表現3132における強調表示を変更することによって、強調表示を修正することができる。「ssn」列3110への変更は、生成される正規表現3132に反映される。すなわち、ユーザが行ったデータセットに対する強調表示の変更に基づいて、生成される正規表現が更新される。
【0221】
ステップ3340において、社会保障番号に対して強調表示が行われた後、「例別レゲックス」ダイアログボックス3130が画面上に自動的に現れることができる。
図31に示す例では、社会保障番号列3110のすべてのレコード(例えば、レコード1~25)に対して強調表示が行われた後に「例別レゲックス」ダイアログボックス3130が現れるが、「例別レゲックス」ダイアログボックス3130は初期入力(例えば、第1のレコードの強調表示)後に現れることもできる。「例別レゲックス」ダイアログボックス3130は、ユーザにより入力される指定された例3133を含む。また、「例別レゲックス」ダイアログボックス3130は、生成された正規表現3132を含む。
【0222】
ステップ3350において、「難読化」コマンドの選択が受け付けられる。例えば、ユーザは、「例別レゲックス」ダイアログボックス3130において、「難読化」ボタン3131を選択することができる。
図31に示すように、ユーザは、難読化ボタン3131を選択することができる。
【0223】
ステップ3360において、難読化コマンドが受信された後、正規表現生成サーバ2400の難読化生成器2414は、「ssn」列3110内の社会保障番号の第2のフィールドのすべてを自動的に難読化することができる。
【0224】
ステップ3370では、難読化結果を表示することができる。
図32は、いくつかの例示的実施形態による、データセット上に難読化コマンドの結果を表示するユーザインターフェイス3200を示す。
図32に示すように、ユーザによって選択された第2のフィールド3112は、難読化されるべき強調表示されたフィールドの代わりに「##」に置き換えられる。したがって、社会保障列3110内の社会保障番号の第2のフィールド3112は、すべて、「##」に置換されている。すなわち、すべての社会保障番号に対する第2のフィールド3112が難読化されている。
【0225】
難読化コマンドが実行された後、実行された難読化コマンド(例えば、obfuscate_column_ssn)は、データセットのための変換スクリプト3230に追加され得る。変換スクリプトは、データの列に適用されるコマンドを示す。変換スクリプトは、同じコマンドを別のデータセットに適用するために用いることができる。
【0226】
したがって、例示的な実施形態は、データセット内のデータを難読化するための迅速かつ効率的なユーザインターフェイスを提供し、ユーザ情報のプライバシーを維持することができる。
【0227】
5.置換
いくつかの例示的実施形態に従い、
図34は、置換コマンドを実現するためのユーザインターフェイス3400を示し、
図35は、置換コマンドを実現するためのユーザインターフェイス3500を示す。置換コマンドにおいては、ユーザは、テキスト例を強調表示(または他の方法で選択)して、パターンに対応する正規表現を生成し、次いで、パターンにマッチするテキストを他の選択されたテキストと置換することができる。
【0228】
置換コマンドは、ダイアログ内に例の前後を示す2列テーブルを動的に表示することを含む。置換表現におけるキャプチャグループのコンテンツを利用するために、ユーザはJava(登録商標)およびJavascriptレゲックスAPIからの標準的なレゲックス置換構文である$1を用いることができる。
【0229】
図37は、いくつかの例示的な実施形態による、置換コマンドを実行するための方法3700のフローチャートを示す。
【0230】
ステップ3710において、ユーザは、「street_address」列2810内で、ユーザが他のデータで置換することを望むフィールドを選択することができる。
図34に示す例において、ユーザは、ストリートアドレスの「Drive」を「Dr.」に置換することを望む。
図34に示すように、ユーザは、データセットの第5のレコード3420から「Drive」を選択することができる。置換されるべきデータは、ユーザが対話型ユーザインターフェイス上にいる場合、ユーザがデバイスのディスプレイ上で例えばマウスまたはジェスチャーを用いて置換されるべきデータを強調表示することによって、選択され得る。
【0231】
ステップ3720において、ユーザが、第5のレコードにおいて置換されるべきデータ(例えば、「Drive」)を強調表示した後、ユーザインターフェイスデータモデル生成器は、第5のレコード3420において実行された強調表示に対応する、残りのレコード内のすべてのフィールドを自動的に強調表示することができる。ユーザインターフェイスデータモデル生成器は、「Drive」を含むストリートアドレスを自動的に強調表示することができる。
図34に示すように、レコード7,13,16,18,および20には「Drive」が含まれているため、レコード7,13,16,18,および20において、「Drive」が自動的にユーザインターフェイスデータモデル生成部によって強調表示される。「Drive」は、レコード5,7,13,16,18,および20において第1の色で強調表示され得る。「Drive」を含むストリートアドレスの残りは、第1の色とは異なる第2の色で強調表示され得る。したがって、置換されるべき部分を容易に識別することができる。
【0232】
ステップ3730において、正規表現3432が生成され得る。
図35に示すように、3つの部分からなる生成された正規表現3532が示されている。3つの部分からなる生成された正規表現により、ユーザは、データの「Drive」部分、「Drive」よりも前の部分、または「Drive」よりも後の部分を容易に置換することができる。この例では、ユーザは、データの「Drive」部分を「Dr」と置き換え、ユーザは、ポップアップ「例別レゲックス」ダイアログボックス3530のプレビュースプレッドシートで結果を直ちに見ることができる。
【0233】
図34において、ユーザは、スプレッドシートの「street_address」列から十分な数の例3433(陽性および陰性)を選択して、「Drive」で終わるアドレスに対応する正規表現を生成している。アドレス3434は陽性例であり、アドレス3435は陰性例である。
【0234】
ステップ3740では、すべてのレコードに対して強調表示が行われた後、「例別レゲックス」ダイアログボックス3430が画面上に自動的に現れる。
図34に示す例では、「例別レゲックス」ダイアログボックス3430は、置換されるべきデータを含むすべてのレコードに対して強調表示が行われた後に現れるが、「例別レゲックス」ダイアログボックス3430は、初期入力(例えば、第5のレコードにおける「Drive」の強調表示)の後に現れることもできる。「例別レゲックス」ダイアログボックス3430は、指定された例3433と、生成された正規表現3432とを含むことができる。アドレス3434は陽性例であり、アドレス3435は陰性例である。
【0235】
ステップ3750において、「置換」コマンドの選択が受け付けられる。例えば、ユーザは、「例別レゲックス」ダイアログボックス3430上の「置換」ボタン3431を選択して、置換コマンドを開始することができる。
【0236】
ステップ3760では、パネル3538および「~と置換」フィールド3537を表示して、どの情報が置換されているかを判断することにおいてユーザが支援することができる。
図35に示されるように、パネル3538内で、ユーザは、初期アドレス、およびそのアドレスが置換されたときにどのように現れるかを見ることができる。例えば、アドレス内の「Drive」という語は、要素3539によって示されるように、アドレス内に「Dr.」として現れる。パネル3538は、置換コマンドが適用された場合に、データがどのように現れるかに関するプレビューをユーザに提供することにおいてユーザを支援することができる。
【0237】
図35に示されるように、レゲックス3532は、三重キャプチャグループに変換される。生成されたレゲックスは「^(.*?)(D[a-z]+)()$」である。したがって、ユーザは、強調表示前(^(.*?))、強調表示上((D[a-z]+))、強調表示後(())にどのようなデータが出現するかを容易に見ることができる。
図35に示す例では、強調表示後はデータが現れない(())。強調表示上のデータは、ユーザによって選択されるデータである。この例では、強調表示上のデータは、ユーザが置換のために選択したデータである「Drive」である。
【0238】
ユーザはまた、選択された語が何と置き換えられるかを識別できる。「~と置換」フィールド3537は、選択された語(例えば「Drive」)が置換されるべき語(例えば、「Dr」)を識別する。ユーザは、「~と置換」フィールド3537において置換語を修正することができる。「~と置換」フィールド3537においてユーザによって選択された置換語は、強調表示されたレコードに適用される。ユーザが置換に同意すれば、ユーザは作成ボタン3536を選択し、置換データ生成器2415は置換を行うことができる。
【0239】
上に示されるように、置換コマンドはまた、ダイアログ内に、例の前後を示す2列テーブルを動的に表示することを含み得る(例えば、ポップアップ「例別レゲックス」ダイアログボックスのプレビュースプレッドシート)。置換表現におけるキャプチャグループのコンテンツを利用するために、ユーザはJavaおよびJavascriptレゲックスAPIからの標準的なレゲックス置換構文である$1を用いることができる。さらに、ユーザが置換コマンドを選択し、ユーザがキャプチャグループを生成するモード(すなわち、ネスト化-自動-外側)にある場合、ダイアログに表示される生成されたレゲックスは、合計3つ、すなわち強調表示の前、強調表示上、および強調表示の後のための追加の2つのキャプチャグループを得る。次いで、ユーザは、置換表現内においてこれらを$1、$2および$3として言及することができる。さらに、キャプチャグループがない場合、システムは、生成されたレゲックス全体をキャプチャグループにラップすることができ、ユーザは、$1を用いて元のテキストを参照することができる。
【0240】
例示的な実施形態で開示されるように、強調表示モードは、ネスト化自動、ネスト化手動、および単一レベルを含むことができる。ネスト化自動は、ネスト化(自動外側)としても知られる。ネスト化手動は、ネスト化(完全制御)としても知られる。
【0241】
ステップ3770では、置換を行うことができる。「作成」ボタン3536をクリックし変更を確定した後、データが置換される。
【0242】
ステップ3780では、置換結果を表示することができる。
図36は、いくつかの例示的実施形態による、置換コマンドの結果をデータセットに表示するユーザインターフェイス3600を示す。
図36に示されるユーザインターフェイス3600に示されるように、「Drive」を含むレコードは、今、「Dr.」と置換される。これにより、「street_address」列2810における「Drive」を含むレコードは、「Dr.」と置換される。
【0243】
置換コマンドが実行された後、実行された置換コマンド(例えば、ストリートアドレス列置換)は、データセットのための変換スクリプトに追加され得る。変換スクリプトは、データの列に適用されるコマンドを示す。変換スクリプトは、同じコマンドを別のデータセットに適用するために用いることができる。
【0244】
したがって、例示的な実施形態は、データセット内のデータを置換するための迅速かつ効率的なユーザインターフェイスを提供する。
【0245】
6.行のフィルタリング
図38および
図39は、いくつかの例示的実施形態による、行フィルタリングコマンドを実現するためのユーザインターフェイス3800および3900を示す。
図40は、いくつかの例示的実施形態による、データセット上に行フィルタリングコマンドの結果を表示するユーザインターフェイス4000を示す。
【0246】
フィルタリング操作において、ユーザは、テキスト例を強調表示(または他の方法で選択)して、パターンに対応する正規表現を生成し、次いで、データをフィルタリングして、パターンとマッチするデータを含む(または除外する)ようにすることができる。「行フィルタリング」操作の例を
図38、
図39、
図40および
図41に示す。
【0247】
図41は、いくつかの例示的な実施形態による、行フィルタリングコマンドを実行するための方法4100のフローチャートを示す。
図41に示される例では、ユーザは、ストリートアドレスにおいて「Avenue」を有するレコードを識別するようにデータセット内のレコードをフィルタリングすることを望む。
【0248】
ステップ4110において、ユーザは、レコードをフィルタリングするために用いられるデータを選択することができる。
図38に示す例では、ユーザは、「street address」列2810から「Avenue」を選択している。データは、ユーザがフィルタリングに用いられるデータを強調表示することによって、選択することができる。例えば、ユーザが対話型ユーザインターフェイス上にいる場合、データは、マウスを用いて、またはデバイスのディスプレイ上でジェスチャーを介して、選択することができる。
【0249】
ステップ4120において、ユーザがフィルタリングに用いられるデータを強調表示した後、ユーザインターフェイスデータモデル生成器は、他のレコード内の対応するデータを自動的に強調表示することができる。例えば、ユーザインターフェイスデータモデル生成器は、レコード8、13、および19において「Avenue」という語を強調表示し得る。すなわち、ユーザインターフェイスデータモデル生成器は、第1のレコード3820に対して実行される強調表示に基づいて、「street_address」列2810の残りのレコード(例えば、2~25)に対してどのような強調表示が実行されるべきかを判断することができる。
【0250】
ステップ4130では、ユーザによって選択された強調表示に基づいて正規表現を生成することができる。
図39は、生成された正規表現を含むダイアログボックス3930を示す。
【0251】
図39には、生成された正規表現3932が示されており、ユーザは、フィルタリングの基礎として用いられるデータを容易に識別することができる。
図39では、3つの例がユーザによって強調表示され、指定された例3933に表示されている。したがって、指定された例3933には、3つのアドレスが現れる。ユーザは、スプレッドシートの「street_address」列から十分な数の例3933(陽性3934および陰性3935)を選択して、「Avenue」で終わるアドレスに対応する正規表現を生成している。3つの例が示されているが、ユーザは、ユーザによって望まれる結果に基づいて1つまたは複数の例を用いることができる。
【0252】
陽性例および陰性例は、異なる色で、または陽性例および陰性例がダイアログボックス3930内において、およびユーザインターフェイス上に表示されるデータセット内において、異なるように表示される、任意の方法で、表示され得る。
図39に示す指定された例3933では、「street address」列2810から陰性例として、「street」を含む2つのアドレスがユーザによって選択される。すなわち、それらは、ユーザがレコードに出現することを望まないデータの例である。しかしながら、追加の例がユーザによって与えられる場合、フィルタリングに適用される、より正確なレゲックス表現を生成することができる。
【0253】
ユーザは、「street_address」列2810内のデータにおける強調表示を変更することによって、または正規表現3932における強調表示を変更することによって、強調表示を修正することができる。「street_address」列2810に対する変更は、生成される正規表現3932に反映される。他の例では、ユーザは、同様の技法を用いて、(保持されるべきではなく)フィルタリング除去されるべきパターンに対応する正規表現を定義してもよい。
【0254】
ステップ4140では、強調表示が行われた後、「例別レゲックス」ダイアログボックス3930が自動的に画面上に現れる。
図39に示す例では、「street_address」列2810のすべてのレコード(例えば、レコード1~25)に対して強調表示が行われた後に「例別レゲックス」ダイアログボックス3930が現れるが、「例別レゲックス」ダイアログボックス3930は初期入力(例えば、第1のレコードの強調表示)後に現れることもできる。
【0255】
ステップ4150において、「行フィルタリング」コマンドの選択が受け付けられる。例えば、ユーザは、「例別レゲックス」ダイアログボックス3930において、「行フィルタリング」ボタン3931を選択することができる。ユーザは、ユーザインターフェイス内の「行フィルタリング」ボタン3931をクリックして、
図38に示されるように、すべての他のタイプのアドレスをフィルタリング除去して「Avenue」アドレスのみを残すフィルタオプションを開始することができる。
【0256】
ステップ4160では、行フィルタリングコマンドに関する確定が受け付けられる。具体的には、例3933によって識別されるレコードを保持する(保持ボタン3937)か、例3933によって識別されるレコードを削除する(削除ボタン3938)かの選択を受け付ける。「保持」ボタン3934または「削除」ボタン3935を選択した後、ユーザは、作成ボタン3936を選択してフィルタリングを開始することができる。
【0257】
ステップ4170において、正規表現生成器2410の行フィルタリングデータ生成器2416は、ユーザによって入力されたフィルタリング基準に従ってレコードを自動的にフィルタリングすることができる。
【0258】
ステップ4180では、行フィルタリングの結果を表示する。
図40に示されるユーザインターフェイス4000に示されるように、レコードは、アドレスに「Avenue」を有するレコードのみが示されるようにフィルタリングされている。この例では、スプレッドシートは25を超えるレコードを含む。説明のため、「street_address」に「Avenue」を有する最初の25個のレコードが示されている。
【0259】
行フィルタリングコマンドが実行されると、実行された行フィルタリングコマンド(たとえば、ストリートアドレス列行フィルタリング)は、データセットのための変換スクリプトに追加され得る。変換スクリプトは、データの列に適用されるコマンドを示す。変換スクリプトは、同じコマンドを別のデータセットに適用するために用いることができる。
【0260】
したがって、例示的な実施形態は、データセット中のデータの行をフィルタリングするための迅速かつ効率的なユーザインターフェイスを提供する。
【0261】
VI.陰性例のコンテキスト
例示的な実施形態では、ネスト化手動における陰性例に対して、陽性例に対応するコンテキストについて検索を実行することができる。
【0262】
ユーザインターフェイスがネスト化手動モードにある場合、「Windows NT 6.1」の外側強調表示および「6.1」の内側強調表示を有する例が受信され得る。例えばユーザによって与えられる初期例に応答して、UIは「Windows NT 6.0」を強調表示するかもしれない。UIは、正規表現生成器を介して、「Windows NT 6.0」を強調表示し得、なぜならば、「Windows NT 6.0」は、例として最初に与えられた「Windows NT 6.1」とのマッチであると判断されるからである。次いで、ユーザは、「Windows NT 6.0」を選択して、「Windows NT 6.0」が「Windows NT 6.1」との所望のマッチではないことを示してもよい。すなわち、ユーザは、「Windows NT 6.1」を選択することにより、陰性例を与えることができる。ユーザが「Windows NT 6.0」をクリックして陰性例を作成する場合、UIは、その陰性例として「6.0」だけを送信するかもしれない。したがって、例示的な実施形態によれば、UIは、LCSを実行する前にマッチ「Windows NT」コンテキストを検索することができる。例示的な実施形態は、与えられる陰性例に基づいてコンテキストを検索する。
【0263】
図50は、いくつかの例示的な実施形態による、陰性例を与えるための方法5000のフローチャートを示す。
【0264】
ステップ5010において、初期選択を受け付けることができる。初期選択に基づいて正規表現が生成される。
【0265】
例えば、ユーザは、「Windows NT 6.1」の外側強調表示および「Windows NT 6.1」の「6.1」の内側強調表示を選択することができる。外側強調表示および内側強調表示は、データを強調表示することにより作成することができる。外側強調表示の場合、ユーザは「Windows NT 6.1」を強調表示することができ、内側強調表示の場合、ユーザは既に強調表示された「Windows NT 6.1」の「6.1」を強調表示することができる。外側強調表示はアプリケーション名に対応し、内側強調表示はバージョン番号に対応する。外側強調表示は、内側強調表示とは異なる色で現れることができる。強調表示は、ユーザが対話型ユーザインターフェイス上にいる場合、デバイスのディスプレイ上で例えばマウスまたはジェスチャーを用いることによって、実行することができる。
【0266】
ステップ5020において、ユーザが所望のデータフラグメントを強調表示(例えば、内側および外側強調表示)した後、ユーザインターフェイスデータモデル生成器は、同じレコードまたは残りのレコード内の対応するデータを自動的に強調表示することができる。例えば、ユーザインターフェイスデータモデル生成器は、レコード内の「6.1」のすべてのインスタンスを強調表示することができる。しかしながら、正規表現生成器は、データセット中のレコードから「Windows NT 6.0」のすべてのインスタンスを強調することもできる。したがって、結果において高い精度を保証するために、ユーザは陰性例を与えることができる。
【0267】
ステップ5030において、ユーザは陰性例を与えることができる。ユーザは、UIによって自動的に強調表示されたアプリケーションおよびバージョン番号のすべてを望むわけではないため、陰性例を与えてもよい。例えば、ユーザは、陰性例を与えるために「Windows NT 6.0」を選択してもよい。次いで、UIは「6.0」のバージョン番号を含むすべてのレコードを識別し得る。しかしながら、これは「6.0」バージョン番号を含む「Windows NT」以外のアプリケーションを識別する結果となり得る。
【0268】
ステップ5040において、UIは、陰性例からコンテキストを判断する。「6.0」のバージョン番号を含むすべてのバージョン番号を強調表示する代わりに、UIは、ユーザによって与えられた例からコンテキストを判断する。すなわち、UIは、データレコードからバージョン番号「6.0」を識別するだけでなく、陰性例を含むレコードを識別するときに、レコードからアプリケーション名「Windows NT」を識別する。したがって、UIは、陰性例を含むレコードを識別するときに単に「6.0」を含むレコードを検索する代わりに、陰性例を含むレコードを識別するときに「Windows NT 6.0」を検索する。
【0269】
陰性例からコンテキストを判断することは、
図51に関して以下でより詳細に説明される。
【0270】
ステップ5050において、データセット上の強調表示は、識別されたコンテキストに従って更新される。UIは、「6.0」だけではなく「Windows NT 6.0」含む語を強調し、それによって陰性例をより正確にする。
【0271】
生成される正規表現は、陰性例から識別されるコンテキストに基づいて更新され得る。
したがって、例示的な実施形態は、陰性例を与える、より正確な方法を提供する。コンテキストは、1つまたは複数の正規表現コードの異なるセットによって共有される最長共通サブシーケンスを判断するようLCSアルゴリズムを実行する前に判断される。与えられる例からコンテキストを判断することによって、より正確な正規表現を生成することができる。
【0272】
図51は、いくつかの例示的な実施形態による、陰性例からコンテキストを判断するための方法5100のフローチャートを示す。
図51は、
図50のステップ5040をより詳細に説明している。
【0273】
ステップ5110では、陰性例が与えられた後、複数の強調表示があるかどうか、およびそれらの複数の強調表示がネスト化されているかどうか(内側+外側強調表示)が判断される。
図51に示されるように、陰性例のコンテキストは、陰性例が与えられる(例えば、
図50のステップ5030)のでなければ、判断されない。
【0274】
ステップ5120において、コンテキストが、陰性例の左側のデータから取得される。具体的には、コンテキストは、陰性の強調表示が埋め込まれている場所の左側のデータから得られる。陰性の強調表示の埋め込まれた位置は、コンテキストを取得する前に判断され得る。このステップを実行するためのコードは、val eLookBehindStart = r.s.slice(0, r.highlightSpans.min).foldRight(es.slice(0, highlightSpanRange.start).reverse)((sElem,esLookBehind) => esLookBehind.dropWhile(_.cc == sElem.cc)).length.を含むことができる。
【0275】
ある例示的実施形態においては、最も遠い左のスパンが用いられる。eLookBehindStartは、左側歩行から(陰性の強調表示の左縁から)最も左のスパンのスパン番号を得る。
【0276】
ステップ5120は、反復プロセスであり得る。例えば、フィルタリングは、陰性の強調表示が埋め込まれる場所の左側の各スパンについて実行され得る。データセットのフラグメントの強調表示は、陰性例のスパンとマッチしないフラグメントの各スパンについて除去され得る。すべての反復において、考慮中のスパンのリストは短くされることになる。
【0277】
ステップ5130において、陰性例の右側のデータからコンテキストが取得される。具体的には、陰性の強調表示が埋め込まれている場所の右側のデータからコンテキストを取得する。本ステップに対するコードは、val eLookAheadEnd = r.s.slice(r.highlightSpans.max+1, r.s.length).foldLeft(es.slice(highlightSpanRange.end, es.length))((esLookAhead,sElem) => esLookAhead.dropWhile(_.cc == sElem.cc)).lengthを含むことができる。
【0278】
ある例示的実施形態においては、最も遠い右のスパンが用いられる。eLookAheadEndは、右側歩行から(陰性の強調表示の右縁から)最も右のスパンのスパン番号を得る。
【0279】
ステップ5130は、反復プロセスであり得る。例えば、フィルタリングは、陰性の強調表示が埋め込まれる場所の右側のフラグメントの各スパンに対して実行され得る。データセットのフラグメントの強調表示は、陰性例のスパンとマッチしないフラグメントごとに除去され得る。すべての反復において、考慮中のスパンのリストは短くされることになる。
【0280】
ステップ5140では、フラグメントのフィルタリングが実行される。陰性例の左側および右側のコンテキスト(たとえば、ステップ5120および5130で識別されるコンテキスト)に対応しない強調表示されたフラグメントが除去される。
【0281】
コンテキストは、陰性例の左側および右側で用いられるが、例えば、左側コンテキストデータのみまたは右側コンテキストデータのみが存在する場合、左側または右側コンテキストのみが、陰性例についてコンテキストを識別するために用いられてもよい。また、
図51で説明した例では、左側コンテキストを右側コンテキストの前に識別しているが、右側コンテキストを左側コンテキストの前に識別してもよい。さらに、上記の例は、陰性例に関してコンテキストを判断することに関して説明されているが、陽性例に関してコンテキストを判断することもできる。
【0282】
ネスト化手動モードにおいて陰性例に対応するコンテキストを検索するための例示的なコードは、以下のコードの一部または全部を含むことができる:
【0283】
【0284】
【0285】
VII.スパン上で最長共通サブシーケンスアルゴリズムを用いた正規表現生成
本明細書で説明されるさらなる態様は、1つまたは複数のデータ入力キャラクタシーケンスからのLCSアルゴリズムに基づく正規表現の生成に関するが、正規表現生成器110は、例のいくつかのみに存在するキャラクタを取り扱うこともできる。いくつかの入力例においてのみ存在するキャラクタを取り扱うために、正規表現コードの最小発生数および最大発生数の両方が追跡されるスパンが定義され得る。たとえば、「9pm」および「9 pm」のキャラクタシーケンス入力については、数字と「pm」テキストとの間に任意選択の空白が存在する。そのような場合、所与の入力例のすべてに一定のスパン(たとえば「9」と「pm」との間の単一の空白)が存在しないかもしれない場合、最小発生数はゼロに設定されてもよい。次いで、これらの最小数および最大数は、正規表現マルチプリシティ構文にマッピングされ得る。最長共通サブシーケンス(LCS)アルゴリズムを、すべての入力例に現れない「任意選択の」スパン(たとえばゼロの最小長さ)を含む、入力例から導出されたキャラクタのスパン上で実行してもよい。以下で説明するように、連続するスパンは、LCSアルゴリズムの実行中にマージされてもよい。そのような場合において、一緒に担持される追加の任意選択のスパンが連続して出現することに終わるとき、LCSアルゴリズムは、それらの任意選択のスパン上でも同様に再帰的に実行されてもよい。すなわち、LCSアルゴリズムの実行は、その性質上、再帰的であるが、これらの場合、LCSアルゴリズム全体を、再帰的に実行してもよい(たとえば、再帰的LCSアルゴリズムを再帰的に実行する)。他の技術的利点の中でもとりわけ、これは、より短く、よりクリーンで、より可読性のある正規表現生成を可能にし得る。たとえば、(am| am)(すなわち、amの前に任意選択の空白を有する)は、LCSアルゴリズムを再帰的に実行せずに生成されるかもしれず、一方、LCSアルゴリズムを再帰的に実行すると、正規表現は、より短く、よりクリーンな( ?am)として生成される結果となり得る。
【0286】
図18は、本明細書で説明する1つまたは複数の実施形態による、最長共通サブシーケンス(LCS)アルゴリズムを使用して、任意選択のスパンを含む正規表現を生成するための処理1800を示すフローチャートである。ステップ1801において、正規表現生成器110は、陽性の正規表現例に対応する1つまたは複数のキャラクタシーケンスを入力データとして受け取ってもよい。ステップ1802において、正規表現生成器110は、キャラクタシーケンスを正規表現コードに変換してもよい。したがって、ステップ1801およびステップ1802は、上述の、先の対応する例と同様でも同一でもよい。次いで、ステップ1802において、正規表現コードは、スパンデータ構造(またはスパン)にさらに変換され得る。上述したように、各スパンは、キャラクタクラスコード(たとえばレゲックスコード)および繰り返しカウント範囲(たとえば最小カウントおよび/または最大カウント)を記憶するデータ構造を含むことができる。ステップ1804において、正規表現生成器110は、LCSアルゴリズムを実行して、アルゴリズムへの入力としてスパンのセットを提供することができる。この例におけるLCSアルゴリズムの出力は、LCSアルゴリズムの出力内の任意選択のスパンに対応する、ゼロに等しい最小繰り返しカウント範囲を有する少なくとも1つのスパンを含むスパンの出力セットを含むことができる。最後に、ステップ1805において、正規表現生成器110は、任意選択のスパンを含むLCSアルゴリズムの出力の出力に基づいて正規表現を生成することができる。
【0287】
いくつかの実施形態では、判読性を改善し、かつ適切なレベルの制限を達成するために、正規表現生成器110は、単一スパン交代を用いてもよい。説明のため、LCSアルゴリズムがステップ1804で実行された後、その出力(すなわち、正規表現への最終的な変換前の中間出力)は、最小および最大繰り返しカウントを各々が有するスパンの連なりとすることができる。スパンのリストから正規表現への単純な直接変換は、(例えば、疑問符「?」修飾子コードを用いて)オプションとして印される複数の正規表現コードをもたらし得る。対照的に、場合によっては、交代を含む正規表現を生成することが望ましい場合があり、これは、括弧で閉じられた垂直方向のバーで区切られた代替物として表現され得る(https://www.regular-expressions.info/altemation.htmlを参照のこと)。例えば、時間に関するスパンの正規表現への直接的な変換は、
【0288】
【0289】
であり得る。しかしながら、この例では、正規表現生成器110は、その正規表現を、より判読性のある
【0290】
【0291】
に変換するよう構成され得る。その変換を実行するために、正規表現生成器110は、スパンの下にある元のストリングフラグメントを追跡し続けてもよく、すべての元のストリングフラグメントが少なくとも2つの所与の陽性例に現れる場合、それらの元のストリングフラグメントのリストが、(例えば、複数の任意選択の正規表現コードではなく、)垂直バーで区切られた代替物として出力されるべきである、と判断してもよい。
【0292】
図19は、最長共通サブシーケンス(LCS)アルゴリズムを用いた正規表現の生成を示す例示的な図であり、生成された正規表現は、任意選択のスパンを含む。この例では、2つの入力データキャラクタシーケンスは、「8am」および「9 pm」である。入力データキャラクタシーケンスは、上述したように、まず正規表現コードに変換され(ステップ1802)、次にスパンに変換される(ステップ1803)。スパンは、LCSアルゴリズムへの入力として提供され得(ステップ1804)、LCS出力は、任意選択のスパンZ
<0, 1>を含み、任意選択の単一の空白が数字および2文字のテキストシーケンスであり得ることを示す。すなわち、この例における上付き表記は、先行するコード(たとえばZ=空白)に適用される2つの数字、最小繰り返しカウント範囲(たとえば0)および最大繰り返しカウント範囲(たとえば1)を含み得る。最後に、正規表現は、LCSアルゴリズムの出力スパンに基づいて生成されてもよく、任意選択のスパンは、対応する正規表現コード「pZ
*」に変換されてもよい。
【0293】
いくつかの実施形態では、LCSアルゴリズムの実行中の正規表現生成器110による任意選択の空白の描出および使用は、性能および可読性に関してさらなる技術的利点を提供し得る。たとえば、正規表現を生成するとき、場合によっては、すべての所与の例の間で共通するキャラクタと、それらの例のうちのいくつかにおいてのみ存在するキャラクタとの両方を扱うことができることが望ましい。
【0294】
ある実施形態では、各スパンデータ構造について、カテゴリコードの最小発生数およびカテゴリコードの最大発生数の両方が追跡され得る。所与の例の1つまたは複数においてスパンが全く存在しない場合、最小はゼロに設定される。別の例として、綴りで示された月を扱うための正規表現を生成するために、最小数および最大数を、次いで、中括弧を伴う正規表現マルチプリシティ構文(たとえば[A-Za-z]{3,9})にマッピングしてもよい。
【0295】
いくつかの実施形態では、正規表現生成器110は、各スパンについて最小発生数および最大発生数を追跡してもよいが、追加の実施詳細を処理してもよい。たとえば、任意選択のスパンを取り扱うこととキャラクタのスパン上でLCSを実行することとの組み合わせの結果として、正規表現生成器110は、LCSアルゴリズムの実行を通して、連続的なスパンを検出し、マージするように構成され得る。加えて、一緒に担持されている任意の追加の任意選択のスパンが、時々、連続的に現れ、LCSアルゴリズムがそれら上でも同様に再帰的に実行されることが望ましい場合がある。たとえば、場合によっては、正規表現生成器110は、任意選択のシーケンス要素と必要なシーケンス要素(たとえばスパン)との間のより少ない遷移を好む(または重み付けする)よう、LCSアルゴリズムを修正および/または拡張する。たとえば、任意選択のスパンを一緒にグループ化することは、正規表現内で使用されなければならないグループ化括弧の数を最小にすることができ、したがって、生成された正規表現の人間の可読性を改善することができる。場合によっては、結果として生じる長さが、任意選択のスパンを考慮した後でさえ等しい場合、正規表現生成器110は、任意選択のスパンと必要なスパンとの間の遷移がより少ない代替物に対する選好を示してもよい。たとえば、場合によっては、ある標準LCSアルゴリズムは、その判断点でより長いシーケンスの選択を好むように実現され得る。しかしながら、選択肢が等しい長さのものである判断点では、構成選好が正規表現生成器110にプログラムされてもよい。1つのそのような構成選好は、たとえば、(任意選択のスパンが考慮されると)より短いシーケンスを好むことであり得る。したがって、この構成内のカスタマイズされたLCSは、(必要なスパンの)より長いシーケンスおよび(必要なスパンおよび任意選択のスパンの合計の)より短いシーケンスを同時に最適化することができる。
【0296】
いくつかの実施形態では、正規表現生成器110によるLCSアルゴリズムの実現例は、より短い出力を選択するよう構成され得る。上述のように、LCSアルゴリズムは、一般に、最長共通サブシーケンスを見つけるために用いられ得る。スパンを用いる正規表現の生成のために、LCSアルゴリズムを用いて、必要なシーケンス要素(本発明者らの場合、必要なスパン)の最長シーケンスを識別することができる。しかしながら、任意選択のスパンを含む実施形態では、LCSアルゴリズムは、共通シーケンス要素(例えばスパン)の数を最大化するという元の目標を、任意選択のスパンの数も同時に最小化しながら、保持するよう構成されてもよい。すなわち、元のLCSアルゴリズムにおいて、(共通シーケンス要素の数を最大化する観点から、)第1の例のストリングからシーケンス要素(例えばスパン)を消費するか、または第2の例のストリングからシーケンス要素を消費するかに関して、任意の選択を行うことができる。そのような場合、正規表現生成器110は、任意選択のスパンも考慮されると、より短い全体的な正規表現長をもたらすものを選択することができるLCSアルゴリズムの修正バージョンを実現してもよい。最終結果における正規表現が短いほど、判読性が向上する。
【0297】
さらに、いくつかの実施形態では、正規表現生成器110によるLCSアルゴリズムの実現は、より多くの数の必要なスパンを好むよう構成され得る。すなわち、選択権を与えられると、規則表現生成部110は、人間の判読性を向上させるために、より少ない任意選択のスパンを伴うLCS出力を選択してもよい。
【0298】
いくつかの実施形態では、生成された正規表現は、任意選択のスパンで正規表現を開始するのではなく、必要なスパン(これは、人間の読者に対する精神的拠り所としても働き得る)で開始する場合、より可読性があり得る。したがって、場合によっては、結果として得られる選択肢が等しい数の遷移を有する場合、より早期の非任意選択のスパンを有する選択肢が選択され得る。加えて、正規表現生成器110によって実行されるLCSアルゴリズムは、いくつかの実施形態では、正規表現内においてすべての空白(空白に対応する任意選択のスパンを含む)を右にプッシュするように構成されてもよい。すべての空白を右にプッシュすることによって、空白のスパンが一緒にマージされ得る機会が増大する可能性があり、これは、結果として生じる正規表現を単純化し、かつ可読性を改善し得る。このように、LCSアルゴリズムの実行中に、サブストリングの2つのセットが同じLCSを有すると判断された場合、サブストリングの2つのセットのうちの1つのセットを恣意的に選択する代わりに、可読性の改善を容易にするセットを選択してもよい。さらに、いくつかの実施形態では、LCSアルゴリズムは、可読性を改善するために、より多くの数の必要なスパンおよび/またはより少ない数の任意選択のスパンを好むように構成されてもよい。
【0299】
上述したように、場合によっては、陰性例は、任意選択のスパンに基づいてもよい。たとえば、ユーザは、「ab」および「a2b」の陽性例ならびに「a3b」の陰性例を提供してもよい。この場合、ある例示的な実現例は失敗し得、なぜならば、それは、必要とされるスパンのみに基づいて区別しようとし得、「2」の桁は任意選択のスパンにあるからである。そのような場合、ユーザは、失敗に対して警告されることができ、生成された正規表現を手動で修復するために、および/または陰性例の一部を除去するために、ユーザインターフェイスを介して選択肢を提供されることができる。
【0300】
いくつかの実施形態では、RESTサービスから戻って来るJSONの一部として返されるisSuccessが存在し得る。いくつかの実施形態では、生成されたレゲックスは、isSuccess=偽のとき、異なる色(たとえば赤色)となってもよい。
【0301】
上述したように、正規表現生成器110は、場合によっては、単一スパン交代を用いることができる。さらに、いくつかの実施形態では、正規表現生成器110は、マルチスパン交代を実行するよう構成され得る。すなわち、時として、行内のいくつかのスパンは、
【0302】
【0303】
として表される日付のような交代を形成し得る。これらを検出するために、正規表現生成器110は、まず、LCSアルゴリズムの出力からのどのスパンが、所与の入力された陽性例のすべてにおいて実際に用いられるかを発見してもよい。これらの共通のスパンは、最初のスパンの前のファントムスパンおよび最後のスパンの後のファントムスパンとともに、アンカーポイントを構成し得る。連続するアンカーポイントのすべての対(少なくとも1つの非アンカースパンも間に有する)の間には、渡らなければならない「ブリッジ」がある。次いで、ブリッジごとに、正規表現生成器110は、(a)入力された陽性例ごとにブリッジスパンによってカバーされるストリングフラグメントを判断し、(b)本明細書で説明される技法を用いて各ストリングフラグメントを正規表現に変換し、次いで、(c)上記から重複を除去し、それらを正規表現交代構文に入れてもよい。
【0304】
任意の順序で出現する交代内の代替物の代わりに、それらをアルファベット順にソートすることもできる。より決定論的な出力を有することによって、生成されたレゲックスは、ユーザがタイピングする各キャラクタとともにレゲックスがリアルタイムで生成される場合のタイピングの最中など、入力される例におけるわずかな変化に対しては、あまり変化しないかもしれない。さらに、いくつかの進歩したレゲックスインタプリタは、交代に遭遇すると、greedy定量化子が存在するかどうかに応じて、greedy対非greedy戦略を明示的に用いることができる。しかしながら、標準JavaおよびJavascriptAPIに見られるものなど、他のレゲックスインタプリタは、交代内の代替物を、単に、それらが現れる順序で試行してもよい。この共通して見出された弱点を補償するために、レゲックス生成は、最初に、交代内における、より長い代替物を出力してもよい。また、いかなる結びつきも断つために、アルファベット順を二次ソート基準として用いてもよい。
【0305】
いくつかの実施形態では、正規表現生成器は、少数の陽性例において現れるスパンを非greedyワイルドカード.*?まで隠す(collapse)ように構成することができる。すなわち、入力例が少しばかり饒舌になる場合がある。正規表現生成器は、各すべての単語およびそれらの特定の単語長にマッチしようとするよりも、スパンの数および元のフラグメントコンテンツにおける有意な分散を検出する場合に、ワイルドカード.*?を用いてもよい。いくつかの実施形態では、スパンが、ワイルドカード.*?にそのように隠すことなどに加わるために考慮されるためには、スパンは、以下の3つの条件のうちの1つを満たさなければならない。(1)スパンは、(厳密に)入力された例の総数の3分の1未満に関与してもよく、(2)スパンはSPACE(空白)スパンであり、(3)スパンに対する元のテキストフラグメントのすべてが希にしか発生せず、解に「一意の句読点」が存在する。「希に」とは、(厳密に)例の数の3分の2未満を意味し得る。「一意の句読点」とは、解のどこかにSYMBOL(記号)もしくはPUNCTUATION(句読点)スパンが存在すること、または解は、テキストの始まりに^で位置指定されるか、もしくはテキストの終わりに$で位置指定されることを意味する。
【0306】
場合によっては、eolワイルドカードが、強調表示の内側の隠されたワイルドカードに接するのを防いでもよい。すなわち、^または$が用いられる場合、ワイルドカードは反対側の終わりに現れることを想起されたい。例えば、^([A-Z]+).*?は、最初の単語とマッチする。ワイルドカードの無差別に隠すことは、レゲックスインタプリタにマッチさせる基準点となる具体的なものを何も与えないであろう、^(.*?).*?のような何かに終わる場合がある。これを解決するために、^が用いられ、キャプチャグループ内の最後のスパンが、ワイルドカード.*?にまで隠すことの一部である場合には、ワイルドカードに接する陰性キャラクタクラスに用いられるように、行の終わりワイルドカードが発せられる前の出力に、キャプチャグループの後の1つの追加のスパンが用いられる。同様に、$が用いられ、キャプチャグループ内の最初のスパンが、ワイルドカードにまで隠すことの一部である場合には、キャプチャグループの前の1つの追加のスパンが明示的に出力に用いられる。
【0307】
いくつかの実施形態では、記号および句読点は、例えば、強調表示エンドポイントが2つの句読点符号の間に来ることを可能にするようスパン可能ではもはやない場合がある。そのような例では、各句読点符号および各記号は、それ自体のPUNCTUATIONまたはSYMBOLスパンを取り上げ得る。他の場合では、「A.,S」は、3つのスパン、(元フラグメントAを伴う)LETTER、元フラグメント(.,)を伴うPUNCTUATION、および(元フラグメントSを伴う)LETTERをもたらすかもしれない。しかしながら、これらの実施形態では、4つのスパンが存在してもよい。この例では、コンマがコンマ分離リストにおけるデリミタとして機能する場合、特に、例ごとに複数のユーザ強調表示が存在する場合、役立ち得る。この例では、ドット(期間)は、余剰であり得、コンマと同じスパンにあるべきではない。
【0308】
さらに、タイプALPHANUMERICのスパンの場合、正規表現生成器は、いくつの文字スパンおよび数字スパンが置き換えられたかを追跡することができる。全体的な解における内側強調表示の始まりおよび終わりを判断するなど、アルゴリズムの多くの局面は、スパンインデックスによって位置の追跡を維持するので、複数のLETTERスパンおよびNUMBERスパンを単一のALPHANUMERICスパンと置換すると、これらのインデックスおよび位置は捨て去られる。したがって、置換前インデックスから置換後インデックスへのマッピングを維持することが必要となり得る。さらに、これらは、例ごとに追跡される必要があり、なぜならば、概して、各例が(例の100%に表されないスパンについて任意選択のスパンを含む)全体解からのすべてのインデックスを含むわけではないからである。クラスメンバnumPreSubstitutedSpansが、Spanクラスに追加され、タイプおよびデフォルト値は以下のとおりである:
numPreSubstitutedSpans:Map[ID,Int]=orig.flatMap(_.fromExamples).distinct.map((_,1)).toMap
いくつかの実施形態では、一般に利用可能なレゲックスAPIを用いて、キャプチャグループの終了オフセットを見つけることができる。たとえば、いくつかのユーザインターフェイスにおいて実現され得る置換コマンドに関連して説明されるように、ネスト化自動外側モードで置換コマンドを用いる場合、正規のキャプチャグループの後に追加のキャプチャグループが(全部で3つに対して、前のものと同様に)生成され得る。ユーザインターフェイスは、この置換を実行することができ、上記と同様に、ユーザインターフェイスにおいて完全なパーサを実現する必要を避けるために、キャプチャグループの右括弧を見つけるための技法を採用することができる。これは、キャプチャグループの左括弧を見つけることよりも複雑であり得、なぜならば、キャプチャグループの右括弧(<stufff>)を非キャプチャグループの右括弧(?:<stuff>)から区別する容易な方法がないためである。左括弧を区別することは、場合によっては、ルックアヘアッドを用いて?:を探すことにより、可能であり得る。いくつかの実施形態では、検索において、正規表現とマッチすることが知られている何かの例を必要とする技法が採用されてもよい。一緒に連結されたキャプチャされたグループを元の例のテキストと比較することによって、正規表現がキャプチャグループで隙間なく完全にカバーされていることが確認されてもよい。この技法のためのコードを以下に示す:
【0309】
【0310】
VIII.コンビナトリック最長共通サブシーケンスアルゴリズムを用いた正規表現生成
本明細書で説明されるさらなる態様は、正規表現生成器110によって実行されるLCSアルゴリズムが複数回実行されて、「正しい」正規表現(たとえば、すべての所与の陽性例と適切にマッチし、すべての所与の陰性例を適切に除外する正規表現)を生成し得る、および/または最も望ましいもしくは最適な正規表現が選択され得る複数の正しい正規表現を生成し得るコンビナトリック探索に関する。たとえば、コンビナトリック探索中、全LCSアルゴリズムおよび正規表現生成処理は、テキスト処理方向の異なる組み合わせ/置換、異なる位置指定、およびLCSアルゴリズムの他の異なる特性を含めて、複数回実行されてもよい。
【0311】
図20は、最長共通サブシーケンス(LCS)アルゴリズムのコンビナトリックな実行に基づいて正規表現を生成するための処理2000を示すフローチャートである。ステップ2001において、正規表現生成器110は、陽性例に対応する入力データキャラクタシーケンスを受け取り得る。ステップ2002において、正規表現生成器110は、LCSアルゴリズムのための実行技法のさまざまな異なる組み合わせに対して反復することができる。この例に示されるように、ステップ2002の各反復の間に、正規表現生成器110は、以下のLCSアルゴリズム実行パラメータ(または特性)、すなわち位置指定子(すなわち、位置指定なし、行の始まりで位置指定、行の終わりで位置指定)、処理方向(すなわち、右から左の順序、左から右の順序)、空白プッシュ(すなわち、空白プッシュを行うかまたは行わない)、およびスパンを隠す(collapse)(すなわち、スパンを隠すことを行うかまたは行わない)、の異なる組み合わせを選択し得る。ステップ2003において、LCSアルゴリズムは、入力データキャラクタシーケンスにおいて(または、入力キャラクタシーケンスが最初に変換された場合には正規表現コードにおいて)実行され、LCSアルゴリズムは、ステップ2002において選択されたパラメータ/特性に基づいて構成される。ステップ2004において、LCSアルゴリズムの出力は、正規表現生成器110によって格納されてもよく、アルゴリズムによってLCSが成功裡に識別されたか否か、および対応する正規表現の長さなどのデータを含み得る。ステップ2005において、処理は、LCSアルゴリズムがコンビナトリック探索のパラメータ/特性のすべての可能な組み合わせで実行されるまで、反復してもよい。最後に、ステップ2006において、LCSの1つからの特定の出力が、最適出力(たとえば、成功および正規表現長に基づく)として選択され、正規表現が、選択されたLCSアルゴリズム出力に基づいて生成され得る。
【0312】
さまざまな実施形態において、
図20を参照して上述したもののようなコンビナトリック探索は、パラメータ/特性のさまざまな異なる組み合わせに対して実行されてもよい。たとえば、幾つかの実施形態では、LCSアルゴリズムは、正規表現をテキストの始まりに位置指定するためにカレット記号^を使用し、および/または正規表現をテキストの終わりに位置指定するためにドル記号$を使用してもよい。場合によっては、そのような位置指定は、より短い正規表現を生成する結果となり得る。位置指定子は、ユーザがストリングの始まりおよび/または終わりに特定のパターンを発見することを望む場合に特に有用であり得る。たとえば、ユーザは始まりに製品名を望む場合がある。LCSアルゴリズムを、製品名を記述するさまざまな数の単語と混同するのを避けるために、下の画像に示されるように、カレットを使用して、レゲックスをストリングの始まりに位置指定することができる。
【0313】
さらに、いくつかの実施形態では、LCSアルゴリズムは、順方向または逆方向のいずれかである入力データを用いて実行され得る(または同様に、LCSアルゴリズムは、通常の順序で入力データを受け取り、次いでアルゴリズムを実行する前に順序を逆にするように構成されてもよい)。したがって、いくつかの実施形態では、入力キャラクタシーケンスまたはコードのペアに対して実行され得るLCSアルゴリズムのコンビナトリック探索は、以下のようであってもよい。
【0314】
1.通常(右から左へ)の順序、開始または終了に対して位置指定しない
2.通常(右から左へ)の順序、カレット^を使用して行の始まりに対して位置指定する
3.通常(右から左へ)の順序、ドル$を使用して行の終わりに対して位置指定する
4.逆(左から右へ)の順序、始まりまたは終わりに対して位置指定しない
5.逆(左から右へ)の順序、カレット^を使用して行の始まりに対して位置指定する
6.逆(左から右へ)の順序で、ドル$を使用して行の終わりに対して位置指定する
この例では、LCSの6つの実行のうち、最も短い結果の正規表現が選択されてもよい(ステップ2006)。
【0315】
幾つかの実施形態では、LCSアルゴリズムのコンビナトリック探索は、greedy量指定子「?」および非greedy量指定子「??」に対して反復してもよい。たとえば、デフォルトでは、任意選択のスパンが存在する場合、1つの疑問符が発せられ、たとえば、任意選択のミドルイニシャルを有するファーストネームおよびラストネームについては
【0316】
【0317】
である。greedy量指定子を使用する場合に満足のいく正規表現が見つからない場合には、コンビナトリック探索は、すべての疑問符量指定子を二重疑問符量指定子(たとえば
【0318】
【0319】
に置き換えることを試みることができる。二重疑問符は、非greedy量指定子に対応し、それは、マッチを見つけるために、下流の正規表現マッチャーにバックトラッキングモードに入るように命令することができる。
【0320】
加えて、いくつかの実施形態では、LCSアルゴリズムのコンビナトリック探索は、右側の空白を好むかどうかに対して反復することもできる。たとえば、上記のように、空白を右にプッシュするいくつかの実施形態において、たとえば、LCSアルゴリズムが、他の態様であれば等しい選択肢の恣意的な選択に直面する場合、空白スパンがともにマージされ、全体のスパンの数がより少なくなる結果となることを期待して、ある戦略が使用されてもよい。この特徴は、別の選択肢をコンビナトリック探索に追加し、すなわち、空白を右にプッシュするか、または判断を任意のままにする従来のLCSアプローチに従って実行するかのいずれかにするようにする。
【0321】
さらに、いくつかの実施形態では、LCSアルゴリズムのコンビナトリック探索はまた、元のストリング上でLCSを実行することによって、すべての例で共通のリテラルに対する走査/非走査に対して反復してもよい。そのような実施形態では、LCSアルゴリズムは、共通単語を識別し、整列するように構成され得る。本明細書で使用される場合、「共通単語」は、すべての陽性例において現れる単語を指し得る。いったん共通単語が識別されると、そのスパンタイプは、LETTERからWORDに変換されてもよく、次いで、LCSアルゴリズムを介する後続の実行は、それに自然に整列してもよい。
【0322】
したがって、以下の例においては、コンビナトリック探索は、完全なLCSアルゴリズムが実行される96回に達するように、いくつかのパラメータ/特性に対して反復してもよい。この例において反復されるべきさまざまなパラメータ/特性は以下のとおりである:
・位置指定子(3)(値=^, $, またはどちらもない)
・空白をプッシュ(2)(値=YesまたはNo)
・低濃度スパンのワイルドカードへの合体(2)(値=YesまたはNo)
・Greedy量指定子?(2)(値=YesまたはNo)
・LCSアルゴリズムの共通トークン上での整列(2)(値=YesまたはNo)
【0323】
【0324】
上述したように、この例では、完全なLCSアルゴリズムは96回(たとえば3*2*2*2*2*2=96)実行される。
【0325】
しかしながら、他の実施形態では、正規表現生成器110は、性能向上を提供してもよく、それによって、上記のリストのうちの最初の3つの特性のみ(位置指定子、空白のプッシュ、および低濃度スパンのワイルドカードへの合体)が、コンビナトリック探索に加わってもよい。これは、遙かにより少ない数の完全なLCSアルゴリズムが実行されることになる結果となり得る(たとえば3*2*2=12回)。そのような実施形態では、上記リストの最後の3つの特性(Greedy量指定子、LCSアルゴリズムの共通トークン上での整列、ならびに
【0326】
【0327】
)は、コンビナトリック探索に加わらないが、これらの特性は、最後に、個々におよび逐次、テストされ得る。そのような実施形態においては技術的利点が実現され得、なぜならば、探索空白をこのように分割することは、それでも、満足のいく正規表現が、性能において約8倍の高速化を伴って、見いだされる結果となり得るからである。
【0328】
説明すると、コンビナトリック探索の以下の例は、前の例よりも性能上の利点を提供し得る。この例では、コンビナトリック探索は、反復されるべき以下のパラメータ/特性に基づいて実行され得る:
・位置指定(3):BEGINNING_OF_LINE_MODE(行の始まりモード), END_OF_LINE_MODE(行の終わりモード), NO_EOL_MODE(行の終わりなしモード)
・順序/方向(2):右から左(通常)LCS対左から右(逆)LCS
・プッシュ(2):LCSアルゴリズム内で空白を右にプッシュしようとするか否か
・ワイルドカードに圧縮(2):時々発生するにすぎないスパンの長いシーケンスをワイルドカード.*?に圧縮しようとするか否か
この例におけるコンビナトリックは、完全なアルゴリズムを3*2*2*2=24回実行する結果となり得る。次いで、正規表現生成器110は、LCSアルゴリズムの24個の結果のうち最良のものを取り得、ここで、「最良」とは、(a)LCSアルゴリズムが成功したこと、および(b)最短正規表現が生成されたこと、を意味し得る。次いで、正規表現生成器110は、以下の3つの追加のタスクを実行することができる。
1.空白、句読点、または記号によって途切れない文字および数字のシーケンスを、
【0329】
【0330】
の生成されたレゲックスに対応する、ALPHANUMERICと呼ばれる新たなスパンタイプまで圧縮することを試みる。これは、クリックストリームログからのIPv6アドレスに見られる16進数に対して有用であり得る。
2.greedy量指定子?の代わりに非greedy量指定子??を使用することを試みる。
3.リテラル上で整列を試みる。
【0331】
A.スパン強調表示整列
陽性例または陰性例は、複数の強調表示を含むことができる。与えられる各例は、複数の強調表示(例えば、外側強調表示および内側強調表示)を含むことができる。したがって、例示的な実施形態は、複数の例が各々それら自体の強調表示を有する場合に、効率的かつ正確な処理のための方法を提供する。
【0332】
各例は、強調表示前、強調表示上、強調表示後に分解される。完全なアルゴリズムが各セット上で実行され、各セットは、強調表示前、強調表示上、および強調表示後を含む。複数の例上のユーザ強調表示は、与えられる例の間に大きなばらつき度があってもサポートされ、強調表示の失敗が回避されることになる。
【0333】
図52は、いくつかの例示的実施形態による、スパン強調表示整列に基づいて正規表現を生成するための
図5200を示す。
【0334】
図52は、2つのデータ例「Jane Doe」5210および「David Williams Jr.」5220に対する強調表示整列の実行を示す。
図52に示すように、各エントリの姓(例えば、DoeおよびWilliams)が強調表示されている。例えば、ユーザは、第1のレコードにおいて例として「Doe」を選択し、別のデータレコードにおいて例として「Williams」を選択してもよい。説明を容易にするために、2つの例を示す。しかしながら、複数のデータ例に対して、強調表示整列を実行することができる。
【0335】
図52に示す例では、レゲックスは、部分(例えば、3部分)で生成される。データレコードのデータセル内の情報に応じて、より多い部分またはより少ない部分があり得る。レゲックスは、「強調表示前」フラグメント、「強調表示上」フラグメント、および「強調表示後」フラグメントのすべてについて生成することができる。第1のレゲックス5231は「強調表示前」フラグメントに対して生成され、第2のレゲックス5232は「強調表示上」フラグメントに対して生成され、第3のレゲックス5233は「強調表示後」フラグメントに対して生成される。
【0336】
生成されたレグックスのスパン(すなわち、最終レゲックス生成前の中間結果)は、一緒に連結される。部分(例えば、強調表示前フラグメント、強調表示上フラグメント、および強調表示後フラグメント)についての生成されたレゲックスのスパンは、一緒に連結される。
【0337】
図53は、いくつかの例示的実施形態による、スパン強調表示整列を実行するための方法5300のフローチャートを示す。
図53のステップは、
図1および
図24に示す正規表現生成器のような正規表現生成器によって実行され得る。
【0338】
ステップ5310において、初期強調表示選択を受け付けることができる。例えば、ユーザは、データの列内の第1のレコードからテキストフラグメントを選択することができる。
図52に示す例では、ユーザは名前列において姓5210「Doe」を強調表示している。選択されたフラグメントは、「強調表示上」フラグメントとして識別することができる。選択されたフラグメントの前のフラグメントは、「強調表示前」フラグメントとして識別することができる。選択されたフラグメントの後のフラグメントは、「強調表示後」フラグメントとして識別することができる。
【0339】
ステップ5320で、第2の強調表示選択を受け付けることができる。例えば、ユーザは、最初の強調表示選択と同じデータ列(例えば、名前列)内の第2のレコードからテキストフラグメントを選択することができる。
図52に示す例では、名前列における姓5220「Williams」が強調表示されている。
図52に示す第2の例では、ユーザは、ある姓も強調表示している。選択されたフラグメントは「強調表示上」フラグメントとして識別することができる。選択されたフラグメントの前のフラグメントは、「強調表示前」フラグメントとして識別することができる。選択されたフラグメントの後のフラグメントは、「強調表示後」フラグメントとして識別することができる。ユーザは、複数の例を与えることを望む場合があり、したがって、ユーザは、追加の強調表示された選択を与えてもよい。しかしながら、与えられる例は、明確に整列しなくてもよい。
【0340】
ステップ5330では、フラグメントの整列が実行される。強調表示の前に生ずるフラグメントは一緒に整列され、強調表示後に生ずるフラグメントは一緒に整列され、強調表示後のフラグメントは一緒に整列される。したがって、
図52に示す例では、「Jane」を含むフラグメント5211および「David」を含むフラグメント5221は、強調表示されたフラグメントの前に生ずるため、整列される。フラグメント5210「Doe」およびフラグメント5220「Williams」は、強調表示上で生ずるので、一緒に整列される。キャラクタを含まないフラグメント5215、およびフラグメント5222は、強調表示後に生ずるので整列される。
【0341】
ステップ5340において、「強調表示前」フラグメントのためのレゲックスが生成される。例えば、第1のレゲックス5231が生成され得る。第1のレゲックス5231は、強調表示されたフラグメントの前のデータに基づいて、レゲックス生成器によって生成され得る。
【0342】
ステップ5350において、「強調表示上」フラグメントのためのレゲックスが生成される。例えば、第2のレゲックス5231が生成され得る。第2のレゲックス5232は、強調表示されたフラグメント内のデータに基づいて、レゲックス生成器によって生成され得る。
【0343】
ステップ5360において、「強調表示後」フラグメントのためのレゲックスが生成される。例えば、第3のレゲックス5231が生成され得る。第3のレゲックス5233は、強調表示されたフラグメントの後のデータに基づいて、レゲックス生成器によって生成され得る。
【0344】
図53に示すように、3つの部分5231,5232,5233においてレゲックスが生成される。「強調表示前」フラグメントに対して第1のレゲックス5231が生成され、「強調表示上」フラグメントに対して第2のレゲックス5232が生成され、次いで、「強調表示後」フラグメントに対して第3のレゲックス4233が生成される。第1、第2、および第3のレゲックスを生成する順序を説明したが、レゲックスを生成する順序は様々であり得る。さらに、3つの部分について説明しているが、データ例の、3つよりも多い部分について、強調表示を行ってもよい。
【0345】
ステップ5370では、3つのレゲックスに対するスパンが連結される。すなわち、結果として生じる3つのレグックスを一緒に連結する代わりに、スパン(すなわち、最終レゲックス生成前の中間結果)が一緒に連結される。
【0346】
ステップ5380において、連結された3つのスパンについて最長共通サブシーケンスが判断される。LCSは、強調表示前スパン、強調表示上スパン、および強調表示後スパン上でLCSアルゴリズムを実行した出力について、判断され得る。
【0347】
したがって、例示的な実施形態は、最長共通サブシーケンスが、同様に位置するデータに基づいて判断されるので、最長共通サブシーケンスを判断する、より正確な方法を提供する。
【0348】
ある例示的な実施形態は、英数字スパンも与える。内側強調表示の開始および終了を判断すること、スパンインデックスによって位置の追跡を維持すること、および複数の文字スパンおよび数字スパンを単一の英数字スパンに置換することにより、インデックスおよび位置を捨て去るすることができる。したがって、例示的な実施形態は、置換前インデックスから置換後インデックスへのマッピングを与える。英数字スパンのインデックスを1つまたは複数の数字および1つまたは複数の文字のインデックスに関連付けるマッピングが生成される。
【0349】
さらに、各例は全体解からのインデックスのすべてを含むわけではない場合があるので、マッピングは例ごとに追跡される。多数の予め置換されたスパンを識別することができる。
【0350】
図54は、いくつかの例示的実施形態による、スパンを追跡する方法5400のフローチャートを示す。具体的には、例示的な実施形態は、ある英数字スパンのうちのいくつの文字スパンおよびいくつの数字スパンが置換されるかを判断するための方法を提供する。
【0351】
ステップ5410では、1つまたは複数の文字スパンおよび1つまたは複数の数字スパンが、単一の英数字スパンで置換される。例えば、HTML16進数カラーコードは、文字スパンおよび数字スパンのような3つの異なるスパンの代わりに、単一の英数字スパンに置換することができる。<span style="color:#FF030A">BUY NOW!</span>のようなHTML16進数カラーコードでは、3つの異なるスパン(例えば、文字スパン、数字スパン、および別の文字スパン)の代わりに単一の英数字スパンFF030Aが用いられる。
【0352】
いくつかのデータフラグメント例は、16進数「桁」A~Fを含むことができる。この16進数桁は、hexコード内のどこにでも出現することができる。したがって、英数字スパンを用いて、そのようなデータフラグメント例についてのマッチを容易に識別することができる。
【0353】
ステップ5420では、1つまたは複数の文字スパンおよび1つまたは複数の数字スパンを置き換えた英数字スパンを含むデータフラグメント例が識別される。
【0354】
ステップ5430では、データフラグメント例について置換前インデックスおよび置換後インデックスを識別するマッピングが生成される。各データフラグメント例に対してマッピングが生成される。
【0355】
ステップ5440では、多数の予め置換されたスパンを識別することができる。
図55は、いくつかの例示的実施形態による、句読点スパンおよび記号スパンを表示するユーザインターフェイス5500を示す。
図55に示すように、ユーザは、指定された例5533を与えている。ユーザによって指定された例は、例5534および5535を含む。レゲックス5532は、指定された例5533に基づいて生成される。
【0356】
図55に示すように、記号および句読点は、強調表示エンドポイントが2つの句読点符号の間に来ることができるようスパン可能ではもはやない。
【0357】
各句読点符号および各記号は、それ自体の句読点スパンまたは記号スパンを有することができる。例えば、「A.,S」を含む例は、4つのスパン「A」「.」「,」および「S」を含むであろう。
【0358】
例示的な実施形態は、改善されたレゲックス生成美観を与える。具体的には、フラグメントは、それらを生じさせた例と関連付けることができる。フラグメントは、それらのフラグメントを生じさせた例に戻って関連付けられる。ある例示的な実施形態においては、フラグメントを生じさせた例は、例番号のリストに追加され得る。
【0359】
さらに、ある例示的な実施形態は、フラグメントを、それを生じさせた例と関連付ける、さらにより詳細な方法を提供する。例は、単にスパンオブジェクト全体としてではなく、特定のテキストフラグメントに結び付けることができる。このようにして、ユーザは、例番号のリストにおいて例番号を見るだけの代わりに、例それ自体を見ることができるので、ユーザは、どの例がフラグメントに結び付けられているかをより容易に判断することができる。
【0360】
例えば、以下の2つの入力例、すなわち例1:「a#s#」および例2:「a#」に関して、解スパンは、[(LETTER, [("a",[1,2])]), (SYMBOL, [("#",[1,2])]), (LETTER, ["s",[1]]), (SYMBOL, ["#",[1]])]を含むことができる。個々のフラグメントごとに利用可能な例番号を有することによって、アルゴリズムは、特定の例を処理するときに強調表示の開始および/または終了を(またはコンテキストを確立するよう強調表示を超えて)検索する際に、前後(左または右)に歩くことができる。各例は、スパンに分解することができ、それらスパンの、それ自体のスパンのセットへのLCSマージが実行される。
【0361】
別の2つの入力例、すなわち、例1:「8pm」および例2:「9am」に関して、解スパンは、[(NUMBER, [("8",[1]),("9",[2])]), (LETTER, [("pm",[1]),("am",[2])]), (PUNCTUATION, [(".",[1,2])])]を含むことができる。したがって、フラグメントは、それを生じさせた特定の例に関連付けられる。
【0362】
別の例では、レゲックス生成美観は、スパンは同じ組の例に由来しなければマージされないことを含み得る。マッチングを容易にするために、ある例示的な実施形態では、スパンは同じ組の例に由来しなければマージされなくてもよい。
【0363】
したがって、本発明の実施形態は、正確な正規表現を生成するための様々なメカニズムを提供する。正規表現をデータに適用して、ユーザが望むデータ結果を得ることができる。ユーザは、広範囲の検索やデータ操作を行うことなく、より容易かつ効率的に所望の情報を得ることができる。
【0364】
IX.ハードウェア概要
図21は、ある実施形態を実現するための分散型システム2100の簡略図を示す。図示される実施形態において、分散型システム2100は、1つ以上の通信ネットワーク2110を介してサーバ2112に結合された1つ以上のクライアントコンピューティングデバイス2102、2104、2106、および2108を含む。クライアントコンピューティングデバイス2102、2104、2106、および2108は、1つ以上のアプリケーションを実行するように構成され得る。
【0365】
さまざまな実施形態において、サーバ2112は、本開示に記載される正規表現の自動化された生成を可能にする1つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合され得る。たとえば、特定の実施形態では、サーバ2112は、クライアントデバイスから送信されたユーザ入力データを受信することができ、ユーザ入力データは、クライアントデバイスで表示されたユーザインターフェイスを介して、クライアントデバイスによって受信される。次いで、サーバ2112は、ユーザ入力データを、ユーザインターフェイスを介して表示するためにクライアントデバイスに送信される正規表現に変換することができる。
【0366】
特定の実施形態では、サーバ2112はまた、非仮想環境および仮想環境を含み得る他のサービスまたはソフトウェアアプリケーションを提供し得る。いくつかの実施形態では、これらのサービスは、クライアントコンピューティングデバイス2102、2104、2106および/または2108のユーザに対して、サービスとしてのソフトウェア(Software as a Service:SaaS)モデルのようなウェブベースのサービスまたはクラウドサービスとして提供され得る。クライアントコンピューティングデバイス2102、2104、2106および/または2108を操作するユーザは、1つ以上のクライアントアプリケーションを利用してサーバ2112とやり取りすることで、これらのコンポーネントによって提供されるサービスを利用し得る。
【0367】
図21に示される構成では、サーバ2112は、サーバ2112によって実行される機能を実現する1つ以上のコンポーネント2118、2120および2122を含み得る。これらのコンポーネントは、1つ以上のプロセッサ、ハードウェアコンポーネント、またはそれらの組合わせによって実行され得るソフトウェアコンポーネントを含み得る。分散型システム2100とは異なり得る多種多様なシステム構成が可能であることが認識されるはずである。したがって、
図21に示される実施形態は、実施形態のシステムを実現するための分散型システムの一例であり、限定するよう意図されたものではない。
【0368】
ユーザは、クライアントコンピューティングデバイス2102、2104、2106および/または2108を用いて、1つまたは複数のアプリケーションを実行し、それは、本開示の教示に従って正規表現を生成してもよい。クライアントデバイスは、当該クライアントデバイスのユーザが当該クライアントデバイスと対話することを可能にするインターフェイスを提供し得る。クライアントデバイスはまた、このインターフェイスを介してユーザに情報を出力してもよい。
図21は4つのクライアントコンピューティングデバイスだけを示しているが、任意の数のクライアントコンピューティングデバイスがサポートされ得る。
【0369】
クライアントデバイスは、ポータブルハンドヘルドデバイス、パーソナルコンピュータおよびラップトップのような汎用コンピュータ、ワークステーションコンピュータ、ウェアラブルデバイス、ゲームシステム、シンクライアント、各種メッセージングデバイス、センサまたはその他のセンシングデバイスなどの、さまざまな種類のコンピューティングシステムを含み得る。これらのコンピューティングデバイスは、さまざまな種類およびバージョンのソフトウェアアプリケーションおよびオペレーティングシステム(たとえばMicrosoft Windows(登録商標)、Apple Macintosh(登録商標)、UNIX(登録商標)またはUNIX系オペレーティングシステム、Linux(登録商標)またはLinux系オペレーティングシステム、たとえば、各種モバイルオペレーティングシステム(たとえばMicrosoft Windows Mobile(登録商標)、iOS(登録商標)、Windows Phone(登録商標)、Android(登録商標)、BlackBerry(登録商標)、Palm OS(登録商標))を含むGoogle Chrome(登録商標)OS)を含み得る。ポータブルハンドヘルドデバイスは、セルラーフォン、スマートフォン(たとえばiPhone(登録商標))、タブレット(たとえばiPad(登録商標))、携帯情報端末(PDA)などを含み得る。ウェアラブルデバイスは、Google Glass(登録商標)ヘッドマウントディスプレイおよびその他のデバイスを含み得る。ゲームシステムは、各種ハンドヘルドゲームデバイス、インターネット接続可能なゲームデバイス(たとえばKinect(登録商標)ジェスチャ入力デバイス付き/無しのMicrosoft Xbox(登録商標)ゲーム機、Sony PlayStation(登録商標)システム、Nintendo(登録商標)が提供する各種ゲームシステムなど)を含み得る。クライアントデバイスは、各種インターネット関連アプリケーション、通信アプリケーション(たとえばEメールアプリケーション、ショートメッセージサービス(SMS)アプリケーション)のような多種多様なアプリケーションを実行可能であってもよく、各種通信プロトコルを使用してもよい。
【0370】
ネットワーク2110は、利用可能な多様なプロトコルのうちのいずれかを用いてデータ通信をサポートできる、当該技術の当業者には周知のいずれかの種類のネットワークであればよく、上記プロトコルは、TCP/IP(伝送制御プロトコル/インターネットプロトコル)、SNA(システムネットワークアーキテクチャ)、IPX(インターネットパケット交換)、AppleTalk(登録商標)などを含むがこれらに限定されない。単に一例として、ネットワーク2110は、ローカルエリアネットワーク(LAN)、Ethernet(登録商標)に基づくネットワーク、トークンリング、ワイドエリアネットワーク(WAN)、インターネット、仮想ネットワーク、仮想プライベートネットワーク(VPN)、イントラネット、エクストラネット、公衆交換電話網(PSTN)、赤外線ネットワーク、無線ネットワーク(たとえば電気電子学会(IEEE)802.11プロトコルスイートのいずれかの下で動作する無線ネットワーク、Bluetooth(登録商標)および/または任意の他の無線プロトコル)、および/またはこれらおよび/または他のネットワークの任意の組み合わせを含み得る。
【0371】
サーバ2112は、1つ以上の汎用コンピュータ、専用サーバコンピュータ(一例としてPC(パーソナルコンピュータ)サーバ、UNIX(登録商標)サーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラックマウント型サーバなどを含む)、サーバファーム、サーバクラスタ、またはその他の適切な構成および/または組み合わせで構成されてもよい。サーバ2112は、仮想オペレーティングシステムを実行する1つ以上の仮想マシン、または仮想化を伴う他のコンピューティングアーキテクチャを含み得る。これはたとえば、サーバに対して仮想記憶装置を維持するように仮想化できる論理記憶装置の1つ以上のフレキシブルプールなどである。各種実施形態において、サーバ2112を、上記開示に記載の機能を提供する1つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合させてもよい。
【0372】
サーバ2112内のコンピューティングシステムは、上記オペレーティングシステムのうちのいずれかを含む1つ以上のオペレーティングシステム、および、市販されているサーバオペレーティングシステムを実行し得る。また、サーバ2112は、HTTP(ハイパーテキスト転送プロトコル)サーバ、FTP(ファイル転送プロトコル)サーバ、CGI(コモンゲートウェイインターフェイス)サーバ、JAVA(登録商標)サーバ、データベースサーバなどを含むさまざまなさらに他のサーバアプリケーションおよび/または中間層アプリケーションのうちのいずれかを実行し得る。例示的なデータベースサーバは、Oracle(登録商標)、Microsoft(登録商標)、Sybase(登録商標)、IBM(登録商標)(International Business Machines)などから市販されているものを含むが、それらに限定されない。
【0373】
いくつかの実現例において、サーバ2112は、クライアントコンピューティングデバイス2102、2104、2106および2108のユーザから受信したデータフィードおよび/またはイベントアップデートを解析および整理統合するための1つ以上のアプリケーションを含み得る。一例として、データフィードおよび/またはイベントアップデートは、センサデータアプリケーション、金融株式相場表示板、ネットワーク性能測定ツール(たとえば、ネットワークモニタリングおよびトラフィック管理アプリケーション)、クリックストリーム解析ツール、自動車交通モニタリングなどに関連するリアルタイムのイベントを含んでもよい、1つ以上の第三者情報源および連続データストリームから受信される、Twitter(登録商標)フィード、Facebook(登録商標)アップデートまたはリアルタイムのアップデートを含み得るが、それらに限定されない。サーバ2112は、データフィードおよび/またはリアルタイムのイベントをクライアントコンピューティングデバイス2102、2104、2106および2108の1つ以上の表示デバイスを介して表示するための1つ以上のアプリケーションも含み得る。
【0374】
分散型システム2100はまた、1つ以上のデータリポジトリ2114、2116を含み得る。特定の実施形態において、これらのデータリポジトリを用いてデータおよびその他の情報を格納することができる。たとえば、データリポジトリ2114、2116のうちの1つ以上を用いて、システムにより生成された正規表現とマッチする新たなデータの列のような情報を格納することができる。データリポジトリ2114、2116は、さまざまな場所に存在し得る。たとえば、サーバ2112が使用するデータリポジトリは、サーバ2112のローカル位置にあってもよく、またはサーバ2112から遠隔の位置にあってもよく、ネットワークベースの接続または専用接続を介してサーバ2112と通信する。データリポジトリ2114、2116は、異なる種類であってもよい。特定の実施形態において、サーバ2112が使用するデータリポジトリは、データベース、たとえば、Oracle Corporation(登録商標)および他の製造業者が提供するデータベースのようなリレーショナルデータベースであってもよい。これらのデータベースのうちの1つ以上を、SQLフォーマットのコマンドに応じて、データの格納、アップデート、およびデータベースとの間での取り出しを可能にするように適合させてもよい。
【0375】
特定の実施形態では、データリポジトリ2114、2116のうちの1つ以上は、アプリケーションデータを格納するためにアプリケーションによって用いられてもよい。アプリケーションが使用するデータリポジトリは、たとえば、キー値ストアリポジトリ、オブジェクトストアリポジトリ、またはファイルシステムがサポートする汎用ストレージリポジトリのようなさまざまな種類のものであってもよい。
【0376】
特定の実施形態において、本開示に記載される機能は、クラウド環境を介してサービスとして提供され得る。
図22は、特定の例に係る、各種サービスをクラウドサービスとして提供し得るクラウドベースのシステム環境の簡略化されたブロック図である。
図22に示される例において、クラウドインフラストラクチャシステム2202は、ユーザが1つ以上のクライアントコンピューティングデバイス2204、2206および2208を用いて要求し得る1つ以上のクラウドサービスを提供し得る。クラウドインフラストラクチャシステム2202は、サーバ2112に関して先に述べたものを含み得る1つ以上のコンピュータおよび/またはサーバを含み得る。クラウドインフラストラクチャシステム2202内のコンピュータは、汎用コンピュータ、専用サーバコンピュータ、サーバファーム、サーバクラスタ、またはその他任意の適切な配置および/または組み合わせとして編成され得る。
【0377】
ネットワーク2210は、クライアント2204、2206、および2208と、クラウドインフラストラクチャシステム2202との間におけるデータの通信および交換を容易にし得る。ネットワーク2210は、1つ以上のネットワークを含み得る。ネットワークは同じ種類であっても異なる種類であってもよい。ネットワーク2210は、通信を容易にするために、有線および/または無線プロトコルを含む、1つ以上の通信プロトコルをサポートし得る。
【0378】
図22に示される例は、クラウドインフラストラクチャシステムの一例にすぎず、限定を意図したものではない。なお、その他いくつかの例において、クラウドインフラストラクチャシステム2202が、
図22に示されるものよりも多くのコンポーネントもしくは少ないコンポーネントを有していてもよく、2つ以上のコンポーネントを組み合わせてもよく、または、異なる構成または配置のコンポーネントを有していてもよいことが、理解されるはずである。たとえば、
図22は3つのクライアントコンピューティングデバイスを示しているが、代替例においては、任意の数のクライアントコンピューティングデバイスがサポートされ得る。
【0379】
クラウドサービスという用語は一般に、サービスプロバイダのシステム(たとえばクラウドインフラストラクチャシステム2202)により、インターネット等の通信ネットワークを介してオンデマンドでユーザにとって利用可能にされるサービスを指すのに使用される。典型的に、パブリッククラウド環境では、クラウドサービスプロバイダのシステムを構成するサーバおよびシステムは、顧客自身のオンプレミスサーバおよびシステムとは異なる。クラウドサービスプロバイダのシステムは、クラウドサービスプロバイダによって管理される。よって、顧客は、別途ライセンス、サポート、またはハードウェアおよびソフトウェアリソースをサービスのために購入しなくても、クラウドサービスプロバイダが提供するクラウドサービスを利用できる。たとえば、クラウドサービスプロバイダのシステムはアプリケーションをホストし得るとともに、ユーザは、アプリケーションを実行するためにインフラストラクチャリソースを購入しなくても、インターネットを介してオンデマンドでアプリケーションをオーダーして使用し得る。クラウドサービスは、アプリケーション、リソースおよびサービスに対する容易でスケーラブルなアクセスを提供するように設計される。いくつかのプロバイダがクラウドサービスを提供する。たとえば、ミドルウェアサービス、データベースサービス、Java(登録商標)クラウドサービスなどのいくつかのクラウドサービスが、カリフォルニア州レッドウッド・ショアーズのOracle Corporation(登録商標)から提供される。
【0380】
特定の実施形態において、クラウドインフラストラクチャシステム2202は、ハイブリッドサービスモデルを含む、サービスとしてのソフトウェア(SaaS)モデル、サービスとしてのプラットフォーム(PaaS)モデル、サービスとしてのインフラストラクチャ(IaaS)モデルなどのさまざまなモデルを使用して、1つ以上のクラウドサービスを提供し得る。クラウドインフラストラクチャシステム2202は、各種クラウドサービスのプロビジョンを可能にする、アプリケーション、ミドルウェア、データベース、およびその他のリソースのスイートを含み得る。
【0381】
SaaSモデルは、アプリケーションまたはソフトウェアを、インターネットのような通信ネットワークを通して、顧客が基本となるアプリケーションのためのハードウェアまたはソフトウェアを購入しなくても、サービスとして顧客に配信することを可能にする。たとえば、SaaSモデルを用いることにより、クラウドインフラストラクチャシステム2202がホストするオンデマンドアプリケーションに顧客がアクセスできるようにし得る。Oracle Corporation(登録商標)が提供するSaaSサービスの例は、人的資源/資本管理のための各種サービス、カスタマー・リレーションシップ・マネジメント(CRM)、エンタープライズ・リソース・プランニング(ERP)、サプライチェーン・マネジメント(SCM)、エンタープライズ・パフォーマンス・マネジメント(EPM)、解析サービス、ソーシャルアプリケーションなどを含むがこれらに限定されない。
【0382】
IaaSモデルは一般に、インフラストラクチャリソース(たとえばサーバ、ストレージ、ハードウェアおよびネットワーキングリソース)を、クラウドサービスとして顧客に提供することにより、柔軟な計算およびストレージ機能を提供するために使用される。各種IaaSサービスがOracle Corporation(登録商標)から提供される。
【0383】
PaaSモデルは一般に、顧客が、環境リソースを調達、構築、または管理しなくても、アプリケーションおよびサービスを開発、実行、および管理することを可能にするプラットフォームおよび環境リソースをサービスとして提供するために使用される。Oracle Corporation(登録商標)が提供するPaaSサービスの例は、Oracle Java Cloud Service(JCS)、Oracle Database Cloud Service(DBCS)、データ管理クラウドサービス、各種アプリケーション開発ソリューションサービスなどを含むがこれらに限定されない。
【0384】
クラウドサービスは一般に、オンデマンドのセルフサービスベースで、サブスクリプションベースで、柔軟にスケーラブルで、信頼性が高く、可用性が高い、安全なやり方で提供される。たとえば、顧客は、サブスクリプションオーダーを介し、クラウドインフラストラクチャシステム2202が提供する1つ以上のサービスをオーダーしてもよい。次いで、クラウドインフラストラクチャシステム2202は、処理を実行することにより、顧客のサブスクリプションオーダーで要求されたサービスを提供する。クラウドインフラストラクチャシステム2202を、1つまたは複数のクラウドサービスを提供するように構成してもよい。
【0385】
クラウドインフラストラクチャシステム2202は、さまざまなデプロイメントモデルを介してクラウドサービスを提供し得る。パブリッククラウドモデルにおいて、クラウドインフラストラクチャシステム2202は、第三者クラウドサービスプロバイダによって所有されていてもよく、クラウドサービスは一般のパブリックカスタマーに提供される。このカスタマーは個人または企業であってもよい。プライベートクラウドモデルでは、クラウドインフラストラクチャシステム2202がある組織内で(たとえば企業組織内で)機能してもよく、サービスはこの組織内の顧客に提供される。たとえば、この顧客は、人事部、給与部などの企業のさまざまな部署であってもよく、企業内の個人であってもよい。コミュニティクラウドモデルでは、クラウドインフラストラクチャシステム2202および提供されるサービスは、関連コミュニティ内のさまざまな組織で共有されてもよい。上記モデルの混成モデルなどのその他各種モデルが用いられてもよい。
【0386】
クライアントコンピューティングデバイス2204、2206、および2208は、異なるタイプであってもよく(たとえば
図21に示されるデバイス2102、2104、2106および2108)、1つ以上のクライアントアプリケーションを操作可能であってもよい。ユーザは、クライアントデバイスを用いることにより、クラウドインフラストラクチャシステム2202が提供するサービスを要求することなど、クラウドインフラストラクチャシステム2202とのやり取りを行い得る。
【0387】
いくつかの実施形態において、クラウドインフラストラクチャシステム2202が、管理関連サービスを提供するために実行する処理は、ビッグデータ解析を含み得る。この解析は、大きなデータセットを使用し、解析し、処理することにより、このデータ内のさまざまな傾向、挙動、関係などを検出し可視化することを含み得る。この解析は、1つ以上のプロセッサが、場合によっては、データを並列に処理し、データを用いてシミュレーションを実行するなどして、実行してもよい。たとえば、自動化された態様で正規表現を決定するために、ビッグデータ解析がクラウドインフラストラクチャシステム2202によって実行されてもよい。この解析に使用されるデータは、構造化データ(たとえばデータベースに格納されたデータもしくは構造化モデルに従って構造化されたデータ)および/または非構造化データ(たとえばデータブロブ(blob)(binary large object:バイナリ・ラージ・オブジェクト))を含み得る。
【0388】
図22の例に示されるように、クラウドインフラストラクチャシステム2202は、クラウドインフラストラクチャシステム2202が提供する各種クラウドサービスのプロビジョンを容易にするために利用されるインフラストラクチャリソース2230を含み得る。インフラストラクチャリソース2230は、たとえば、処理リソース、ストレージまたはメモリリソース、ネットワーキングリソースなどを含み得る。
【0389】
特定の実施形態において、異なる顧客に対しクラウドインフラストラクチャシステム2202が提供する各種クラウドサービスをサポートするためのこれらのリソースを効率的にプロビジョニングし易くするために、リソースを、リソースのセットまたはリソースモジュール(「ポッド」とも処される)にまとめてもよい。各リソースモジュールまたはポッドは、1種類以上のリソースを予め一体化し最適化した組み合わせを含み得る。特定の実施形態において、異なるポッドを異なる種類のクラウドサービスに対して予めプロビジョニングしてもよい。たとえば、第1のポッドセットをデータベースサービスのためにプロビジョニングしてもよく、第1のポッドセット内のポッドと異なるリソースの組み合わせを含み得る第2のポッドセットをJavaサービスなどのためにプロビジョニングしてもよい。いくつかのサービスについて、これらのサービスをプロビジョニングするために割り当てられたリソースをサービス間で共有してもよい。
【0390】
クラウドインフラストラクチャシステム2202自体が、クラウドインフラストラクチャシステム2202の異なるコンポーネントによって共有されるとともにクラウドインフラストラクチャシステム2202によるサービスのプロビジョニングを容易にするサービス2232を、内部で使用してもよい。これらの内部共有サービスは、セキュリティ・アイデンティティサービス、統合サービス、エンタープライズリポジトリサービス、エンタープライズマネージャサービス、ウィルススキャン・ホワイトリストサービス、高可用性、バックアップリカバリサービス、クラウドサポートを可能にするサービス、Eメールサービス、通知サービス、ファイル転送サービスなどを含み得るが、これらに限定されない。
【0391】
クラウドインフラストラクチャシステム2202は複数のサブシステムを含み得る。これらのサブシステムは、ソフトウェア、またはハードウェア、またはそれらの組み合わせで実現され得る。
図22に示されるように、サブシステムは、クラウドインフラストラクチャシステム2202のユーザまたは顧客がクラウドインフラストラクチャシステム2202とやり取りすることを可能にするユーザインターフェイスサブシステム2212を含み得る。ユーザインターフェイスサブシステム2212は、ウェブインターフェイス2214、クラウドインフラストラクチャシステム2202が提供するクラウドサービスが宣伝広告され消費者による購入が可能なオンラインストアインターフェイス2216、およびその他のインターフェイス2218などの、各種異なるインターフェイスを含み得る。たとえば、顧客は、クライアントデバイスを用いて、クラウドインフラストラクチャシステム2202がインターフェイス2214、2216、および2218のうちの1つ以上を用いて提供する1つ以上のサービスを要求(サービス要求2234)してもよい。たとえば、顧客は、オンラインストアにアクセスし、クラウドインフラストラクチャシステム2202が提供するクラウドサービスをブラウズし、クラウドインフラストラクチャシステム2202が提供するとともに顧客が申し込むことを所望する1つ以上のサービスについてサブスクリプションオーダーを行い得る。このサービス要求は、顧客と、顧客が申しむことを所望する1つ以上のサービスを識別する情報を含んでいてもよい。たとえば、顧客は、クラウドインフラストラクチャシステム2202によって提供される正規表現の自動生成関連サービスの申し込み注文を出すことができる。
【0392】
図22に示される例のような特定の実施形態において、クラウドインフラストラクチャシステム2202は、新しいオーダーを処理するように構成されたオーダー管理サブシステム(order management subsystem:OMS)2220を含み得る。この処理の一部として、OMS2220は、既に作成されていなければ顧客のアカウントを作成し、要求されたサービスを顧客に提供するために顧客に対して課金するのに使用する課金および/またはアカウント情報を顧客から受け、顧客情報を検証し、検証後、顧客のためにこのオーダーを予約し、各種ワークフローを調整することにより、プロビジョニングのためにオーダーを準備するように、構成されてもよい。
【0393】
適切に妥当性確認がなされると、OMS2220は、処理、メモリ、およびネットワーキングリソースを含む、このオーダーのためのリソースをプロビジョニングするように構成されたオーダープロビジョニングサブシステム(OPS)2224を呼び出し得る。プロビジョニングは、オーダーのためのリソースを割り当てることと、顧客オーダーが要求するサービスを容易にするようにリソースを構成することとを含み得る。オーダーのためにリソースをプロビジョニングするやり方およびプロビジョニングされるリソースのタイプは、顧客がオーダーしたクラウドサービスのタイプに依存し得る。たとえば、あるワークフローに従うと、OPS2224を、要求されている特定のクラウドサービスを判断し、この特定のクラウドサービスのために予め構成されたであろうポッドの数を特定するように構成されてもよい。あるオーダーのために割り当てられるポッドの数は、要求されたサービスのサイズ/量/レベル/範囲に依存し得る。たとえば、割り当てるポッドの数は、サービスがサポートすべきユーザの数、サービスが要求されている期間などに基づいて決定してもよい。次に、割り当てられたポッドを、要求されたサービスを提供するために、要求している特定の顧客に合わせてカスタマイズしてもよい。
【0394】
クラウドインフラストラクチャシステム2202は、要求されたサービスがいつ使用できるようになるかを示すために、レスポンスまたは通知2244を、要求している顧客に送ってもよい。いくつかの例において、顧客が、要求したサービスの利益の使用および利用を開始できるようにする情報(たとえばリンク)を顧客に送信してもよい。特定の実施形態では、正規表現の自動生成関連サービスを要求する顧客に対して、応答は、実行されるとユーザインターフェイスの表示を引き起こす命令を含み得る。
【0395】
クラウドインフラストラクチャシステム2202はサービスを複数の顧客に提供し得る。各顧客ごとに、クラウドインフラストラクチャシステム2202は、顧客から受けた1つ以上のサブスクリプションオーダーに関連する情報を管理し、オーダーに関連する顧客データを維持し、要求されたサービスを顧客に提供する役割を果たす。また、クラウドインフラストラクチャシステム2202は、申し込まれたサービスの顧客による使用に関する使用統計を収集してもよい。たとえば、統計は、使用されたストレージの量、転送されたデータの量、ユーザの数、ならびにシステムアップタイムおよびシステムダウンタイムの量などについて、収集されてもよい。この使用情報を用いて顧客に課金してもよい。課金はたとえば月ごとに行ってもよい。
【0396】
クラウドインフラストラクチャシステム2202は、サービスを複数の顧客に並列に提供してもよい。クラウドインフラストラクチャシステム2202は、場合によっては著作権情報を含む、これらの顧客についての情報を格納してもよい。特定の実施形態において、クラウドインフラストラクチャシステム2202は、顧客の情報を管理するとともに管理される情報を分離することで、ある顧客に関する情報が別の顧客に関する情報からアクセスされないようにするように構成された、アイデンティティ管理サブシステム(IMS)2228を含む。IMS2228は、アイデンティティサービス、情報アクセス管理、認証および許可サービス、顧客のアイデンティティおよび役割ならびに関連する能力などを管理するためのサービスなどの、各種セキュリティ関連サービスを提供するように構成されてもよい。
【0397】
図23は、コンピュータシステム2300の例を示す。いくつかの実施形態では、コンピュータシステム2300は、上述のシステムのいずれかを実現するために用いられ得る。
図23に示されるように、コンピュータシステム2300は、バスサブシステム2302を介して他のいくつかのサブシステムと通信する処理サブシステム2304を含むさまざまなサブシステムを含む。これらの他のサブシステムは、処理加速ユニット2306、I/Oサブシステム2308、ストレージサブシステム2318、および通信サブシステム2324を含み得る。ストレージサブシステム2318は、記憶媒体2322およびシステムメモリ2310を含む非一時的なコンピュータ読取り可能記憶媒体を含み得る。
【0398】
バスサブシステム2302は、コンピュータシステム2300のさまざまなコンポーネントおよびサブシステムに意図されるように互いに通信させるための機構を提供する。バスサブシステム2302は単一のバスとして概略的に示されているが、バスサブシステムの代替例は複数のバスを利用してもよい。バスサブシステム2302は、さまざまなバスアーキテクチャのうちのいずれかを用いる、メモリバスまたはメモリコントローラ、周辺バス、ローカルバスなどを含むいくつかのタイプのバス構造のうちのいずれかであってもよい。たとえば、このようなアーキテクチャは、業界標準アーキテクチャ(Industry Standard Architecture:ISA)バス、マイクロチャネルアーキテクチャ(Micro Channel Architecture:MCA)バス、エンハンストISA(Enhanced ISA:EISA)バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション(Video Electronics Standards Association:VESA)ローカルバス、およびIEEE P1386.1規格に従って製造されるメザニンバスとして実現され得る周辺コンポーネントインターコネクト(Peripheral Component Interconnect:PCI)バスなどを含み得る。
【0399】
処理サブシステム2304は、コンピュータシステム2300の動作を制御し、1つ以上のプロセッサ、特定用途向け集積回路(ASIC)、またはフィールドプログラマブルゲートアレイ(FPGA)を含み得る。プロセッサは、シングルコアまたはマルチコアプロセッサを含み得る。コンピュータシステム2300の処理リソースを、1つ以上の処理ユニット2332、2334などに組織することができる。処理ユニットは、1つ以上のプロセッサ、同一のまたは異なるプロセッサからの1つ以上のコア、コアとプロセッサとの組み合わせ、またはコアとプロセッサとのその他の組み合わせを含み得る。いくつかの実施形態において、処理サブシステム2304は、グラフィックスプロセッサ、デジタル信号プロセッサ(DSP)などのような1つ以上の専用コプロセッサを含み得る。いくつかの実施形態では、処理サブシステム2304の処理ユニットの一部または全部は、特定用途向け集積回路(ASIC)またはフィールドプログラマブルゲートアレイ(FPGA)などのカスタマイズされた回路を使用し得る。
【0400】
いくつかの実施形態において、処理サブシステム2304内の処理ユニットは、システムメモリ2310またはコンピュータ読取り可能記憶媒体2322に格納された命令を実行し得る。さまざまな例において、処理ユニットはさまざまなプログラムまたはコード命令を実行するとともに、同時に実行する複数のプログラムまたはプロセスを維持し得る。任意の所定の時点で、実行されるべきプログラムコードの一部または全部は、システムメモリ2310および/または潜在的に1つ以上の記憶装置を含むコンピュータ読取り可能記憶媒体2322に常駐していてもよい。適切なプログラミングを介して、処理サブシステム2304は、上述のさまざまな機能を提供し得る。コンピュータシステム2300が1つ以上の仮想マシンを実行している例において、1つ以上の処理ユニットが各仮想マシンに割り当ててもよい。
【0401】
特定の実施形態において、コンピュータシステム2300によって実行される全体的な処理を加速するように、カスタマイズされた処理を実行するために、または処理サブシステム2304によって実行される処理の一部をオフロードするために、処理加速ユニット2306を任意に設けることができる。
【0402】
I/Oサブシステム2308は、コンピュータシステム2300に情報を入力するための、および/またはコンピュータシステム2300から、もしくはコンピュータシステム2300を介して、情報を出力するための、デバイスおよび機構を含むことができる。一般に、「入力デバイス」という語の使用は、コンピュータシステム2300に情報を入力するためのすべての考えられ得るタイプのデバイスおよび機構を含むよう意図される。ユーザインターフェイス入力デバイスは、たとえば、キーボード、マウスまたはトラックボールなどのポインティングデバイス、ディスプレイに組み込まれたタッチパッドまたはタッチスクリーン、スクロールホイール、クリックホイール、ダイアル、ボタン、スイッチ、キーパッド、音声コマンド認識システムを伴う音声入力デバイス、マイクロフォン、および他のタイプの入力デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、ユーザが入力デバイスを制御しそれと対話することを可能にするMicrosoft Kinect(登録商標)モーションセンサ、Microsoft Xbox(登録商標)360ゲームコントローラ、ジェスチャおよび音声コマンドを用いる入力を受信するためのインターフェイスを提供するデバイスなど、モーションセンシングおよび/またはジェスチャ認識デバイスも含んでもよい。ユーザインターフェイス入力デバイスは、ユーザから目の動き(たとえば、写真を撮っている間および/またはメニュー選択を行っている間の「まばたき」)を検出し、アイジェスチャを入力デバイス(たとえばGoogle Glass(登録商標))への入力として変換するGoogle Glass(登録商標)瞬き検出器などのアイジェスチャ認識デバイスも含んでもよい。また、ユーザインターフェイス入力デバイスは、ユーザが音声コマンドを介して音声認識システム(たとえばSiri(登録商標)ナビゲータ)と対話することを可能にする音声認識感知デバイスを含んでもよい。
【0403】
ユーザインターフェイス入力デバイスの他の例は、三次元(3D)マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、ならびにスピーカ、デジタルカメラ、デジタルカムコーダ、ポータブルメディアプレーヤ、ウェブカム、画像スキャナ、指紋スキャナ、バーコードリーダ3Dスキャナ、3Dプリンタ、レーザレンジファインダ、および視線追跡デバイスなどの聴覚/視覚デバイスも含んでもよいが、それらに限定されない。また、ユーザインターフェイス入力デバイスは、たとえば、コンピュータ断層撮影、磁気共鳴撮像、ポジションエミッショントモグラフィー、および医療用超音波検査デバイスなどの医療用画像化入力デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、たとえば、MIDIキーボード、デジタル楽器などの音声入力デバイスも含んでもよい。
【0404】
一般に、出力デバイスという語の使用は、コンピュータシステム2300からユーザまたは他のコンピュータに情報を出力するための考えられるすべてのタイプのデバイスおよび機構を含むことを意図している。ユーザインターフェイス出力デバイスは、ディスプレイサブシステム、インジケータライト、または音声出力デバイスなどのような非ビジュアルディスプレイなどを含んでもよい。ディスプレイサブシステムは、陰極線管(CRT)、液晶ディスプレイ(LCD)またはプラズマディスプレイを使うものなどのフラットパネルデバイス、計画デバイス、タッチスクリーンなどであってもよい。たとえば、ユーザインターフェイス出力デバイスは、モニタ、プリンタ、スピーカ、ヘッドフォン、自動車ナビゲーションシステム、プロッタ、音声出力デバイスおよびモデムなどの、テキスト、グラフィックスおよび音声/映像情報を視覚的に伝えるさまざまな表示デバイスを含んでもよいが、それらに限定されない。
【0405】
ストレージサブシステム2318は、コンピュータシステム2300によって使用される情報およびデータを格納するためのリポジトリまたはデータストアを提供する。ストレージサブシステム2318は、いくつかの例の機能を提供する基本的なプログラミングおよびデータ構成を格納するための有形の非一時的なコンピュータ読取り可能記憶媒体を提供する。処理サブシステム2304によって実行されると上述の機能を提供するソフトウェア(たとえばプログラム、コードモジュール、命令)が、ストレージサブシステム2318に格納されてもよい。ソフトウェアは、処理サブシステム2304の1つ以上の処理ユニットによって実行されてもよい。ストレージサブシステム2318はまた、本開示の教示に従って使用されるデータを格納するためのリポジトリを提供してもよい。
【0406】
ストレージサブシステム2318は、揮発性および不揮発性メモリデバイスを含む1つ以上の非一時的メモリデバイスを含み得る。
図23に示すように、ストレージサブシステム2318は、システムメモリ2310およびコンピュータ読取り可能記憶媒体2322を含む。システムメモリ2310は、プログラム実行中に命令およびデータを格納するための揮発性主ランダムアクセスメモリ(RAM)と、固定命令が格納される不揮発性読取り専用メモリ(ROM)またはフラッシュメモリとを含む、いくつかのメモリを含み得る。いくつかの実現例において、起動中などにコンピュータシステム2300内の要素間における情報の転送を助ける基本的なルーチンを含むベーシックインプット/アウトプットシステム(basic input/output system:BIOS)は、典型的には、ROMに格納されてもよい。典型的に、RAMは、処理サブシステム2304によって現在操作および実行されているデータおよび/またはプログラムモジュールを含む。いくつかの実現例において、システムメモリ2310は、スタティックランダムアクセスメモリ(SRAM)、ダイナミックランダムアクセスメモリ(DRAM)などのような複数の異なるタイプのメモリを含み得る。
【0407】
一例として、限定を伴うことなく、
図23に示されるように、システムメモリ2310は、ウェブブラウザ、中間層アプリケーション、リレーショナルデータベース管理システム(RDBMS)などのような各種アプリケーションを含み得る、実行中のアプリケーションプログラム2312、プログラムデータ2314、およびオペレーティングシステム2316を、ロードしてもよい。一例として、オペレーティングシステム2316は、Microsoft Windows(登録商標)、Apple Macintosh(登録商標)および/またはLinuxオペレーティングシステム、市販されているさまざまなUNIX(登録商標)またはUNIX系オペレーティングシステム(さまざまなGNU/Linuxオペレーティングシステム、Google Chrome(登録商標)OSなどを含むがそれらに限定されない)、および/または、iOS(登録商標)、Windows(登録商標) Phone、Android(登録商標) OS、BlackBerry(登録商標) OS、Palm(登録商標) OSオペレーティングシステムのようなさまざまなバージョンのモバイルオペレーティングシステムなどを、含み得る。
【0408】
コンピュータ読取り可能記憶媒体2322は、いくつかの例の機能を提供するプログラミングおよびデータ構成を格納することができる。コンピュータ読取り可能記憶媒体2322は、コンピュータシステム2300のための、コンピュータ読取り可能命令、データ構造、プログラムモジュール、および他のデータのストレージを提供することができる。処理サブシステム2304によって実行されると上記機能を提供するソフトウェア(プログラム、コードモジュール、命令)は、ストレージサブシステム2318に格納されてもよい。一例として、コンピュータ読取り可能記憶媒体2322は、ハードディスクドライブ、磁気ディスクドライブ、CD ROM、DVD、Blu-Ray(登録商標)ディスクなどの光ディスクドライブ、またはその他の光学媒体のような不揮発性メモリを含み得る。コンピュータ読取り可能記憶媒体2322は、Zip(登録商標)ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス(USB)フラッシュドライブ、セキュアデジタル(SD)カード、DVDディスク、デジタルビデオテープなどを含んでもよいが、それらに限定されない。コンピュータ読取り可能記憶媒体2322は、フラッシュメモリベースのSSD、エンタープライズフラッシュドライブ、ソリッドステートROMなどのような不揮発性メモリに基づくソリッドステートドライブ(SSD)、ソリッドステートRAM、ダイナミックRAM、スタティックRAMのような揮発性メモリに基づくSSD、DRAMベースのSSD、磁気抵抗RAM(MRAM)SSD、およびDRAMとフラッシュメモリベースのSSDとの組み合わせを使用するハイブリッドSSDも含み得る。
【0409】
特定の実施形態において、ストレージサブシステム2318は、コンピュータ読取り可能記憶媒体2322にさらに接続可能なコンピュータ読取り可能記憶媒体リーダ2320も含み得る。リーダ2320は、ディスク、フラッシュドライブなどのようなメモリデバイスからデータを受け、読取るように構成されてもよい。
【0410】
特定の実施形態において、コンピュータシステム2300は、処理およびメモリリソースの仮想化を含むがこれに限定されない仮想化技術をサポートし得る。たとえば、コンピュータシステム2300は、1つ以上の仮想マシンを実行するためのサポートを提供し得る。特定の実施形態において、コンピュータシステム2300は、仮想マシンの構成および管理を容易にするハイパーバイザなどのプログラムを実行し得る。各仮想マシンには、メモリ、演算(たとえばプロセッサ、コア)、I/O、およびネットワーキングリソースを割り当てられてもよい。各仮想マシンは通常、他の仮想マシンから独立して実行される。仮想マシンは、典型的には、コンピュータシステム2300によって実行される他の仮想マシンによって実行されるオペレーティングシステムと同じであり得るかまたは異なり得るそれ自体のオペレーティングシステムを実行する。したがって、潜在的に複数のオペレーティングシステムがコンピュータシステム2300によって同時に実行され得る。
【0411】
通信サブシステム2324は、他のコンピュータシステムおよびネットワークに対するインターフェイスを提供する。通信サブシステム2324は、他のシステムとコンピュータシステム2300との間のデータの送受のためのインターフェイスとして機能する。たとえば、通信サブシステム2324は、コンピュータシステム2300が、1つ以上のクライアントデバイスとの間で情報を送受信するために、インターネットを介して1つ以上のクライアントデバイスへの通信チャネルを確立することを可能にし得る。
【0412】
通信サブシステム2324は、有線および/または無線通信プロトコルの両方をサポートし得る。ある実施形態において、通信サブシステム2324は、(たとえば、セルラー電話技術、3G、4GもしくはEDGE(グローバル進化のための高速データレート)などの先進データネットワーク技術、WiFi(IEEE802.XXファミリー規格、もしくは他のモバイル通信技術、またはそれらのいずれかの組み合わせを用いて)無線音声および/またはデータネットワークにアクセスするための無線周波数(RF)送受信機コンポーネント、グローバルポジショニングシステム(GPS)受信機コンポーネント、および/または他のコンポーネントを含み得る。いくつかの実施形態において、通信サブシステム2324は、無線インターフェイスに加えてまたはその代わりに、有線ネットワーク接続(たとえばEthernet(登録商標))を提供し得る。
【0413】
通信サブシステム2324は、さまざまな形式でデータを受信および送信し得る。いくつかの実施形態において、通信サブシステム2324は、他の形式に加えて、構造化データフィードおよび/または非構造化データフィード2326、イベントストリーム2328、イベントアップデート2330などの形式で入力通信を受信してもよい。たとえば、通信サブシステム2324は、ソーシャルメディアネットワークおよび/またはTwitter(登録商標)フィード、Facebook(登録商標)アップデート、Rich Site Summary(RSS)フィードなどのウェブフィード、および/または1つ以上の第三者情報源からのリアルタイムアップデートなどのような他の通信サービスのユーザから、リアルタイムでデータフィード2326を受信(または送信)するように構成されてもよい。
【0414】
特定の実施形態において、通信サブシステム2324は、連続データストリームの形式でデータを受信するように構成されてもよく、当該連続データストリームは、明確な終端を持たない、本来は連続的または無限であり得るリアルタイムイベントのイベントストリーム2328および/またはイベントアップデート2330を含んでもよい。連続データを生成するアプリケーションの例としては、たとえば、センサデータアプリケーション、金融株式相場表示板、ネットワーク性能測定ツール(たとえばネットワークモニタリングおよびトラフィック管理アプリケーション)、クリックストリーム解析ツール、自動車交通モニタリングなどを挙げることができる。
【0415】
通信サブシステム2324は、コンピュータシステム2300からのデータを他のコンピュータシステムまたはネットワークに伝えるように構成されてもよい。このデータは、構造化および/または非構造化データフィード2326、イベントストリーム2328、イベントアップデート2330などのような各種異なる形式で、コンピュータシステム2300に結合された1つ以上のストリーミングデータソースコンピュータと通信し得る1つ以上のデータベースに、伝えられてもよい。
【0416】
コンピュータシステム2300は、ハンドヘルドポータブルデバイス(たとえばiPhone(登録商標)セルラーフォン、iPad(登録商標)コンピューティングタブレット、PDA)、ウェアラブルデバイス(たとえばGoogle Glass(登録商標)ヘッドマウントディスプレイ)、パーソナルコンピュータ、ワークステーション、メインフレーム、キオスク、サーバラック、またはその他のデータ処理システムを含む、さまざまなタイプのうちの1つであればよい。コンピュータおよびネットワークの性質が常に変化しているため、
図23に示されるコンピュータシステム2300の記載は、具体的な例として意図されているに過ぎない。
図23に示されるシステムよりも多くのコンポーネントまたは少ないコンポーネントを有するその他多くの構成が可能である。当業者であれば、本明細書における開示および教示に基づいて、さまざまな例を実現するための他の態様および/または方法を認識するだろう。
【0417】
特定の例について説明したが、さまざまな変形、変更、代替構成、および均等物が可能である。例は、特定のデータ処理環境内の動作に限定されず、複数のデータ処理環境内で自由に動作させることができる。さらに、例を特定の一連のトランザクションおよびステップを使用して説明したが、これが限定を意図しているのではないことは当業者には明らかであるはずである。いくつかのフローチャートは動作を逐次的プロセスとして説明しているが、これらの動作のうちの多くは並列または同時に実行されてもよい。加えて、動作の順序を再指定してもよい。プロセスは図に含まれない追加のステップを有し得る。上記の例の各種特徴および局面は、個別に使用されてもよく、またはともに使用されてもよい。
【0418】
さらに、特定の例をハードウェアとソフトウェアとの特定の組み合わせを用いて説明してきたが、ハードウェアとソフトウェアとの他の組み合わせも可能であることが理解されるはずである。特定の例は、ハードウェアでのみ、またはソフトウェアでのみ、またはそれらの組み合わせを用いて実現されてもよい。本明細書に記載されたさまざまなプロセスは、同じプロセッサまたは任意の組み合わせの異なるプロセッサ上で実現されてもよい。
【0419】
デバイス、システム、コンポーネントまたはモジュールが特定の動作または機能を実行するように構成されると記載されている場合、そのような構成は、たとえば、動作を実行するように電子回路を設計することにより、動作を実行するようにプログラミング可能な電子回路(マイクロプロセッサなど)をプログラミングすることにより、たとえば、非一時的なメモリ媒体に格納されたコードもしくは命令またはそれらの任意の組み合わせを実行するようにプログラミングされたコンピュータ命令もしくはコード、またはプロセッサもしくはコアを実行するなどにより、達成され得る。プロセスは、プロセス間通信のための従来の技術を含むがこれに限定されないさまざまな技術を使用して通信することができ、異なる対のプロセスは異なる技術を使用してもよく、同じ対のプロセスは異なる時間に異なる技術を使用してもよい。
【0420】
本開示では具体的な詳細を示すことにより例が十分に理解されるようにしている。しかしながら、例はこれらの具体的な詳細がなくとも実施し得るものである。たとえば、周知の回路、プロセス、アルゴリズム、構造、および技術は、例が曖昧にならないようにするために不必要な詳細事項なしで示している。本明細書は例示的な例のみを提供し、他の例の範囲、適用可能性、または構成を限定するよう意図されたものではない。むしろ、例の上記説明は、各種例を実現することを可能にする説明を当業者に提供する。要素の機能および構成の範囲内でさまざまな変更が可能である。
【0421】
したがって、明細書および図面は、限定的な意味ではなく例示的なものとみなされるべきである。しかしながら、請求項に記載されているより広範な精神および範囲から逸脱することなく、追加、削減、削除、ならびに他の修正および変更がこれらになされ得ることは明らかであろう。このように、具体的な例を説明してきたが、これらは限定を意図するものではない。さまざまな変形例および同等例は添付の特許請求の範囲内にある。
【0422】
上記の明細書では、本開示の局面についてその具体的な例を参照して説明しているが、本開示はそれに限定されるものではないということを当業者は認識するであろう。上記の開示のさまざまな特徴および局面は、個々にまたは一緒に用いられてもよい。さらに、例は、明細書のさらに広い精神および範囲から逸脱することなく、本明細書に記載されているものを超えて、さまざまな環境および用途で利用することができる。したがって、明細書および図面は、限定的ではなく例示的であると見なされるべきである。
【0423】
上記の説明では、例示の目的で、方法を特定の順序で記載した。代替の例では、方法は記載された順序とは異なる順序で実行されてもよいことを理解されたい。また、上記の方法は、ハードウェアコンポーネントによって実行されてもよいし、マシン実行可能命令であって、用いられると、そのような命令でプログラムされた汎用もしくは専用のプロセッサまたは論理回路などのマシンに方法を実行させてもよいマシン実行可能命令のシーケンスで具体化されてもよいことも理解されたい。これらのマシン実行可能命令は、CD-ROMもしくは他の種類の光ディスク、フロッピー(登録商標)ディスク、ROM、RAM、EPROM、EEPROM、磁気もしくは光学カード、フラッシュメモリのような、1つ以上の機械可読媒体、または電子命令を記憶するのに適した他の種類の機械可読媒体に保存できる。代替的に、これらの方法は、ハードウェアとソフトウェアとの組み合わせによって実行されてもよい。
【0424】
構成要素が特定の動作を実行するように構成されるとして記載されている場合、そのような構成は、たとえば、特定の動作を実行するよう電子回路もしくは他のハードウェアを設計すること、特定の動作を実行するようプログラミング可能な電子回路(たとえばマイクロプロセッサもしくは他の好適な電子回路)をプログラミングすること、またはそれらの任意の組み合わせによって達成されてもよい。
【0425】
本願の説明のための例をここに詳細に記載したが、本発明の概念は、他の態様で様々に具現化および採用され得ること、および特許請求の範囲は、先行技術によって制限される場合を除き、そのような変形を含むように解釈されるよう意図されることを理解されたい。
【0426】
構成要素が特定の動作を実行する「ように構成される」として記載されている場合、そのような構成は、たとえば、特定の動作を実行するよう電子回路もしくは他のハードウェアを設計すること、特定の動作を実行するようプログラミング可能な電子回路(たとえばマイクロプロセッサもしくは他の好適な電子回路)をプログラミングすること、またはそれらの任意の組み合わせによって達成されてもよい。