(57)【要約】【課題】少なくともいずれか一方が量化を示す正規表現を含む二つの文字列の編集距離を算出可能とすることを目的とする。【解決手段】二つの文字列の編集距離を算出するための文字列の編集に対応する有向枝の集合を含む有向グラフの生成方法は、前記文字列のうち、量化を示す正規表現の部分を、当該量化における繰り返し対象が量化子に応じた回数分繰り返す第一の文字列によって置換し、前記有向グラフにおいて、前記正規表現について置換が行われた部分を含む文字列が配列された軸に対して平行に、前記量化子に応じた有向枝を追加する処理をコンピュータが実行する。【選択図】図１０
2015018394.tif 000002
【特許請求の範囲】
【請求項１】
二つの文字列の編集距離を算出するための文字列の編集に対応する有向枝の集合を含む有向グラフの生成方法であって、
前記文字列のうち、量化を示す正規表現の部分を、当該量化における繰り返し対象が量化子に応じた回数分繰り返す第一の文字列によって置換し、
前記有向グラフにおいて、前記正規表現について置換が行われた部分を含む文字列が配列された軸に対して平行に、前記量化子に応じた有向枝を追加する、
処理をコンピュータが実行する有向グラフ生成方法。
【請求項２】
前記追加する処理は、前記第一の文字列の末尾から、前記第一の文字列内において最後の前記繰り返し対象の先頭への有向枝を追加する請求項１記載の有向グラフ生成方法。
【請求項３】
前記追加する処理は、前記第一の文字列において、前記量化子が示す下限の繰り返し回数に対応する前記繰り返し対象の末尾から、前記第一の文字列の直後までの有向枝を追加する請求項１又は２記載の有向グラフ生成方法。
【請求項４】
前記追加する処理は、前記量化子が０回以上の繰り返しを示す場合は、前記第一の文字列の直前から前記第一の文字列の直後までの有向枝を追加する請求項１乃至３いずれか一項記載の有向グラフ生成方法。
【請求項５】
前記置換する処理は、量化を示す正規表現の対象範囲の終了を示す記号の前に、当該正規表現の対象範囲の開始を示す記号及び前記繰り返し対象が前記量化子に応じた回数分繰り返す文字列を挿入し、
前記記号に対応するノードへの有向枝と、前記第一の文字列の中で最初の前記記号の前への文字の挿入に対応する有向枝と、前記第一の文字列の中で最後の前記記号の前への文字の挿入に対応する有向枝とを削除する処理を前記コンピュータが実行する請求項１乃至４いずれか一項記載の有向グラフ生成方法。
【請求項６】
二つの文字列の編集距離を算出するための文字列の編集に対応する有向枝の集合を含む有向グラフの生成をコンピュータに実行させる有向グラフ生成プログラムであって、
前記文字列のうち、量化を示す正規表現の部分を、当該量化における繰り返し対象が量化子に応じた回数分繰り返す第一の文字列によって置換し、
前記有向グラフにおいて、前記正規表現について置換が行われた部分を含む文字列が配列された軸に対して平行に、前記量化子に応じた有向枝を追加する、
処理をコンピュータに実行させる有向グラフ生成プログラム。
【請求項７】
二つの文字列の編集距離を算出するための文字列の編集に対応する有向枝の集合を含む有向グラフの生成装置であって、
前記文字列のうち、量化を示す正規表現の部分を、当該量化における繰り返し対象が量化子に応じた回数分繰り返す第一の文字列によって置換する置換部と、
前記有向グラフにおいて、前記正規表現について置換が行われた部分を含む文字列が対応付けられた軸に対して平行に、前記量化子に応じた有向枝を追加する追加部と、
を有する有向グラフ生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字列間の編集距離を算出するための有向グラフ生成方法、有向グラフ生成プログラム、及び有向グラフ生成装置に関する。
【背景技術】
【０００２】
文字列同士の類似性を判定するための指標として、編集距離が知られている。編集距離は、二つの文字列がどの程度異なっているかを示す数値である。具体的には、編集距離は、一方の文字列に対する文字の挿入、削除、又は置換等の編集によって、他方の文字列に一致させるために必要とする手順の最小回数である。編集距離が小さいほど、二つの文字列は類似していることになる。
【０００３】
図１は、二つの文字列の編集距離の算出手順の一例を示す図である。図１では、「ｋｉｔｔｅｎ」と「ｓｉｔｔｉｎｇ」との編集距離の算出手順が示されている。図１において、手順１は、「ｋｉｔｔｅｎ」の「ｋ」を「ｓ」に置換して、「ｓｉｔｔｅｎ」を生成する手順である。手順２は、「ｓｉｔｔｅｎ」の「ｅ」を「ｉ」に置換して、「ｓｉｔｔｉｎ」を生成する手順である。手順３は、「ｓｉｔｔｉｎ」の「ｎ」の後に、「ｇ」を挿入する手順である。手順３の終了時において、「ｋｉｔｔｅｎ」に対する編集結果は、「ｓｉｔｔｉｎｇ」に一致する。したがって、「ｋｉｔｔｅｎ」と「ｓｉｔｔｉｎｇ」との編集距離は、３ということになる。
【０００４】
なお、編集距離は、例えば、文字列検索やスペルチェック等に利用されている。
【０００５】
他方において、文字列群を一つの文字列で表現する方法の一つとして、正規表現を用いる方法が有る。例えば、正規表現［Ａ−Ｚ］は、英文字全てを示す。正規表現を用いれば、文字列群に含まれる全ての文字列を列挙することなく、文字列群を簡潔に表現することができる。
【０００６】
正規表現の主な要素として、選言と量化とが有る。選言とは、選択肢の中のいずれかの一つを示す表現である。選言には、「（」、「｜」、「）」の３つの記号が用いられる。例えば、（ＡＢ｜ａｂｃ）は、「ＡＢ」又は「ａｂｃ」を表現する。量化とは、文字又は文字列の繰り返しを示す表現である。量化には、「（」、「）」に加えて、「＊」、「＋」、又は「｛０，４｝」等の、繰り返しの許容回数を示す量化子が用いられる。「＊」は、０回以上の繰り返しを示す。「＋」は、１回以上の繰り返しを示す。「｛０，４｝」は、０〜４回の繰り返しを示す。例えば、（／ａ）＋は、「／ａ」、「／ａ／ａ」、「／ａ／ａ／ａ」、「／ａ／ａ／ａ／・・・」等を示す。ここで、「・・・」は、便宜上、任意回数の繰り返しを示す。
【０００７】
なお、正規表現は「パターン」とも呼ばれ、例えば、特定の文字列が、正規表現で表された文字列群に含まれるかどうかを判定するパターンマッチングにおいて用いられる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】国際公開第２００７／０９４０７８号
【非特許文献】
【０００９】
【非特許文献１】G.Navarro、NR-grep:A Fast and Flexible Pattern Matching Tool、Software: Practice and Experience、John Wiley & Sons、2001年、Vol.31  No.13、p.1265-1312
【発明の概要】
【発明が解決しようとする課題】
【００１０】
さて、一方が正規表現を含む二つの文字列、又はそれぞれが正規表現を含む二つの文字列について、編集距離を求めることができれば便利である。
【００１１】
しかしながら、特許文献１に記載された技術では、量化に対応するのが困難である。したがって、特許文献１に記載された技術では、一方が正規表現を含む二つの文字列の編集距離、及びそれぞれが正規表現を含む二つの文字列の編集距離の算出が困難である。
【００１２】
非特許文献１に記載された技術では、一方が正規表現を含む二つの文字列の編集距離の算出に関して処理効率が悪く、それぞれが正規表現を含む二つの文字列の編集距離の算出が困難である。
【００１３】
そこで、一側面では、少なくともいずれか一方が量化を示す正規表現を含む二つの文字列の編集距離を効率的に算出可能とすることを目的とする。
【課題を解決するための手段】
【００１４】
一つの案では、二つの文字列の編集距離を算出するための文字列の編集に対応する有向枝の集合を含む有向グラフの生成方法は、前記文字列のうち、量化を示す正規表現の部分を、当該量化における繰り返し対象が量化子に応じた回数分繰り返す第一の文字列によって置換し、前記有向グラフにおいて、前記正規表現について置換が行われた部分を含む文字列が配列された軸に対して平行に、前記量化子に応じた有向枝を追加する処理をコンピュータが実行する。
【発明の効果】
【００１５】
一態様によれば、少なくともいずれか一方が量化を示す正規表現を含む二つの文字列の編集距離を算出可能とすることを目的とする。
【図面の簡単な説明】
【００１６】
【図１】二つの文字列の編集距離の算出手順の一例を示す図である。
【図２】編集距離算出グラフの生成方法及び編集距離算出グラフを用いた編集距離の算出方法を説明するための図である。
【図３】正規表現を含む文字列に関する編集距離を説明するための図である。
【図４】本発明の実施の形態における編集距離算出グラフの生成に関する拡張手順の一例を示す図である。
【図５】本発明の実施の形態において一方の文字列が正規表現を含む場合に生成される編集距離算出グラフの例を示す図である。
【図６】本発明の実施の形態において一方の文字列が正規表現を含む場合の編集距離の算出例を示す図である。
【図７】本発明の実施の形態において双方の文字列が正規表現を含む場合に生成される編集距離算出グラフの例を示す図である。
【図８】本発明の実施の形態において双方の文字列が正規表現を含む場合の編集距離の算出例を示す図である。
【図９】本発明の実施の形態における編集距離算出装置のハードウェア構成例を示す図である。
【図１０】本発明の実施の形態における編集距離算出装置の機能構成例を示す図である。
【図１１】編集距離算出装置が実行する全体処理フローの処理手順の一例を説明するためのフローチャートである。
【図１２】グラフ要素型の一例を示す図である。
【図１３】グラフ要素配列の生成処理の処理手順の一例を説明するためのフローチャートである。
【図１４】対応グループの具体例を示す図である。
【図１５】グラフ要素配列の一例を示す図である。
【図１６】グラフ要素配列によって表現される編集距離算出グラフの一例を示す図である。
【図１７】グラフ要素配列に基づく編集距離算出グラフの各ノードの接続先と接続先までの距離との判定処理の処理手順の一例を説明するためのフローチャートである。
【図１８】挿入位置の一意性の確保を考慮しない場合の編集距離算出グラフの例を示す図である。
【図１９】挿入位置の一意性の確保を考慮しない場合の編集距離算出グラフに基づく編集距離の算出例を示す図である。
【図２０】挿入位置の一意性の確保を考慮した場合の編集距離算出グラフの例を示す図である。
【図２１】挿入位置の一意性の確保を考慮した場合の編集距離算出グラフに基づく編集距離の算出例を示す図である。
【図２２】ログデータ及び秘匿ルールの例を示す図である。
【図２３】ログデータ行からの秘匿ルールの作成例を示す図である。
【図２４】既存の秘匿ルールを利用した新たな秘匿ルールの作成例を示す図である。
【発明を実施するための形態】
【００１７】
以下、図面に基づいて本発明の実施の形態を説明する。本実施の形態では、算出するための非循環の有向グラフ（以下、「編集距離算出グラフ」という。）が、編集距離の算出に利用される。
【００１８】
図２は、編集距離算出グラフの生成方法及び編集距離算出グラフを用いた編集距離の算出方法を説明するための図である。図２において、（１）は、生成された編集距離算出グラフの例を示す。（２）は、当該編集距離算出グラフを用いて、編集距離を算出する例を示す。
【００１９】
編集距離算出グラフを生成するには、まず、比較対象の一方の文字列（以下「文字列Ｘ」という。）がＸ軸に沿って、他方の文字列（以下「文字列Ｙ」という。）がＹ軸に沿って配列される（ステップ１）。Ｘ軸上又はＹ軸上において、各文字列を構成する文字の配置位置は、編集距離算出グラフのノードを形成する。また、Ｘ軸に沿って配列された文字列を構成する文字ごとの、当該文字の配置位置をＸ座標値とし、Ｘ軸に垂直な仮想の直線と、Ｙ軸に沿って配列された文字列を構成する文字ごとの、当該文字の配置位置をＹ座標値とし、Ｙ軸に垂直な仮想の直線との交点もノードを形成する。
【００２０】
図２では、「ｋｉｔｔｅｎ」がＸ軸に配列された文字列Ｘであり、「ｓｉｔｔｉｎｇ」がＹ軸に配列された文字列Ｙである例が示されている。また、図１の編集距離算出グラフは、左上頂点を原点（０，０）とする。なお、本実施の形態において、「」は、文字列や記号等を視認し易くするために、当該文字列又は記号を囲むために付加される記号であり、説明対象の文字列又は記号等の構成要素ではない。また、本実施の形態において、文字列を構成する文字とは、厳密な意味において文字に限られず、記号又は符号等、文字列の構成要素となりうるものを含む。すなわち、後述される、正規表現に関して用いられる「（」、「｜」、「）」、及び量化子等の記号と、文字列を構成する記号とを区別するため、文字列を構成する記号については、文字として扱われる。また、文字列の構成要素又は文字列の要素という場合、文字列を構成する文字と、正規表現に関する記号との両方を含む。
【００２１】
続いて、水平方向又は垂直方向に隣り合うノード間を結ぶ有向枝（エッジ）が生成される（ステップ２）。各有向枝には、削除又は挿入に必要な距離（コスト）として、例えば、１が付与される。また、図２において、水平な有向枝は右向きであり、垂直な有向枝は下向きである。
【００２２】
なお、本実施の形態において、編集距離算出グラフは、便宜上、Ｘ軸及びＹ軸が直交するように示されているが、編集距離算出グラフにおいて、Ｘ軸及びＹ軸は直交していなくてもよい。また、Ｘ軸又はＹ軸に平行な各有向枝は、直線上に並んでいなくてもよい。したがって、Ｘ軸又はＹ軸に「平行」とは、必ずしも、図形的な平行を意味するものではない。例えば、Ｘ軸に平行な有向枝とは、始点ノードと終点ノードとのＹ座標値が変わらない有向枝をいう。Ｙ軸に平行な有向枝とは、始点ノードと終点ノードのＸ座標値が変わらない有向枝をいう。
【００２３】
続いて、ステップ２において生成されたノード（原点も含む）ごとに、当該ノード（ｘ，ｙ）からノード（ｘ＋１，ｙ＋１）へ向かう有向枝が生成される（ステップ３）。すなわち、図２において、斜めの線が当該有向枝に該当する。この時、ノード（ｘ，ｙ）において、文字列Ｘのｘ番目の文字と、文字列Ｙのｙ番目の文字とが一致すれば、ノード（ｘ−１，ｙ−１）からノード（ｘ，ｙ）への有向枝の距離は０とされ、一致しなければ、当該有向枝の距離は、置換の編集に必要な値（例えば、１）とされる。なお、図２において、破線は、距離が０であることを示す。実線は、距離が１であることを示す。
【００２４】
以上によって、図２（１）に示されるように、編集距離算出グラフは完成する。
【００２５】
編集距離算出グラフを用いて編集距離を求める際には、図２（２）に示されるように、原点（０，０）を始点とし、ノード（Ａの文字数，Ｂの文字数）を終点として、始点から終点までの最短経路が探索される。最短経路とは、始点から終点までの距離の総和が最小となる経路をいう。最短経路の探索には、ダイクストラ法やＡ＊法等、公知のグラフ最短経路探索法を用いることができる。
【００２６】
続いて、探索された最短経路に基づいて、編集距離が算出される。すなわち、最短経路の距離の総和が、編集距離となる。図２の例では、編集距離は、以下のように算出される。
【００２７】
１＋０＋０＋０＋１＋０＋１＝３
なお、最短経路を構成する有向枝において、文字列が配列された軸に平行な有向枝は、当該文字列を構成する文字のうち、当該有向枝の終点ノードに係る文字の削除を示す。文字列が配置された軸に垂直な有向枝は、当該文字列を構成する文字のうち、当該有向枝の終点ノードに係る文字の後に、他方の文字列において当該有向枝の終点ノードに係る文字を挿入することを示す。軸に対して斜めであって、距離が１の有向枝は、当該文字列を構成する文字のうち、当該有向枝の終点ノードに係る文字について、他方の文字列において当該有向枝の終点ノードに係る文字への置換を示す。軸に対して斜めであって、距離が０の有向枝は、当該文字列を構成する文字のうち、当該有向枝の終点ノードに係る文字の編集は不要であることを示す。
【００２８】
したがって、図２（２）に示される最短経路によれば、文字列Ｘを構成する各文字に対して、以下のような編集が必要であることが分かる。
・ｋをｓに置換
・ｉはそのまま
・ｔはそのまま
・ｔはそのまま
・ｅをｉに置換
・ｎはそのまま
・ｎの後にｇを挿入
なお、図２に示した、編集距離算出グラフの生成手順を、以下、「基本手順」という。本実施の形態では、比較対象の二つの文字列の少なくともいずれか一方に、正規表現が含まれる場合の編集距離の算出方法が開示される。本実施の形態において、正規表現を含む文字列の編集距離とは、正規表現が表現可能な文字列群のうち、比較対象に最も類似する文字列が選択された状態において算出される編集距離をいう。換言すれば、正規表現を含む文字列に関する編集距離は、正規表現によって表現可能な文字列群のうち、比較対象との編集距離が最小となる文字列と、比較対象との編集距離である。斯かる編集距離について具体例を用いて説明する。
【００２９】
図３は、正規表現を含む文字列に関する編集距離を説明するための図である。図３では、正規表現を含む文字列が「ａ（ｂｃ）＋ｅ」であり、「ａ（ｂｃ）＋ｅ」によって表現可能な文字列ごとに、文字列「ａｂｃｂｃｂｄｅ」との編集距離が示されている。図３の例では、「ａ（ｂｃ）＋ｅ」によって表現可能な文字列群のうち、「ａｂｃｂｃｂｃｅ」が選択された状態において、文字列「ａｂｃｂｃｂｄｅ」との編集距離が１となり、最小となる。したがって、本実施の形態において、正規表現を含む文字列「ａ（ｂｃ）＋ｅ」と、文字列「ａｂｃｂｃｂｄｅ」との編集距離は、１となる。
【００３０】
本実施の形態では、編集距離算出グラフを用いて正規表現を含む文字列に関する編集距離を算出するために、基本手順に対して、図４に示されるような拡張手順が追加される。
【００３１】
図４は、本発明の実施の形態における編集距離算出グラフの生成に関する拡張手順の一例を示す図である。図４では、比較対象の二つの文字列のうちの一方が、「ａｂｃ（−［ｄｅ］）＋：」である例が示されている。当該文字列（以下、「文字列Ａ」という。）において、「（−［ｄｅ］）＋」が正規表現に該当する。すなわち、「［ｄｅ］」は、選言を示し、「（ｄ｜ｅ）」を意味する。「（−［ｄｅ］）＋」は、量化を示し、「（−［ｄｅ］）」の１以上の繰り返しを意味する。
【００３２】
拡張手順においては、まず、文字列Ａにおける量化を示す正規表現について、当該量化における繰り返し対象の文字列（以下、「量化対象」という。）が量化子に応じた回数分繰り返す文字列によって置換される。その結果、量化に関する正規表現は文字列Ａから除去される。換言すれば、量化子に応じた個数分の量化対象の複製が、量化対象の後に挿入され、量化子が削除される。本実施の形態において、斯かる文字列の変形を「量化子の展開」という。
【００３３】
文字列Ａについて量化子の展開が行われることにより、文字列Ａは、「ａｂｃ（−［ｄｅ］（−［ｄｅ］）：」に変形される。以下、変形後の文字列を、「文字列Ａ'」という。当該変形では、「（−［ｄｅ］）」の括弧閉じ「）」の前に、「（−［ｄｅ］」の複製が挿入されている。このように、複製対象には、括弧開き「（」も含まれる。例えば、複製個数等の複製規則は、量化子によって異なるが、その詳細については後述される。
【００３４】
なお、量化子の展開は、正規表現に基づいて当然導かれる文字列操作ではない。後述より明らかなように、量化子の展開は、量化を示す正規表現を含む文字列について、編集距離算出グラフを用いた編集距離の算出を可能とするための工夫としての文字列操作である。
【００３５】
続いて、文字列Ａ'が、Ｘ軸又はＹ軸に沿って 配列される。図４（１）では、文字列Ａ'が、Ｘ軸に沿って配列された例が示されている。この際、「（」、「｜」、及び「）」等の正規表現に関する記号は、一つの要素として扱われる。具体的には、正規表現に関する記号の配置位置にも、他の文字と同様のノード（以下、「記号ノード」という。）が形成される。なお、図４（１）では、便宜上、既に基本手順は完了している状態が示されている。また、図４（１）において、「［ｄｅ］」については、一文字として扱われている。これは、編集距離算出グラフにおいて、全ての選択肢が一文字である選言は、一文字として扱われても、基本手順によって編集距離を算出可能であるからである。すなわち、基本手順において、置換に対応する有向枝を追加する際の対応する文字同士の比較において、全ての選択肢が一文字である選言のいずれかの選択肢が、他方の文字と一致すれば、当該有向枝の距離は０となる。一方、全ての選択肢が一文字である選言のいずれの選択肢も、他方の文字と一致しない場合、当該有向枝の距離は１となる。
【００３６】
続いて、記号ノードを終点ノードとする「置換」又は「削除」に関する有向枝（すなわち、斜めの有向枝又は水平な有向枝）が削除される。正規表現の記号は、文字ではないため、編集距離の算出において、当該記号の削除又は置換といった編集は行われないからである。当該有向枝の削除により、編集距離算出グラフは、例えば、図４（２）に示されるようになる。（２）においては、「（」又は「）」等の記号ノードを終点ノードとする斜めの有向枝及び水平の有向枝が削除されている。
【００３７】
続いて、（３）に示されるように、最初の「（」に対応する記号ノード、及び「）」の直前の文字「［ｄｅ］」に対応するノードについて、「挿入」に関する有向枝（すなわち、垂直な有向枝）が削除される。（３）の処理は、編集距離を算出する際に、最初の「（」の後、及び「）」の前に対する文字の挿入が制限されるようにするために実行される。斯かる制限の意義については、後述される。
【００３８】
続く（４）〜（６）では、選言又は量化を表現するために、「Ｘ軸又はＹ軸に平行で、距離が０である、記号ノードに向かう有向枝が追加される。
【００３９】
まず、（４）に示されるように、記号ノード「（」又は「）」に対して、当該記号ノードの直前のノードからの有向枝が追加される。
【００４０】
続いて、（５）及び（６）に示される処理が実行される。以下の説明において、量化対象の最後尾の要素を「量化対象最後尾要素」という。量化子の展開の結果、量化対象最後尾要素は、複数存在する。すなわち、「ａｂｃ（−［ｄｅ］（−［ｄｅ］）：」のうち、最初の「−［ｄｅ］」及び２番目の「−［ｄｅ］」は、それぞれ量化対象であり、それぞれの量化対象の「［ｄｅ］」は、量化対象最後尾要素である。
【００４１】
（５）及び（６）では、最後の量化対象最後尾要素から直前の「（」及び直後の「）」への有向枝、並びに最初の量化対象最後尾要素から「）」への有向枝が追加される。最後の量化対象最後尾要素の「［ｄｅ］」から直前の「（」への有向枝は、繰り返しを表現する有向枝である。最初の量化対象最後尾要素の「［ｄｅ］」から「）」への有向枝、繰り返しの終了（繰り返しからの脱出）を表現する有向枝である。また、最後の「［ｄｅ］」から「）」への有向枝も、繰り返しの終了の有向枝として追加されるが、当該有向枝は、（４）において追加される有向枝に一致する。
【００４２】
なお、図４の例では、該当する記号は存在しないが、「選言」については、「（」と各「｜」、各選言対象最後尾要素と「）」とを接続する有向枝が追加される。当該有向枝によって、選言が表現される。
【００４３】
以上の拡張手順が追加されることにより、例えば、図５に示されるような、編集距離算出グラフが生成される。図５は、本発明の実施の形態において一方の文字列が正規表現を含む場合に生成される編集距離算出グラフの例を示す図である。
【００４４】
図５では、文字列Ａと、文字列「ａｂｃ−ｄ−ｅ−ｆ：」（以下、「文字列Ｂ」という。）とが比較される場合に生成される編集距離算出グラフが示されている。文字列Ｂは、Ｙ軸に沿って配列されている。当該編集距離算出グラフが用いられて、図６に示されるように編集距離が算出される。
【００４５】
図６は、本発明の実施の形態において一方の文字列が正規表現を含む場合の編集距離の算出例を示す図である。
【００４６】
編集距離算出グラフを用いた編集距離の算出方法は、基本手順と共に説明した通りである。すなわち、拡張手順の追加は、編集距離算出グラフにおける最短経路の探索方法には影響しない。したがって、ダイクストラ法やＡ＊法等、公知のグラフ最短経路探索法を用いることができる。図６では、ダイクストラ法を用いて最短経路の探索が行われた例を示している。図６において探索された最短経路によれば、文字列Ａと文字列Ｂとの編集距離は、以下の通りである。
【００４７】
０＋０＋０＋０＋０＋０＋０＋０＋０＋０＋０＋１＋０＋０＝１
ここで、文字列Ａによって表現可能な文字列群のうち、文字列Ｂとの編集距離が最小となる文字列は、「ａｂｃ−ｄ−ｅ−ｅ：」である。「ａｂｃ−ｄ−ｅ−ｅ：」の最後の「ｅ」を「ｆ」に置換した文字列は、文字列Ｂに一致するため、文字列Ａと文字列Ｂとの編集距離は、１である。当該編集距離は、図６の方法によって算出される編集距離に一致する。すなわち、図５及び図６において説明した方法の妥当性が確認される。
【００４８】
なお、拡張手順において追加された有向枝に関しては、置換、削除、又は追加等の編集に関する意味は有さない。以下、拡張手順において追加される有向枝を、「拡張枝」という。
【００４９】
比較対象の二つの文字列の双方が、正規表現を含む場合、Ｘ軸方向及びＹ軸方向のそれぞれについて、拡張枝が追加されればよい。
【００５０】
例えば、図７は、本発明の実施の形態において双方の文字列が正規表現を含む場合に生成される編集距離算出グラフの例を示す図である。図７では、文字列「ａ（−［ｂｃｄ］）＋ｅ：」（以下、「文字列Ｃ」という。）と、文字列「ａ−（ｃ）＋ｅ：」（以下、「文字列Ｄ」という。）とが比較される場合に生成される編集距離算出グラフが示されている。文字列Ｃにおいて、「（−［ｂｃｄ］）＋」は、量化の正規表現に相当する。上記したように、当該正規表現について、量化子の展開が行われることにより、文字列Ｃは、「ａ（−［ｂｃｄ］（−［ｂｃｄ］）ｅ：」に変形される。以下、変形後の文字列を、「文字列Ｃ'」という。また、文字列Ｄにおいて、「（ｃ）＋」は、量化の正規表現に相当する。当該正規表現について、量化子の展開が行われることにより、文字列Ｄは、「ａ−（ｃ（ｃ））ｅ：」に変形される。以下、変形後の文字列を、「文字列Ｄ'」という。
【００５１】
図７に示される編集距離算出グラフでは、Ｘ軸に文字列Ｃ'が配列され、Ｙ軸に文字列Ｄ'が配列されている。文字列Ｄ'についても、拡張手順が適用されることにより、Ｙ軸に平行な拡張枝が追加される。なお、文字列Ｃ'に関する拡張枝はＸ軸に平行であり、文字列Ｄ'に関する拡張枝はＹ軸に平行であるため、双方の拡張枝は干渉することはない。干渉とは、例えば、一方の拡張枝が他方の拡張枝を変形させてしまうことである。図７に示される編集距離算出グラフに基づく編集距離の算出は、例えば、図８に示されるように行われる。
【００５２】
図８は、本発明の実施の形態において双方の文字列が正規表現を含む場合の編集距離の算出例を示す図である。双方の文字列が正規表現を含む場合も、編集距離算出グラフにおける最短経路の探索方法には変更は生じない。したがって、公知のグラフ最短経路探索法を用いることができる。図８では、ダイクストラ法を用いて経路探索が行われた例を示している。図８において探索された最短経路によれば、文字列Ｃと文字列Ｄとの編集距離は、以下の通りである。
【００５３】
０＋０＋０＋０＋０＋０＋０＋１＋０＋０＋０＋０＋０＋０＝１
ここで、文字列Ｃによって表現可能な文字列群と、文字列Ｄによって表現可能な文字列群との中で、両者の編集距離が最小となる文字列は、文字列Ｃに関して「ａ−ｃ−ｃｅ：」であり、文字列Ｄに関して「ａ−ｃｃｃｅ：」である。「ａ−ｃ−ｃｅ：」の２番目の「−」を「ｃ」に置換した文字列は、「ａ−ｃｃｃｅ：」に一致するため、文字列Ｃと文字列Ｄとの編集距離は、１である。当該編集距離は、図８の方法によって算出される編集距離に一致する。すなわち、図７及び図８において説明した方法の妥当性が確認される。
【００５４】
図６及び図８より明らかなように、正規表現によって表現可能な文字列は複数存在するが、拡張枝が追加された編集距離算出グラフにおいて、最短経路を求めることで、正規表現によって表現可能な文字列群の中から、編集距離の算出に適した文字列を抽出することができる。
【００５５】
続いて、以上に説明した編集距離算出グラフの生成、及び編集距離算出グラフを用いた編集距離の算出等を実行する編集距離算出装置１０について具体的に説明する。
【００５６】
図９は、本発明の実施の形態における編集距離算出装置のハードウェア構成例を示す図である。図９の編集距離算出装置１０は、それぞれバスＢで相互に接続されているドライブ装置１００、補助記憶装置１０２、メモリ装置１０３、ＣＰＵ１０４、及びインタフェース装置１０５等を有する。
【００５７】
編集距離算出装置１０での処理を実現するプログラムは、記録媒体１０１によって提供される。プログラムを記録した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。但し、プログラムのインストールは必ずしも記録媒体１０１より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置１０２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００５８】
メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。ＣＰＵ１０４は、メモリ装置１０３に格納されたプログラムに従って編集距離算出装置１０に係る機能を実行する。インタフェース装置１０５は、ネットワークに接続するためのインタフェースとして用いられる。
【００５９】
なお、記録媒体１０１の一例としては、ＣＤ−ＲＯＭ、ＤＶＤディスク、又はＵＳＢメモリ等の可搬型の記録媒体が挙げられる。また、補助記憶装置１０２の一例としては、ＨＤＤ（Hard Disk Drive）又はフラッシュメモリ等が挙げられる。記録媒体１０１及び補助記憶装置１０２のいずれについても、コンピュータ読み取り可能な記録媒体に相当する。
【００６０】
図１０は、本発明の実施の形態における編集距離算出装置の機能構成例を示す図である。図１０において、編集距離算出装置１０は、入力受付部１１、グラフ生成部１２、経路探索部１３、及び編集距離算出部１４等を有する。これら各部は、編集距離算出装置１０にインストールされたプログラムが、ＣＰＵ１０４に実行させる処理により実現される。
【００６１】
入力受付部１１は、比較対象とされる二つの文字列の入力を受け付ける。グラフ生成部１２は、比較対象とされた二つの文字列について、編集距離算出グラフを生成する。図１０において、グラフ生成部１２は、記号補完部１２１、対応グループ生成部１２２、量化子展開部１２３、及びグラフ要素生成部１２４等を含む。これら各部の機能については、処理手順の説明において明確にされる。経路探索部１３は、グラフ生成部１２によって生成される編集距離算出グラフの始点から終点までの最短経路を探索する。編集距離算出部１４は、経路探索部１３によって探索された最短経路に基づいて、比較対象とされた二つの文字列の編集距離を算出する。
【００６２】
以下、編集距離算出装置１０が実行する処理手順について説明する。図１１は、編集距離算出装置が実行する全体処理フローの処理手順の一例を説明するためのフローチャートである。
【００６３】
ステップＳ１０１において、入力受付部１１は、比較される二つの文字列の入力を受け付ける。続いて、グラフ生成部１２は、二つの文字列のそれぞれごとに、グラフ要素型の配列（以下、「グラフ要素配列」という。）を生成する（Ｓ１０２）。グラフ要素型とは、文字列の一構成要素を管理するためのデータ型をいう。
【００６４】
図１２は、グラフ要素型の一例を示す図である。図１２において、グラフ要素型は、属性として、要素、入力、出力、及び拡張枝等を含むクラス又は構造体である。
【００６５】
要素属性は、Ｓｔｒｉｎｇ型を有し、文字列の一構成要素の実体を格納する。実体とは、文字そのもの又は記号そのものである。なお、図１２では、便宜上、各属性のデータ型は、Ｊａｖａ（登録商標）言語におけるデータ型で表現されている。但し、このことは、本実施の形態における方法を実現するためのプログラムが、Ｊａｖａ（登録商標）言語によって記述される必要があることを意味するものではない。
【００６６】
入力属性は、ｂｏｏｌｅａｎ型を有し、要素属性に係る要素への削除に対応する有向枝及び置換に対応する有向枝の有無を示す。ｔｒｕｅは、当該要素への削除に対応する有向枝及び置換に対応する有向枝が有ることを示す。ｆａｌｓｅは、当該要素への削除に対応する有向枝及び置換に対応する有向枝が無いことを示す。
【００６７】
出力属性は、ｂｏｏｌｅａｎ型を有し、要素属性に係る要素からの、挿入に対応する有向枝の有無を示す。ｔｒｕｅは、当該要素からの、挿入に対応する有向枝が有ることを示す。ｆａｌｓｅは、当該要素からの、挿入に対応する有向枝が無いことを示す。
【００６８】
なお、削除に対応する有向枝及び置換に対応する有向枝の有無が一つの属性（入力属性）によって管理されるのは、本実施の形態では、或る要素に関して、削除に対応する有向枝の有無と置換に対応する有向枝の有無とは、常に一致するからである。また、挿入に対応する有向枝の有無が、入力属性とは別の属性（出力属性）によって管理されるのは、本実施の形態において、挿入に対応する有向枝の有無は、削除に対応する有向枝及び置換に対応する有向枝の有無に必ずしも一致しないからである。
【００６９】
拡張枝属性は、ＴｒｅｅＳｅｔ＜Ｉｎｔｅｇｅｒ＞型を有し、要素属性に係る要素からの拡張枝の接続先となる他の要素の位置を示す数値を格納する配列である。他の要素の位置を示す数値とは、グラフ要素配列を構成する配列要素の中で、拡張枝の接続元に対応する配列要素を起点とした、拡張枝の接続先の配列要素の位置をいう。例えば、拡張枝の接続元が、グラフ要素配列の１番目の配列要素であり、接続先が、当該配列の２番目の配列要素である場合、当該接続先の位置は、「１」となる。また、グラフ要素配列の６番目の配列要素であり、接続先が、当該配列の３番目の配列要素である場合、当該接続先の位置は、「−３」となる。なお、ＴｒｅｅＳｅｔ＜Ｉｎｔｅｇｅｒ＞型のデータは、数値をソートして格納する配列である。なお、配列要素とは、配列を構成する要素をいい、本実施の形態において、文字列を構成する要素と区別するために用いられる用語である。
【００７０】
ステップＳ１０２では、文字列ごとに、グラフ要素配列が生成され、各配列要素の要素属性には、各文字列における配列順に、当該文字列の構成要素が格納される。量化を含む文字列については、量化子の展開が行われた後の文字列が、グラフ要素配列に格納される。また、各配列の各要素の入力属性、出力属性、及び拡張枝属性に対して、各要素に応じた値が格納される。なお、二つのグラフ要素配列が生成されることにより、実質的に、編集距離算出グラフが生成されたことになる。二つのグラフ要素配列には、編集距離算出グラフを表現又は構成するために十分な情報が含まれているからである。
【００７１】
続いて、経路探索部１３は、二つのグラフ要素配列によって表現される編集距離算出グラフの始点から終点までの最短経路を探索する（Ｓ１０３）。続いて、編集距離算出部１４は、探索された最短経路に基づいて、比較対象の二つの文字列の編集距離を算出する（Ｓ１０４）。
【００７２】
続いて、ステップＳ１０２の詳細について説明する。図１３は、グラフ要素配列の生成処理の処理手順の一例を説明するためのフローチャートである。なお、図１３の処理は、比較対象とされた文字列ごとに実行される。図１３において処理対象とされている一つの文字列を、「対象文字列」という。
【００７３】
ステップＳ２０１において、グラフ生成部１２は、対象文字列に正規表現が含まれているか否かを判定する。正規表現が含まれているか否かは、例えば、所定形式の記述が対象文字列に含まれているか否かに基づいて判定されてもよい。
【００７４】
対象文字列に正規表現が含まれている場合（Ｓ２０１でＹｅｓ）、記号補完部１２１は、当該正規表現の対象範囲を示す括弧を補完する（Ｓ２０２）。例えば、「ａ＊」のように、文字の量化については、量化の対象範囲が明確であるため、括弧が省略されている場合がある。そのような場合、括弧の補完が行われ、「ａ＊」は、「（ａ）＊」に変形される。また、「（Ａ｜ＢＣ）＋」のように、一つの括弧が選言及び量化の双方の対象範囲を示している場合がある。このような場合、選言用の括弧と量化用の括弧とが区別可能なように、括弧の補完が行われる。例えば、「（Ａ｜ＢＣ）＋」は、「（（Ａ｜ＢＣ））＋」に変形される。「（（Ａ｜ＢＣ））＋」において、外側の括弧は、量化に対応する括弧であり、内側の括弧は、選言に対応する括弧である。なお、選言用の括弧と量化用の括弧とが区別可能なように括弧の補完が行われるのは、拡張枝の生成時において、選言用の括弧と量化用の括弧との扱いが異なるためである。
【００７５】
続いて、対応グループ生成部１２２は、対象文字列内における選言又は量化ごとに、当該選言又は当該量化に係る記号及び最後尾要素を対応付けてグループ化する（Ｓ２０３）。例えば、対象文字列内の量化ごとに、「（」、「）」、量化子、及び量化対象最後尾要素が対応付けられて一つのグループ（以下、「対応グループ」という。）とされる。また、対象文字列内の選言ごとに、「（」、「｜」、「）」、及び選言対象の最後尾要素が対応付けられて一つの対応グループとされる。選言対象の最後尾要素とは、各選択肢の末尾の要素をいう。
【００７６】
例えば、ステップＳ２０３の実行前において、対象文字列が、「（ａ（ｂｃ｜ｄｅｆ））｛１，｝」であったとする。この場合、量化に関しては、外側の括弧開き「（」及び外側の括弧閉じ「）」と、量化子｛１，｝と、外側の括弧内の最後尾要素である、内側の括弧閉じ「）」とが対応付けられ、一つの対応グループが生成される。内側の括弧閉じとは、ｆの直後の括弧閉じである。また、選言に関しては、内側の括弧開き「（」及び内側の括弧閉じ「）」と、選言の記号「｜」と、各選択肢の末尾である「ｃ」及び「ｆ」とが対応付けられ、一つの対応グループが生成される。対応付けの結果は、例えば、メモリ装置１０３に記憶される。なお、ステップＳ２０３における対応付けは、後段のステップにおいて、拡張枝の生成に利用される。
【００７７】
続いて、量化子展開部１２３は、対象文字列に含まれる量化子の展開を実行する（Ｓ２０４）。その結果、対象文字列から量化子は除去される。なお、量化子の展開の規則は、量化子に応じて異なる。
【００７８】
第１規則として、量化子が｛Ｘ｝（Ｘは自然数）である場合、すなわち、固定回数の繰り返しの場合、量化対象を囲む括弧開き「（」から量化対象の末尾までの文字列のＸ−１個の複製が、量化対象を囲む括弧閉じ「）」の前に挿入される。但し、Ｘ−１が、負の値になる場合（すなわち、Ｘ＝０の場合）、複製の個数は、１となる。なお、本実施の形態において、自然数には、０も含まれる。
【００７９】
例えば、「（ａｂ）｛３｝」の場合、量化対象を囲む括弧開きから量化対象の末尾までである「（ａｂ」の２個の複製が、量化対象を囲む括弧閉じの前に挿入される。その結果、「（ａｂ）｛３｝」は、「（ａｂ（ａｂ（ａｂ）」に変形される。換言すれば、「（ａｂ）｛３｝」は、「（ａｂ（ａｂ（ａｂ）」に置換される。
【００８０】
なお、第１規則並びに後述される第２規則及び第３規則のいずれの展開規則においても、対応グループに含まれる要素の複製は、当該対応グループに追加される。したがって、例えば、「（ａｂ）｛３｝」に関しては、ステップＳ２０３において、「（」、「）」、「ｂ」、及び「｛３｝」が、一つの対応グループを形成するが、量化子の展開によって、更に、二つの「（」と、二つの「ｂ」とが当該対応グループに追加される。
【００８１】
第２規則として、量化子が｛Ｘ，｝（Ｘは自然数）である場合、すなわち、Ｘ回を下限とする任意回数の繰り返し（Ｘ以上の繰り返し）の場合、Ｘ＝０であるか、Ｘ＞０であるかによって展開方法が異なる。なお、Ｘ＝０の場合、すなわち、｛０，｝は、量化子「＊」と同義である。また、Ｘ＝１の場合、すなわち、｛１，｝は、量化子「＋」と同義である。
【００８２】
Ｘ＝０である場合、量化対象を囲む括弧開き「（」から量化対象の末尾までの文字列の１個の複製が、量化対象を囲む括弧閉じ「）」の前に挿入される。
【００８３】
Ｘ＞０である場合、量化対象を囲む括弧開き「（」から量化対象の末尾までの文字列のＸ個の複製が、量化対象を囲む括弧閉じ「）」の前に挿入される。
【００８４】
例えば、「（ａｂ）｛２，｝」の場合、量化対象を囲む括弧開きから量化対象の末尾までである「（ａｂ」の２個の複製が、量化対象を囲む括弧閉じの前に挿入される。その結果、「（ａｂ）｛２，｝」は、「（ａｂ（ａｂ（ａｂ）」に変形される。
【００８５】
第３規則として、量化子が｛Ｘ，Ｙ｝（Ｘ、Ｙは自然数）である場合、すなわち、Ｘ回を下限としてＹ回を上限とする任意回数の繰り返し（Ｘ以上Ｙ以下の繰り返し）の場合、量化対象を囲む括弧開き「（」から量化対象の末尾までの文字列のＹ−１個の複製が、量化対象を囲む括弧閉じ「）」の前に挿入される。その結果、量化子の展開後の文字列には、当該量化子の繰り返しの上限分（Ｙ個分）の量化対象が含まれることになる。
【００８６】
例えば、「（ａｂ）｛２，４｝」の場合、量化対象を囲む括弧開き「（」から量化対象の末尾までである「（ａｂ」の３個の複製が、量化対象を囲む括弧閉じの前に挿入される。その結果、「（ａｂ）｛２，４｝」は、「（ａｂ（ａｂ（ａｂ（ａｂ）」に変形される。ここには、４個の量化対象が含まれる。
【００８７】
なお、図１３に関する以下の説明において、「対象文字列」とは、量化子の展開後の文字列をいう。
【００８８】
続いて、グラフ要素生成部１２４は、対象文字列の先頭に１文字分の空文字を追加する（Ｓ２０５）。当該空文字は、編集距離算出グラフの原点に対応する要素である。以下の説明において、「対象文字列」とは、空文字が追加された文字列をいう。
【００８９】
続いて、グラフ要素生成部１２４は、対象文字列を格納するためのグラフ要素配列を生成する（Ｓ２０６）。ここで、グラフ要素配列の配列長は、対象文字列長とされる。対象文字列長とは、空文字を含む対象文字列の要素数である。なお、ステップＳ２０６の段階において、グラフ要素配列の各配列要素の要素属性の値は空である。入力属性の値は、初期値であるｔｒｕｅである。出力属性の値は、初期値であるｔｒｕｅである。拡張枝属性の値は、空である。
【００９０】
続いて、グラフ要素生成部１２４は、グラフ要素配列に、対象文字列を代入する（Ｓ２０７）。すなわち、対象文字列のＮ番目の要素が、グラフ要素配列のＮ番目の配列要素の要素属性に代入される。１≦Ｎ≦対象文字列の要素数である。
【００９１】
続いて、グラフ要素生成部１２４は、グラフ要素配列の２番目以降の各配列要素（原点に対応する配列要素を除く各配列要素）について、入力属性、出力属性、及び拡張枝属性の値を、当該要素に代入された文字又は記号に応じて更新する（Ｓ２０８）。
【００９２】
量化対象を囲む括弧開き「（」が代入された配列要素の入力属性は、ｆａｌｓｅに更新される。当該更新は、図４の（２）の処理に対応する。当該「（」が、対応グループ内において先頭の「（」である場合、当該配列要素の出力属性は、ｆａｌｓｅに更新される。当該更新は、図４の（３）の処理に対応する。当該配列要素に係る「（」が、対応グループ内において先頭の「（」であり、かつ、当該対応グループ内の量化子が、「｛０，｝」又は「｛０，Ｘ｝」である場合、当該配列要素の拡張枝属性には、当該対応グループ内の「）」の位置が代入される。すなわち、量化対象を１回も繰り返さない場合（量化対象を経由しない場合）の拡張枝が、拡張枝属性に代入される。
【００９３】
量化対象を囲む括弧閉じ「）」が代入された配列要素の入力属性は、ｆａｌｓｅに更新される。当該更新は、図４の（２）の処理に対応する。
【００９４】
量化対象最後尾要素が代入された配列要素の出力属性は、ｆａｌｓｅに更新される。当該更新は、図４の（３）の処理に対応する。なお、当該量化対象最後尾要素には、ステップＳ２０４において複製された量化対象最後尾要素も含まれる。当該量化対象最後尾要素が属する対応グループ内の量化子が、｛Ｘ，｝（Ｘ≧０）であり、かつ、当該量化対象最後尾要素が、当該対応グループ内において最後の量化対象最後尾要素である場合、当該対応グループ内において、当該量化対象最後尾要素の直前の「（」の位置が、当該配列要素の拡張枝属性に代入される。すなわち、繰り返しを表現する拡張枝が、拡張枝属性に代入される。なお、対応グループ内において最後の量化対象最後尾要素とは、Ｘ＝０の場合であれば、当該対応グループ内において２番目の量化対象最後尾要素であり、Ｘ＞０の場合であれば、当該対応グループ内においてＸ＋１番目の量化対象最後尾要素である。
【００９５】
又は、当該量化対象最後尾要素が属する対応グループ内の量化子が、｛Ｘ，｝（Ｘ＝０）であり、当該量化対象最後尾要素が、当該対応グループ内において２個目の量化対象最後尾要素である場合、若しくは、当該量化対象最後尾要素が、｛Ｘ，｝（Ｘ＞０）であり、当該量化対象最後尾要素が、当該対応グループ内においてＸ個目の量化対象最後尾要素である場合、当該対応グループ内における「）」の位置が、当該配列属性の拡張枝属性に代入される。すなわち、下限回数の繰り返し後に繰り返しを終了するための経路が拡張枝属性に追加される。
【００９６】
又は、量化子が、｛Ｘ，Ｙ｝であり、かつ、当該量化対象最後尾要素が、当該対応グループ内においてＸ個目以降の量化対象最後尾要素である場合、当該対応グループ内における「）」の位置が、当該配列属性の拡張枝属性に代入される。すなわち、下限回数の繰り返し後に繰り返しを終了するための経路が拡張枝属性に追加される。
【００９７】
なお、量化対象最後尾要素が代入された配列要素の拡張枝属性について整理すると、量化子が｛Ｘ｝の場合や｛Ｘ，Ｙ｝の場合のように、繰り返し回数の上限が明らかである場合、繰り返しを表現する拡張枝は代入されない。換言すれば、編集距離算出グラフにおいて、当該拡張枝は生成されない。量化子が｛Ｘ｝の場合や｛Ｘ，Ｙ｝の場合、量化子の展開の結果、量化対象の複製及び複製元の個数が、繰り返しの上限に一致しているため、繰り返しを表現する拡張枝が無くても、上限分の繰り返し経路を確保可能であるからである。一方、量化子が｛Ｘ，｝である場合、すなわち、繰り返し回数に上限が無い場合、当該拡張枝属性には、繰り返しを表現する拡張枝が代入される。上限の無い繰り返しの場合、量化子の展開により、量化対象の複製及び複製元の個数を、上限に一致させることができないため、当該拡張枝によって、上限の無い繰り返しを表現する必要が有るからである。
【００９８】
選言対象を囲む括弧開き「（」が代入された配列要素の入力属性及び出力属性は、ｆａｌｓｅに更新される。入力属性に関する当該更新は、図４の（２）の処理に対応する。出力属性に関する当該更新は、図４の（３）の処理に対応する。当該配列要素の拡張枝属性には、当該「（」が属する対応グループ内の全ての「｜」の位置が代入される。すなわち、各選択肢への経路が拡張枝属性に追加される。
【００９９】
選言対象を囲む括弧閉じ「）」が代入された配列要素の入力属性は、ｆａｌｓｅに更新される。当該更新は、図４の（２）の処理に対応する。
【０１００】
選言の「｜」が代入された配列要素の入力属性及び出力属性は、ｆａｌｓｅに更新される。当該更新は、図４の（２）の処理に対応する。
【０１０１】
選言対象におけるいずれかの選択肢の最後尾要素が代入された配列要素の出力属性は、ｆａｌｓｅに更新される。当該更新は、図４の（３）の処理に対応する。当該配列要素の拡張枝属性には、当該配列要素に係る最後尾要素が属する対応グループ内の「）」の位置が代入される。すなわち、各選択肢からの脱出経路が拡張枝属性に追加される。
【０１０２】
量化対象又は選言対象を囲む「（」又は「）」の直前の要素が代入された配列要素の拡張枝属性には、当該要素の直後の「（」又は「）」の位置が代入される。すなわち、図４の（４）において説明した拡張枝が、拡張枝属性に追加される。
【０１０３】
一方、ステップＳ２０１において、対象文字列に正規表現が含まれていない場合（Ｓ２０１でＮｏ）、グラフ要素生成部１２４は、ステップＳ２０５〜Ｓ２０７と同様の処理を、対象文字列について実行する（Ｓ２０９〜Ｓ２１１）。
【０１０４】
図１３について、対象文字列が、「ａ（ｂｃ｜ｄｅ）｛２｝ｆｇ＊ｈ（ｉｊ）｛１，３｝」である場合の処理内容を説明する。
【０１０５】
まず、ステップＳ２０２において、「（）」が補完されることにより、対象文字列は、「ａ（（ｂｃ｜ｄｅ））｛２｝ｆ（ｇ）＊ｈ（ｉｊ）｛１，３｝」に変形される。
【０１０６】
続いて、ステップＳ２０３において、図１４に示されるように、対応グループが生成される。
【０１０７】
図１４は、対応グループの具体例を示す図である。図１４には対象文字列内における選言又は量化ごとに、当該選言対象又は当該量化対象の最後尾要素と、当該選言又は当該量化に関して生成される対応グループに属する要素が示されている。
【０１０８】
続いて、ステップＳ２０４において、量化子の展開が行われる。その結果、対象文字列は、以下のように変形される。
【０１０９】
ａ（（ｂｃ｜ｄｅ）（（ｂｃ｜ｄｅ））｛２｝ｆ（ｇ（ｇ）＊ｈ（ｉｊ（ｉｊ（ｉｊ）｛１，３｝
続いて、ステップＳ２０５において、空文字の追加が行われる。その結果、対象文字列は、以下のように変化する。
【０１１０】
［ｎｕｌｌ］ａ（（ｂｃ｜ｄｅ）（（ｂｃ｜ｄｅ））｛２｝ｆ（ｇ（ｇ）＊ｈ（ｉｊ（ｉｊ（ｉｊ）｛１，３｝
なお、上記において、空文字は、［ｎｕｌｌ］によって表現されている。
【０１１１】
続いて、ステップＳ２０６〜Ｓ２０８が実行されることにより、図１５に示されるようなグラフ要素配列が生成される。
【０１１２】
図１５は、グラフ要素配列の一例を示す図である。図１５において、各列は、グラフ要素配列の一つの配列要素を示す。各行は、グラフ要素型の各属性に対応する。図１５に示されるように、要素属性には、対象文字列を構成する各要素が格納される。入力属性、出力属性、及び拡張枝属性には、ステップＳ２０８において説明した規則に従った値が代入されている。なお、図１５では、便宜上、入力属性及び出力属性について、「ｆ」は、ｆａｌｓｅを示し、値が空であることは、ｔｒｕｅを示す。
【０１１３】
図１５に示されるグラフ要素配列は、図１６に示されるような編集距離算出グラフを表現する。図１６は、グラフ要素配列によって表現される編集距離算出グラフの一例を示す図である。
【０１１４】
図１６において、（１）は、入力属性又は出力属性がｆａｌｓｅに対応する経路は削除されることを示す。すなわち、（１）において、破線の経路は、削除対象の経路を示す。
【０１１５】
（２）は、記号ノードの直前の要素から記号ノードへの拡張枝の追加を示す。図１６においては、当該拡張枝は、値が１である拡張枝属性によって表現される。
【０１１６】
（３）は、量化や選言等を表現するための拡張枝の追加を示す。図１６においては、当該拡張枝は、値が１以外である拡張枝属性によって表現される。なお、値が負である拡張枝属性は、図中において、左方向に向いている拡張枝である。
【０１１７】
このように、グラフ要素配列は、実質的に編集距離算出グラフを表現することができる。したがって、グラフ要素配列に基づいて、編集距離を算出することができる。図１等において説明したように、編集距離は、編集距離算出グラフの最短経路の距離として求められる。既存のグラフ最短経路探索法を用いる場合、編集距離算出グラフの各ノードの接続先のノードと、当該接続先までの距離とが分かればよい。そこで、本実施の形態では、グラフ要素配列に基づいて、編集距離算出グラフの各ノードの接続先と、接続先までの距離とを判定する処理を説明することにより、グラフ要素配列に基づく編集距離の算出処理の説明に代える。
【０１１８】
図１７は、グラフ要素配列に基づく編集距離算出グラフの各ノードの接続先と接続先までの距離との判定処理の処理手順の一例を説明するためのフローチャートである。図１７の処理は、図１１のステップＳ１０３の一部として実行される。図１７の説明において、比較対象とされる二つの文字列に関して生成された二つのグラフ要素配列は、それぞれ変数Ｘ、変数Ｙによって表現される。変数Ｘによって表現されるグラフ要素配列（以下、「グラフ要素配列Ｘ」という。）は、編集距離算出グラフのＸ軸に沿って配列された文字列に対応する。変数Ｙによって表現されるグラフ要素配列（以下、「グラフ要素配列Ｙ」という。）は、編集距離算出グラフのＹ軸に沿って配列された文字列に対応する。
【０１１９】
ステップＳ３０１において、経路探索部１３は、処理対象とされるノードを受け付ける。ノードは、編集距離算出グラフの座標値によって表現される。以下、処理対象とされるノードを、ノード（ｘ，ｙ）という。ｘは、編集距離算出グラフのｘ座標値である。ｙは、編集距離算出グラフのｙ座標値である。
【０１２０】
ここで、基本経路において、ノード（ｘ，ｙ）の接続先となりうるノードは、斜め下方向のノード（ｘ＋１，ｙ＋１）、右方向のノード（ｘ＋１，ｙ）、及び下方向のノード（ｘ，ｙ＋１）である。なお、基本経路とは、図１において説明した基本手順において生成される置換、削除、又は挿入に対応する経路である。
【０１２１】
まず、経路探索部１３は、ノード（ｘ＋１，ｙ＋１）への有向枝について検査する。すなわち、ステップＳ３０２において、経路探索部１３は、ノード（ｘ，ｙ）からノード（ｘ＋１，ｙ＋１）への経路の有無を判定する。当該経路は、次の二つの条件が共に満たされた場合に有ると判定される。
【０１２２】
第１条件は、（ｘ＋１＜Ｘ．ｓｉｚｅ（）  ＆＆  ｙ＋１＜Ｙ．ｓｉｚｅ（））である。ここで、Ｘ．ｓｉｚｅ（）は、グラフ要素配列Ｘの配列長を示す。また、Ｙ．ｓｉｚｅ（）は、グラフ要素配列Ｙの配列長を示す。したがって、第１条件は、ノード（ｘ，ｙ）が、Ｘ軸方向において右端のノードではなく、かつ、Ｙ軸方向において下端のノードではないことである。第２条件は、（Ｘ［ｘ＋１］．ｉｎｐｕｔ  ＆＆  Ｙ［ｙ＋１］．ｉｎｐｕｔ）である。ここで、Ｘ［ｘ＋１］．ｉｎｐｕｔは、グラフ要素配列Ｘにおいて、ノード（ｘ＋１，ｙ＋１）に対応する配列要素の入力属性を示す。また、Ｙ［ｙ＋１］．ｉｎｐｕｔは、グラフ要素配列Ｙにおいて、ノード（ｘ＋１，ｙ＋１）に対応する配列要素の入力属性を示す。したがって、第２条件は、ノード（ｘ＋１，ｙ＋１）への置換に対応する有向枝が存在することである。当該置換に対応する有向枝は、ノード（ｘ，ｙ）からノード（ｘ＋１，ｙ＋１）への経路に該当する。
【０１２３】
ステップＳ３０２の条件が満たされる場合（Ｓ３０２でＹｅｓ）、経路探索部１３は、Ｘ［ｘ＋１］．ｓｔｒｉｎｇとＹ［ｙ＋１］．ｓｔｒｉｎｇとが一致するか否かを判定する（Ｓ３０３）。ここで、Ｘ［ｘ＋１］．ｓｔｒｉｎｇは、ノード（ｘ＋１，ｙ＋１）においてＸ軸に対応する要素である。Ｙ［ｙ＋１］．ｓｔｒｉｎｇは、ノード（ｘ＋１，ｙ＋１）においてＹ軸に対応する要素である。したがって、ステップＳ３０３の判定は、ノード（ｘ＋１，ｙ＋１）のＸ軸の要素とＹ軸の要素とが一致するか否かの判定に該当する。
【０１２４】
ノード（ｘ＋１，ｙ＋１）のＸ軸の要素とＹ軸の要素とが一致する場合（Ｓ３０３でＹｅｓ）、経路探索部１３は、ノード（ｘ＋１，ｙ＋１）を、距離＝０の接続先として、メモリ装置１０３に記憶する（Ｓ３０４）。
【０１２５】
一方、ノード（ｘ＋１，ｙ＋１）のＸ軸の要素とＹ軸の要素とが一致しない場合（Ｓ３０３でＮｏ）、経路探索部１３は、ノード（ｘ＋１，ｙ＋１）を、距離＝１の接続先として、メモリ装置１０３に記憶する（Ｓ３０５）。
【０１２６】
ステップＳ３０２でＮｏの場合、ステップＳ３０４、又はステップＳ３０５に続いて、経路探索部１３は、ノード（ｘ，ｙ）からノード（ｘ＋１，ｙ）への有向枝の有無を判定する（Ｓ３０６）。当該有向枝は、次の二つの条件が共に満たされた場合に有ると判定される。
【０１２７】
第１条件は、（ｘ＋１＜Ｘ．ｓｉｚｅ（））である。すなわち、第１条件は、ノード（ｘ，ｙ）が、Ｘ軸方向において右端のノードではないことである。第２条件は、（Ｘ［ｘ＋１］．ｉｎｐｕｔ＝ｔｒｕｅ  ＆＆  Ｙ［ｙ］．ｏｕｔｐｕｔ＝ｔｒｕｅ）である。ここで、Ｙ［ｙ］．ｏｕｔｐｕｔは、グラフ要素配列Ｙにおいて、ノード（ｘ，ｙ）に対応する配列要素の出力属性を示す。したがって、第２条件は、Ｘ軸方向においてノード（ｘ＋１、ｙ）への削除に対応する有向枝が存在し、かつ、Ｙ軸方向においてノード（ｘ、ｙ）からの、挿入に対応する有向枝が存在することである。当該削除に対応する有向枝及び当該挿入に対応する有向枝は、同一の有向枝を示し、ノード（ｘ，ｙ）からノード（ｘ＋１，ｙ）への有向枝に該当する。
【０１２８】
ステップＳ３０６の条件が満たされる場合（Ｓ３０６でＹｅｓ）、経路探索部１３は、ノード（ｘ＋１，ｙ）を、距離＝１の接続先として、メモリ装置１０３に記憶する（Ｓ３０７）。
【０１２９】
ステップＳ３０６でＮｏの場合、又はステップＳ３０７に続いて、経路探索部１３は、ノード（ｘ，ｙ）からノード（ｘ，ｙ＋１）への有向枝の有無を判定する（Ｓ３０８）。当該有向枝は、以下の二つの条件が共に満たされた場合に有ると判定される。
【０１３０】
第１条件は、（ｙ＋１＜Ｙ．ｓｉｚｅ（））である。すなわち、第１条件は、ノード（ｘ，ｙ）が、Ｙ軸方向において下端のノードではないことである。第２条件は、（Ｘ［ｘ］．ｏｕｔｐｕｔ＝ｔｒｕｅ  ＆＆  Ｙ［ｙ＋１］．ｉｎｐｕｔ＝ｔｒｕｅ）である。すなわち、第２条件は、Ｘ軸方向において、ノード（ｘ、ｙ＋１）からの、挿入に対応する有向枝が存在し、かつ、Ｙ軸方向において、ノード（ｘ，ｙ＋１）への削除に対応する有向枝が存在することである。当該挿入に対応する有向枝及び当該削除に対応する有向枝は、同一の有向枝を示し、ノード（ｘ，ｙ）からノード（ｘ，ｙ＋１）への有向枝に該当する。
【０１３１】
ステップＳ３０８の条件が満たされる場合（Ｓ３０８でＹｅｓ）、経路探索部１３は、ノード（ｘ，ｙ＋１）を、距離＝１の接続先として、メモリ装置１０３に記憶する（Ｓ３０９）。
【０１３２】
続いて、拡張枝について検査が行われる。ステップＳ３１０において、経路探索部１３は、Ｘ［ｘ］．ｅｘｔｒａｒｏｕｔｅｓが空であるか否かを判定する。Ｘ［ｘ］．ｅｘｔｒａｒｏｕｔｅｓは、グラフ要素配列Ｘにおいて、ｘ番目の要素の拡張枝属性を示す。ｅｘｔｒａｒｏｕｔｅｓは、拡張枝の接続先の配列要素の位置を示す数値の配列に相当する。なお、ステップＳ３１０の判定は、ノード（ｘ，ｙ）を起点とし、Ｘ軸に平行な拡張枝の有無の判定に相当する。
【０１３３】
該当する拡張枝が有る場合（Ｓ３１０でＹｅｓ）、経路探索部１３は、Ｘ［ｘ］．ｅｘｔｒａｒｏｕｔｅｓの配列要素ごとに、ステップＳ３１１を実行する。Ｘ［ｘ］．ｅｘｔｒａｒｏｕｔｅｓの配列要素ごととは、ノード（ｘ，ｙ）を起点とし、Ｘ軸に平行な拡張枝ごとを意味する。ステップＳ３１１において、経路探索部１３は、処理対象の拡張枝の接続先のノード（ｘ＋Ｘ［ｘ］．ｅｘｔｒａｒｏｕｔｅｓ［ｎ］，ｙ）を、距離＝０の接続先として、メモリ装置１０３に記憶する。
【０１３４】
続いて、経路探索部１３は、Ｙ［ｙ］．ｅｘｔｒａｒｏｕｔｅｓが空であるか否かを判定する。すなわち、ステップＳ３１０の判定は、ノード（ｘ，ｙ）を起点とし、Ｙ軸に平行な拡張枝の有無の判定に相当する。
【０１３５】
該当する拡張枝が有る場合（Ｓ３１２でＹｅｓ）、経路探索部１３は、Ｙ［ｙ］．ｅｘｔｒａｒｏｕｔｅｓの配列要素ごとに、ステップＳ３１３を実行する。Ｙ［ｙ］．ｅｘｔｒａｒｏｕｔｅｓの配列要素ごととは、ノード（ｘ，ｙ）を起点とし、Ｙ軸に平行な拡張枝ごとを意味する。ステップＳ３１３において、経路探索部１３は、処理対象の拡張枝の接続先のノード（ｘ，ｙ＋Ｙ［ｙ］．ｅｘｔｒａｒｏｕｔｅｓ［ｎ］）を、距離＝０の接続先として、メモリ装置１０３に記憶する。
【０１３６】
続いて、経路探索部１３は、メモリ装置１０３に記憶された接続先ノードごとに、座標値及び距離等を出力する（Ｓ３１４）。当該出力情報に基づいて、経路探索が行われる。
【０１３７】
次に、図４の（３）の処理、すなわち、対応グループ内において最初の「（」と、「）」の直前の要素とについて、「挿入」に対応する有向枝が削除される処理の意義について説明する。これらの有向枝が削除されるのは、当該最初の「（」の後と、「）」の前とに対する文字の挿入が制限されるようにするためである。このような制限が必要となるのは、編集距離の算出の際に、文字の挿入位置を正確に把握可能とするためである。具体的には、「（」の後や「）」の前に対する文字の挿入（以下、「括弧内挿入」という。）と、「（」の前や「）」の後に対する文字の挿入（以下、「括弧外挿入」という。）とを区別可能とするためである。
【０１３８】
例えば、文字列Ａ「ａｂｃ（−［ｄｅ］）＋：」と、文字列Ｅ「ａｂｃｆ−ｄ−ｅ：」との編集距離を算出する場合について考える。文字列Ａによって表現可能な文字列群のうち、文字列Ｅとの編集距離が最小となる文字列は、「ａｂｃ−ｄ−ｅ：」であり、当該文字列と文字列Ｅとの編集距離は、１である。すなわち、「ａｂｃ−ｄ−ｅ：」の「ｃ」と「−」の間に「ｆ」が挿入された文字列は、文字列Ｅに一致する。
【０１３９】
ここで、「ｃ」と「−」の間に対応する、文字列Ａにおける挿入位置は、括弧外挿入である、最初の「（」の直前、又は括弧内挿入である、当該「（」の直後の二通りが考えられる。文字列Ａに対する「ｆ」の括弧外挿入によって得られる文字列は、「ａｂｃｆ（−［ｄｅ］）＋：」であり、括弧内挿入によって得られる文字列は、「ａｂｃ（ｆ−［ｄｅ］）＋：」である。
【０１４０】
このうち、括弧内挿入によって得られる「ａｂｃ（ｆ−［ｄｅ］）＋：」は、文字列Ａの「ｃ」と「−」の間に「ｆ」を挿入した結果という意味では正しいが、文字列Ｅ「ａｂｃｆ−ｄ−ｅ：」にマッチする正規表現ではない。したがって、括弧内挿入であるのか、又は括弧外挿入であるのかが明確に区別可能である必要が有る。
【０１４１】
そこで、本実施の形態では、対応グループ内において最初の「（」の後における括弧内挿入と、「）」の前における括弧内挿入とを制限することで、括弧内挿入及び括弧外挿入の区別、すなわち、挿入位置の一意性の確保を可能としているのである。
【０１４２】
なお、挿入位置の一意性の確保という観点においては、括弧内挿入及び括弧外挿入のいずれが優先されるかが明確化されていればよく、本実施の形態にように、括弧外挿入が優先されなければならないわけではない。本実施の形態において、括弧外挿入が優先される理由の一つ（すなわち、制限される挿入の形態が、括弧外挿入ではなく、括弧内挿入である理由の一つ）は、正規表現的に不自然にならない括弧外挿入を優先させたいからである。例えば、括弧内挿入を許容した場合、「ａｂｃ（ｆ−［ｄｅ］）＋：」のままでは、文字列Ｅにマッチしないため、更に、正規表現「？」を追加し、「ａｂｃ（ｆ？−［ｄｅ］）＋：」とする必要があり、編集が煩雑となるからである。ここで、正規表現「？」は、「？」の直前の文字が０個か１個であることを示す。
【０１４３】
なお、本実施の形態において、挿入位置の一意性の確保に寄与する事項は、以下の（１）〜（３）に示される通りである。
【０１４４】
（１）上記したように括弧内挿入が制限されること。すなわち、対応グループの最初の「（」の後への挿入に対応する有向枝と、「）」の前への挿入に対応する有向枝とが削除されることである。したがって、仮に、挿入位置の一意性の確保が必要でない場合、当該有向枝は削除されなくてもよい。
【０１４５】
（２）量化子が｛Ｘ，｝（Ｘ＞０）である場合、すなわち、上限の無い繰り返しの場合に、量化子の展開において、量化対象がＸ個複製され、結果的に、量化対象がＸ＋１個になること。仮に、挿入位置の一意性の確保が必要でない場合、量化対象の複製はＸ−１個でよい。
【０１４６】
（３）量化子の展開において、量化対象と共に括弧開き「（」も複製されること。したがって、仮に、挿入位置の一意性の確保が必要でない場合、「（」の複製は行われなくてもよい。この場合、グラフ要素配列の配列要素の中で、量化対象最後尾要素が代入された配列要素の拡張枝属性には、当該量化対象最後尾要素の直前の「（」の位置ではなく、当該量化対象最後尾要素の直線の量化対象最後尾要素の位置が代入されればよい。
【０１４７】
例えば、挿入位置の一意性の確保を考慮しない場合、文字列Ａ及び文字列Ｅに関する編集距離算出グラフは、図１８に示されるように生成される。
【０１４８】
図１８は、挿入位置の一意性の確保を考慮しない場合の編集距離算出グラフの例を示す図である。図１８に示される編集距離算出グラフにおいて、Ｘ軸に配列されている文字列は、文字列Ａに対応する文字列である。本実施の形態では、量化子の展開によって、文字列Ａは、文字列Ａ'「ａｂｃ（−［ｄｅ］（−［ｄｅ］）：」に変形されるが、挿入位置の一意性の確保を考慮しない場合、文字列Ａは、文字列Ａ''「ａｂｃ（−［ｄｅ］）：」に変形される。量化子「＋」は、量化子｛１，｝に該当し、挿入位置の一意性の確保を考慮しない場合、上記の（２）より、１−１＝０個の複製が追加されれば良いからである。したがって、図１８に示される編集距離算出グラフでは、Ｘ軸に対して文字列Ａ''が配列されている。また、図１８では、「（」の後に対する挿入に対応する有向枝、及び「）」の前に対する挿入に対応する有向枝は削除されていない。なお、図１８に示される編集距離算出グラフにおいて、Ｙ軸には文字列Ｅが配列されている。したがって、図１８に示される編集距離算出グラフは、文字列Ａと文字列Ｅとの編集距離を算出するための編集距離算出グラフである。
【０１４９】
当該編集距離算出グラフにおける編集距離の算出結果は、例えば、図１９に示される通りである。図１９は、挿入位置の一意性の確保を考慮しない場合の編集距離算出グラフに基づく編集距離の算出例を示す図である。
【０１５０】
図１９では、二通りの最短経路が探索されている。ここで、（１）に示される最短経路では、「（」の後に対する「ｆ」の挿入、すなわち、括弧内挿入が示されている。一方、（２）に示される最短経路では、「（」の前に対する「ｆ」の挿入、すなわち、括弧外挿入が示されている。なお、（１）及び（２）のいずれの最短経路に基づいても、編集距離は１である。
【０１５１】
一方、挿入位置の一意性の確保を考慮した場合、文字列Ａと文字列Ｅとの編集距離算出グラフは、図４等において説明した手順と同様の手順によって、図２０に示されるように生成される。
【０１５２】
図２０は、挿入位置の一意性の確保を考慮した場合の編集距離算出グラフの例を示す図である。図２０に示される編集距離算出グラフにおいて、Ｘ軸に配列されている文字列は、文字列Ａに関して量化子の展開が行われた文字列Ａ'である。また、Ｙ軸には文字列Ｅが配列されている。なお、図２０では、「（」の後に対する挿入に対応する有向枝、及び「）」の前に対する挿入に対応する有向枝は削除されている。すなわち、括弧内挿入は制限されている。
【０１５３】
当該編集距離算出グラフにおける編集距離の算出結果は、例えば、図２１に示される通りである。図２１は、挿入位置の一意性の確保を考慮した場合の編集距離算出グラフに基づく編集距離の算出例を示す図である。
【０１５４】
図２１に示される通り、当該編集距離算出グラフにおいて探索される最短経路では、「ｆ」の挿入位置が一意に決定される。すなわち、図２１では、「ｆ」が「（」の前に挿入されることが示されている。このように、括弧内挿入を制限し、量化子の展開等を行うことで、挿入位置を一意に決定することができる。なお、図２１に示される最短経路に基づいて算出される編集距離は、図１９と同様に１である。すなわち、図１９と図２１との違いは、挿入位置の一意性の有無であり、編集距離の算出結果は同じとなる。
【０１５５】
なお、挿入位置の特定まで必要とされない場合、すなわち、編集距離が算出されればよい場合、図１８及び図１９において示した方法が採用されてもよい。
【０１５６】
上述したように、本実施の形態によれば、正規表現が量化子の展開等によって編集距離算出グラフとの親和性が高い形式に置換されて、当該正規表現を含む文字列が編集距離算出グラフに配列される。また、編集距離算出グラフには、正規表現に対応した拡張枝が追加される。その結果、斯かる編集距離算出グラフに基づいて、公知の最短経路探索方法を用いることにより、比較対象の二つの文字列のうちの少なくともいずれか一方が正規表現を含む場合であっても、当該二つの文字列の編集距離を効率的に算出することができる。そして、当該正規表現が量化を示すものであっても、本実施の形態によれば、二つの文字列の編集距離を効率的に算出することができる。
【０１５７】
また、括弧内挿入の制限等により、挿入位置の一意性を確保することができる。
【０１５８】
なお、本実施の形態では、正規表現の対象範囲の開始を示す記号として括弧開き「（」を用い、正規表現の対象範囲の終了を示す記号として括弧閉じ「）」を用いる例を説明したが、これらの記号はどのようなものであってもよい。
【０１５９】
次に、本実施の形態における編集距離の算出方法の具体的な利用シーンの一例を説明する。具体的には、コンピュータシステムやネットワーク内において発生するイベントの記録であるログデータを外部へ提供する際に、本実施の形態の編集距離の算出方法が適用される例について説明する。ログデータには、例えば、ホスト名、ポート名、又はファイルパス名等の機微情報が含まれる。したがって、ログデータが外部へ提供される際には、機微情報の秘匿化が行われる必要が有る。本実施の形態における編集距離の算出方法によれば、ログデータ内の機微情報の秘匿化のための作業を効率化することができる。
【０１６０】
ログデータの秘匿方法として、正規表現で記述された秘匿ルールを使う手法がある。
【０１６１】
図２２は、ログデータ及び秘匿ルールの例を示す図である。図２２には、ログデータＬ１と、秘匿ルールｒ１〜ｒ４（以下、それぞれを区別しない場合「秘匿ルールｒ」という。）とが示されている。秘匿ルールｒからログデータＬ１内のいずれかの行（以下、「ログデータ行」という。）に伸びる矢印は、当該矢印に係る秘匿ルールｒと、当該秘匿ルールｒにマッチするログデータ行との対応関係を示す。
【０１６２】
このように、秘匿ルールｒにおいて、例えば、ホスト名、ポート名、又はファイルパス名等の機微情報に該当する部分に正規表現を用いることで、機微情報の具体的な値ごとに秘匿ルールｒを定義する必要性を低減させることができる。
【０１６３】
秘匿ルールの作成方法として、秘匿したいログデータ行から直接正規表現を作成する方法が考えられる。
【０１６４】
図２３は、ログデータ行からの秘匿ルールの作成例を示す図である。図２３では、ログデータ行「Ｐａｔｈ＝／ａ／ｂ／ｃ」に基づいて、「Ｐａｔｈ＝（／［ａ−ｚ］）＋」が、秘匿ルールｒ５として作成された例が示されている。このような方法では、秘匿ルールｒ５に漏れが有った場合、改めて、秘匿化されなかったログデータ行が参照されて、秘匿ルールが生成される必要がある。例えば、「ｐａｔｈ＝／ａ／ｂ／ｃ」というログデータ行は、秘匿ルールｒ５にマッチしない。したがって、この場合、当該ログデータ行に基づいて、例えば、「ｐａｔｈ＝（／［ａ−ｚ］）＋」という秘匿ルールが作成されることになる。
【０１６５】
これに対し、既存の秘匿ルールを利用することで、新しい秘匿ルールの作成負荷を軽減することができる。すなわち、秘匿ルールは正規表現であり、ログデータ行は文字列であるため、本実施の形態における編集距離の算出方法を利用して、ログデータ行にマッチしないが類似する既存の秘匿ルールを抽出することができる。抽出された既存の秘匿ルールの一部を修正して新たな秘匿ルールを作成することで、ログデータ行から直接秘匿ルールを作成する場合に比べ、秘匿ルールの作成負荷の軽減を期待することができる。
【０１６６】
図２４は、既存の秘匿ルールを利用した新たな秘匿ルールの作成例を示す図である。図２４では、既存の秘匿ルールｒ５とログデータ行「ｐａｔｈ＝／ａ／ｂ／ｃ」との編集距離が算出され、編集距離＝１、秘匿ルールｒ５の「Ｐ」を「ｐ」に置換という結果が得られた例が示されている。この場合、例えば、当該結果に基づいて、自動的に、秘匿ルールｒ５を、「（ｐ｜Ｐ）ａｔｈ＝（／［ａ−ｚ］）＋」という秘匿ルールｒ６に更新することができる。または、「ｐａｔｈ＝（／［ａ−ｚ］）＋」という新たな秘匿ルールが自動的に生成されてもよい。
【０１６７】
または、予め既存の秘匿ルール同士が比較され、類似する秘匿ルール群がクラスタリングされ、インデックス化されることで、ログデータ行に類似する既存の秘匿ルールの抽出が高速化されてもよい。秘匿ルールは正規表現であるため、本実施の形態における編集距離の算出方法を利用して秘匿ルール同士の編集距離を算出することにより、類似する秘匿ルールのクラスタリングを実現することができる。
【０１６８】
なお、本実施の形態において、編集距離算出グラフは、二つの文字列の編集距離を算出するための文字列の編集に対応する有向枝の集合を含む有向グラフの一例である。編集距離算出装置１０は、有向グラフ生成装置の一例である。量化子展開部１２３は、置換部の一例である。グラフ要素生成部１２４は、追加部の一例である。
【０１６９】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【０１７０】
以上の説明に関し、更に以下の項を開示する。
（付記１）
二つの文字列の編集距離を算出するための文字列の編集に対応する有向枝の集合を含む有向グラフの生成方法であって、
前記文字列のうち、量化を示す正規表現の部分を、当該量化における繰り返し対象が量化子に応じた回数分繰り返す第一の文字列によって置換し、
前記有向グラフにおいて、前記正規表現について置換が行われた部分を含む文字列が配列された軸に対して平行に、前記量化子に応じた有向枝を追加する、
処理をコンピュータが実行する有向グラフ生成方法。
（付記２）
前記追加する処理は、前記第一の文字列の末尾から、前記第一の文字列内において最後の前記繰り返し対象の先頭への有向枝を追加する付記１記載の有向グラフ生成方法。
（付記３）
前記追加する処理は、前記第一の文字列において、前記量化子が示す下限の繰り返し回数に対応する前記繰り返し対象の末尾から、前記第一の文字列の直後までの有向枝を追加する付記１又は２記載の有向グラフ生成方法。
（付記４）
前記追加する処理は、前記量化子が０回以上の繰り返しを示す場合は、前記第一の文字列の直前から前記第一の文字列の直後までの有向枝を追加する付記１乃至３いずれか一項記載の有向グラフ生成方法。
（付記５）
前記置換する処理は、量化を示す正規表現の対象範囲の終了を示す記号の前に、当該正規表現の対象範囲の開始を示す記号及び前記繰り返し対象が前記量化子に応じた回数分繰り返す文字列を挿入し、
前記記号に対応するノードへの有向枝と、前記第一の文字列の中で最初の前記記号の前への文字の挿入に対応する有向枝と、前記第一の文字列の中で最後の前記記号の前への文字の挿入に対応する有向枝とを削除する処理を前記コンピュータが実行する付記１乃至４いずれか一項記載の有向グラフ生成方法。
（付記６）
二つの文字列の編集距離を算出するための文字列の編集に対応する有向枝の集合を含む有向グラフの生成をコンピュータに実行させる有向グラフ生成プログラムであって、
前記文字列のうち、量化を示す正規表現の部分を、当該量化における繰り返し対象が量化子に応じた回数分繰り返す第一の文字列によって置換し、
前記有向グラフにおいて、前記正規表現について置換が行われた部分を含む文字列が配列された軸に対して平行に、前記量化子に応じた有向枝を追加する、
処理をコンピュータに実行させる有向グラフ生成プログラム。
（付記７）
前記追加する処理は、前記第一の文字列の末尾から、前記第一の文字列内において最後の前記繰り返し対象の先頭への有向枝を追加する付記６記載の有向グラフ生成プログラム。
（付記８）
前記追加する処理は、前記第一の文字列において、前記量化子が示す下限の繰り返し回数に対応する前記繰り返し対象の末尾から、前記第一の文字列の直後までの有向枝を追加する付記６又は７記載の有向グラフ生成プログラム。
（付記９）
前記追加する処理は、前記量化子が０回以上の繰り返しを示す場合は、前記第一の文字列の直前から前記第一の文字列の直後までの有向枝を追加する付記６乃至８いずれか一項記載の有向グラフ生成プログラム。
（付記１０）
前記置換する処理は、量化を示す正規表現の対象範囲の終了を示す記号の前に、当該正規表現の対象範囲の開始を示す記号及び前記繰り返し対象が前記量化子に応じた回数分繰り返す文字列を挿入し、
前記記号に対応するノードへの有向枝と、前記第一の文字列の中で最初の前記記号の前への文字の挿入に対応する有向枝と、前記第一の文字列の中で最後の前記記号の前への文字の挿入に対応する有向枝とを削除する処理を前記コンピュータに実行させる付記６乃至９いずれか一項記載の有向グラフ生成プログラム。
（付記１１）
二つの文字列の編集距離を算出するための文字列の編集に対応する有向枝の集合を含む有向グラフの生成装置であって、
前記文字列のうち、量化を示す正規表現の部分を、当該量化における繰り返し対象が量化子に応じた回数分繰り返す第一の文字列によって置換する置換部と、
前記有向グラフにおいて、前記正規表現について置換が行われた部分を含む文字列が配列された軸に対して平行に、前記量化子に応じた有向枝を追加する追加部と、
を有する有向グラフ生成装置。
（付記１２）
前記追加部は、前記第一の文字列の末尾から、前記第一の文字列内において最後の前記繰り返し対象の先頭への有向枝を追加する付記６記載の有向グラフ生成装置。
（付記１３）
前記追加部は、前記第一の文字列において、前記量化子が示す下限の繰り返し回数に対応する前記繰り返し対象の末尾から、前記第一の文字列の直後までの有向枝を追加する付記１１又は１２記載の有向グラフ生成装置。
（付記１４）
前記追加部は、前記量化子が０回以上の繰り返しを示す場合は、前記第一の文字列の直前から前記第一の文字列の直後までの有向枝を追加する付記１１乃至１３いずれか一項記載の有向グラフ生成装置。
（付記１５）
前記置換する処理は、量化を示す正規表現の対象範囲の終了を示す記号の前に、当該正規表現の対象範囲の開始を示す記号及び前記繰り返し対象が前記量化子に応じた回数分繰り返す文字列を挿入し、
前記追加部は、前記記号に対応するノードへの有向枝と、前記第一の文字列の中で最初の前記記号の前への文字の挿入に対応する有向枝と、前記第一の文字列の中で最後の前記記号の前への文字の挿入に対応する有向枝とを削除する付記１１乃至１４いずれか一項記載の有向グラフ生成装置。
【符号の説明】
【０１７１】
１０          編集距離算出装置
１１          入力受付部
１２          グラフ生成部
１３          経路探索部
１４          編集距離算出部
１００        ドライブ装置
１０１        記録媒体
１０２        補助記憶装置
１０３        メモリ装置
１０４        ＣＰＵ
１０５        インタフェース装置
１２１        記号補完部
１２２        対応グループ生成部
１２３        量化子展開部
１２４        グラフ要素生成部
Ｂ            バス
【図１】
2015018394.tif 000003
【図２】
2015018394.tif 000004
【図３】
2015018394.tif 000005
【図４】
2015018394.tif 000006
【図５】
2015018394.tif 000007
【図６】
2015018394.tif 000008
【図７】
2015018394.tif 000009
【図８】
2015018394.tif 000010
【図９】
2015018394.tif 000011
【図１０】
2015018394.tif 000012
【図１１】
2015018394.tif 000013
【図１２】
2015018394.tif 000014
【図１３】
2015018394.tif 000015
【図１４】
2015018394.tif 000016
【図１５】
2015018394.tif 000017
【図１６】
2015018394.tif 000018
【図１７】
2015018394.tif 000019
【図１８】
2015018394.tif 000020
【図１９】
2015018394.tif 000021
【図２０】
2015018394.tif 000022
【図２１】
2015018394.tif 000023
【図２２】
2015018394.tif 000024
【図２３】
2015018394.tif 000025
【図２４】
2015018394.tif 000026