JP4897454B2 - 正規表現生成装置及び正規表現生成方法及び正規表現生成プログラム - Google Patents

正規表現生成装置及び正規表現生成方法及び正規表現生成プログラム Download PDF

Info

Publication number
JP4897454B2
JP4897454B2 JP2006329679A JP2006329679A JP4897454B2 JP 4897454 B2 JP4897454 B2 JP 4897454B2 JP 2006329679 A JP2006329679 A JP 2006329679A JP 2006329679 A JP2006329679 A JP 2006329679A JP 4897454 B2 JP4897454 B2 JP 4897454B2
Authority
JP
Japan
Prior art keywords
value
attribute
regular expression
range condition
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2006329679A
Other languages
English (en)
Other versions
JP2008146162A (ja
Inventor
隆顕 中村
光則 郡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2006329679A priority Critical patent/JP4897454B2/ja
Publication of JP2008146162A publication Critical patent/JP2008146162A/ja
Application granted granted Critical
Publication of JP4897454B2 publication Critical patent/JP4897454B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、正規表現生成装置及び正規表現生成方法及び正規表現生成プログラムに関するものである。本発明は、特に、正規表現を用いた検索条件生成装置、検索条件生成方式、検索条件生成プログラムに関するものである。
検索のために入力された検索条件(キーワード)を、異なった表記でも類似した表記でも検索可能なように正規表現に変換し、検索対象に誤字脱字が含まれている場合や改行コードが含まれている場合でも検索できるようにする技術が公知である(例えば、特許文献1参照)。
検索対象としては、例えば、ログを保存するデータベースが挙げられる。近年、ログは多様化、大規模化しており、ログを効率的に管理するためのログ専用データベース管理システムの必要性が高まっている(例えば、非特許文献1参照)。
特開平7−121547号公報 中村隆顕、他3名、「大規模ログデータベースの実現」、情報処理学会第68回(平成18年)全国大会講演論文集(3)、pp.29−30、2006年3月
情報セキュリティの分野を中心に、ログを収集・保存・分析する動きが進んでいる。ここでいうログには、サーバなどの情報機器の動作履歴・アクセス履歴、セキュリティ機器やソフトウェアが記録するイベントの履歴、ネットワーク上の通信履歴、電子メールの送受信履歴(メールの内容も含む)などがある。これらログの多くはテキストの情報として記録され、そのログの出力元ごとに個別に管理されてきた。情報セキュリティの分野において、これら多種多様な情報源から出力されたログを収集し、一元的に管理することにより、情報漏洩などの事件が発生した場合に、その証拠保全・原因究明などに役立てようという動きが進んでいる。
ログには次のような特徴がある。
ログは、常に生成され続けるものであるため、その量も時間の経過と共に増加し続ける。また、上記のような目的で収集する場合は、数ヵ月〜数年単位という長期間保存し続ける必要があり、その量は膨大なものとなる。また、ログはその出力元ごとに出力する内容が異なり、多様な形式が存在する。形式については、日時や数値の情報を含むものが多く、自由度に差はあるものの、書式が決まっている場合が多い。ただ、その書式はログの情報源によって個別に決まっており、共通の書式があるわけではない。
そのため、従来の電子文書の検索装置においては、文書に含まれる属性情報を検索する場合には、文書から事前に属性値(属性の値のことであるが、以下では、単に「属性」という場合がある)を抽出しておいて、専用のファイルに記録して管理するものや、リレーショナルデータベース管理システムなどを利用して管理することが一般的であった。
しかし、ログには上で述べたような書式の多様性があるため、保存するログの種類を増やした場合に、事前に属性を抽出する方式では、属性の抽出方法を定義しない限り属性情報を抽出して保存することができないという課題があった。また、抽出したい属性の種類を追加する場合にも、時間の経過と共に増加し続けるログを長期間保存しているとその量が膨大なものとなるため、保存済みの全てログから属性を抽出し直すことは困難であるという課題があった。
このようなログの保存・検索には、非特許文献1に示すようなログ専用データベースが有効である。このログ専用データベースは、以下のような方針に基づいて設計されている。
(1)ログの形式は意識せず、収集してきたログをそのままの形式で記憶媒体に保存する。
(2)ログの書式を意識した検索条件により検索する。
そうすることにより、以下のような効果がある。
(1)ログからの属性抽出などを行わないため、ありとあらゆる形式のログの保存が可能。
(2)ログの書式を意識した検索条件を正規表現により指定することにより、検索対象の属性などを柔軟に指定することが可能。
ここで、正規表現とは、文字列による検索条件の表記法の一種である。正規表現では、検索文字列の一部に、複数文字や文字列からの選択、また、それらの繰り返しの指定を許すことにより、検索条件をより一般化して表記することが可能である。
上記のログ専用データベースでは、検索条件によってはその正規表現が複雑なものとなり、記述が困難であるという課題がある。例えば、ログの中から「2006/7/1〜2006/10/15」の範囲に含まれる日付を検索するための正規表現は、
“[^0−9](2006/([7−8]/([1−9]|[1−2][0−9]|3[0−1])|9/([1−9]|[1−2][0−9]|30)|10/([1−9]|1[0−5]))[^0−9]”
などと記述することができる。このような正規表現は、正規表現の知識の乏しい者には記述が困難であると同時に、正規表現を熟知している者にとっても正確に記述するためには試行錯誤を要するものである。
同様に、ログの書式を意識した検索条件によっても、その正規表現の記述が困難なものがある。そのようなものの例として、CSV(Comma・Separated・Values)形式のログに対して、カンマ「,」で区切られた特定のフィールドを対象とした検索を行う場合の検索条件がある。例えば、「行の先頭から3番目と4番目のカンマに囲まれたフィールドに『ファイル』という文字列が含まれる」という検索条件は、
“(^|¥n)([^,]*,){3}[^,]*ファイル”
のように記述することができる。一口にCSV形式といっても、フィールドがさらにダブルクォーテーション「”」で囲まれているものもあるなど、様々なパターンを網羅しようとすると正規表現がさらに複雑になり、検索条件の記述が困難となる。また、特定のフィールドに上記のような特定の範囲に含まれる日付を検索するための正規表現も複雑なものとなる。
正規表現を利用したテキストの検索は、UNIX(登録商標)系OS(オペレーティングシステム)のgrepコマンドや、スクリプト言語Perlを始めとして広く利用されている。上記のような課題は、ログの検索に限定して存在する課題ではなく、これらの正規表現を利用した検索を行う処理系に共通して存在するものである。また、従来技術のように、キーワードを異なった表記でも類似した表記でも検索可能なように正規表現に変換する方式にも依然として存在する課題である。
本発明は、一定の範囲の属性値を検索するための正規表現を効率的に生成することを目的とする。
本発明の一の態様に係る正規表現生成装置は、
属性値の下限値と上限値と書式とを示す属性範囲条件データを入力装置から入力する属性範囲条件入力部と、
前記属性範囲条件入力部により入力された属性範囲条件データが示す書式に基づいて、前記属性範囲条件入力部により入力された属性範囲条件データが示す下限値以上の属性値であって、最下位桁から少なくとも1桁が当該桁の最大値である第1の値と、前記属性範囲条件入力部により入力された属性範囲条件データが示す上限値以下の属性値であって、最下位桁から少なくとも1桁が当該桁の最小値である第2の値とを、処理装置で演算する演算部と、
前記属性範囲条件入力部により入力された属性範囲条件データが示す下限値と上限値と、前記演算部により演算された第1の値と第2の値とを、記憶装置に記憶する属性値記憶部と、
前記属性値記憶部により記憶された下限値から第1の値までの属性値を正規表現で表す下位領域データと、前記属性値記憶部により記憶された第2の値から上限値までの属性値を正規表現で表す上位領域データとを、処理装置で生成するとともに、前記属性値記憶部により記憶された第1の値と第2の値との間に属性値が存在する場合には当該属性値を正規表現で表す中位領域データを処理装置で生成する正規表現生成部と、
前記正規表現生成部により生成された下位領域データと上位領域データと中位領域データとを処理装置で結合して、前記属性値記憶部により記憶された下限値から上限値までの属性値を正規表現で表す正規表現データを生成する正規表現結合部とを備えることを特徴とする。
本発明の一の態様によれば、正規表現生成装置において、演算部が属性値の書式に基づいて、下限値以上の属性値であって最下位桁から少なくとも1桁が当該桁の最大値である第1の値と上限値以下の属性値であって最下位桁から少なくとも1桁が当該桁の最小値である第2の値とを演算し、正規表現生成部が下限値から第1の値までの属性値を正規表現で表す下位領域データと第2の値から上限値までの属性値を正規表現で表す上位領域データとを生成するとともに、第1の値と第2の値との間に属性値が存在する場合には当該属性値を正規表現で表す中位領域データを生成し、正規表現結合部が下位領域データと上位領域データと中位領域データとを結合することにより、一定の範囲の属性値を検索するための正規表現を効率的に生成することが可能となる。
以下、本発明の実施の形態について、図を用いて説明する。
以下では、正規表現として、特に明示していない限り、一般的に普及しているものを想定して説明する。一般的な正規表現においては、例えば、
(1)<通常の文字>は、通常の文字を照合する。
(2)¥<特殊文字>は、特殊文字(「|」、「?」、「*」、「+」「¥」、「^」など)を照合する。
(3)[abc...]は、文字abc...中の任意の1文字を照合する。
(4)[a−z]は、文字コードがaからzまでの範囲にある任意の1文字を照合する。
(5)[^abc...]は、文字abc...以外の任意の1文字を照合する。
(6)[^a−z]は、文字コードがaからzまでの範囲にはない任意の1文字を照合する。
(7)^は、行の先頭を照合する。
(8)$は、行の末尾を照合する。
(9)<正規表現>?は、<正規表現>が0回又は1回現れるものを照合する。
(10)<正規表現>*は、<正規表現>が0回又は任意の回数繰り返されるものを照合する。
(11)<正規表現>+は、<正規表現>が1回以上繰り返されるものを照合する。
(12)<正規表現>{n}は、<正規表現>がn回繰り返されるものを照合する。
(13)<正規表現>{n,}は、<正規表現>がn回以上繰り返されるものを照合する。
(14)<正規表現>{,m}は、<正規表現>が0回以上m回以下繰り返されるものを照合する。
(15)<正規表現>{n,m}は、<正規表現>がn回以上m回以下繰り返されるものを照合する。
(16)<正規表現1>|<正規表現2>は、<正規表現1>又は<正規表現2>を照合する。
(17)<正規表現1><正規表現2>は、前半部分が<正規表現1>で後半部分が<正規表現2>であるものを照合する。
以下では、原則として、正規表現はダブルクォーテーションで囲って“<正規表現>”という形式で示すものとする。
実施の形態1.
図1は、本実施の形態に係る正規表現生成装置100の構成を示すブロック図である。
図1において、正規表現生成装置100は、属性範囲条件入力部101、演算部102、属性値記憶部103、正規表現生成部104、正規表現結合部105、出力部106を備える。また、正規表現生成装置100は、記憶装置151、処理装置152、入力装置153、出力装置154などのハードウェア装置を備える(又はこれらのハードウェア装置が正規表現生成装置100に接続される)。ハードウェア装置は正規表現生成装置100の各部によって利用される。例えば、処理装置152は、正規表現生成装置100の各部でデータや情報の演算、加工、読み取り、書き込みなどを行うために利用される。記憶装置151は、そのデータや情報を記憶するために利用される。また、入力装置153は、そのデータや情報を入力するために、出力装置154は、そのデータや情報を出力するために利用される。
属性範囲条件入力部101は、属性範囲条件データを入力装置153から入力する。属性範囲条件データは、属性値の下限値と上限値と書式とを示す属性範囲条件のデータである。例えば、属性値を123〜7654の範囲の整数値とした場合、下限値は123、上限値は7654、書式は3〜4桁(最大4桁)の整数値型となる。この例では、属性範囲条件入力部101は、属性値の書式として、属性値が数値であることを示す属性範囲条件データを入力することとなるが、例えば、属性値が文字列であれば、属性範囲条件入力部101は、属性値の書式として、属性値が文字列であることを示す属性範囲条件データを入力することとなる。
演算部102は、属性範囲条件入力部101により入力された属性範囲条件データが示す書式に基づいて、第1の値と第2の値とを処理装置152で演算する。第1の値は、属性範囲条件入力部101により入力された属性範囲条件データが示す下限値以上の属性値であって、最下位桁から少なくとも1桁が当該桁の最大値である属性値である。上記の例のように、下限値を123とした場合、第1の値は129、199、999、6999、7599、7649などとなる。一方、第2の値は、属性範囲条件入力部101により入力された属性範囲条件データが示す上限値以下の属性値であって、最下位桁から少なくとも1桁が当該桁の最小値である属性値である。上記の例のように、上限値を7654とした場合、第2の値は130、200、1000、7000、7600、7650などとなる。
特に本実施の形態では、演算部102は、第1の値として、属性範囲条件入力部101により入力された属性範囲条件データが示す下限値と桁数が同じで少なくとも最上位桁以外の桁が各桁の最大値である属性値を演算する。上記の例のように、下限値を123とした場合、第1の値は199、999などとなる。また、演算部102は、第2の値として、属性範囲条件入力部101により入力された属性範囲条件データが示す上限値と桁数が同じで少なくとも最上位桁以外の桁が各桁の最小値である属性値を演算する。上記の例のように、上限値を7654とした場合、第2の値は1000、7000などとなる。
さらに本実施の形態では、演算部102は、第1の値として、属性範囲条件入力部101により入力された属性範囲条件データが示す下限値と最上位桁が同じ値でそれ以外の桁が各桁の最大値である属性値を演算する。上記の例のように、下限値を123とした場合、第1の値は199となる。また、演算部102は、第2の値として、属性範囲条件入力部101により入力された属性範囲条件データが示す上限値と最上位桁が同じ値でそれ以外の桁が各桁の最小値である属性値を演算する。上記の例のように、上限値を7654とした場合、第2の値は7000となる。
属性値記憶部103は、属性範囲条件入力部101により入力された属性範囲条件データが示す下限値と上限値と、演算部102により演算された第1の値と第2の値とを、記憶装置151に記憶する。
正規表現生成部104は、属性値記憶部103により記憶された下限値から第1の値までの属性値を正規表現で表す下位領域データ(以下、単に「正規表現」、又は「下位領域の正規表現」などという場合がある)と、属性値記憶部103により記憶された第2の値から上限値までの属性値を正規表現で表す上位領域データ(以下、単に「正規表現」、又は「上位領域の正規表現」などという場合がある)とを、処理装置152で生成する。上記の例のように、下限値が123、上限値が7654、第1の値が199、第2の値が7000となる場合、下位領域データは、
“12[3−9]|1[3−9][0−9]”(123〜199の正規表現)、
上位領域データは、
“7[0−5][0−9][0−9]|76[0−4][0−9]|765[0−4]”(7000〜7654の正規表現)
などとなる。また、正規表現生成部104は、属性値記憶部103により記憶された第1の値と第2の値との間に属性値が存在する場合には、当該属性値を正規表現で表す中位領域データ(以下、単に「正規表現」、又は「中位領域の正規表現」などという場合がある)を処理装置152で生成する。上記の例のように、第1の値が199、第2の値が7000となる場合、中位領域データは、
“[2−9][0−9][0−9]|[1−6][0−9][0−9][0−9]”(200〜6999の正規表現)
などとなる。
正規表現結合部105は、正規表現生成部104により生成された下位領域データと上位領域データと中位領域データとを処理装置152で結合して、属性値記憶部103により記憶された下限値から上限値までの属性値を正規表現で表す正規表現データ(以下、単に「正規表現」、又は「属性値の正規表現」という場合がある)を生成する。上記の例のように、下位領域データが“12[3−9]|1[3−9][0−9]”、上位領域データが“7[0−5][0−9][0−9]|76[0−4][0−9]|765[0−4]”、中位領域データが“[2−9][0−9][0−9]|[1−6][0−9][0−9][0−9]”となる場合、正規表現データは、
“(12[3−9]|1[3−9][0−9])|([2−9][0−9][0−9]|[1−6][0−9][0−9][0−9])|(7[0−5][0−9][0−9]|76[0−4][0−9]|765[0−4])”
などとなる。
出力部106は、正規表現結合部105により生成された正規表現データを出力装置154に出力する。
このように、本実施の形態において、正規表現生成装置100は、検索条件として属性値の値域に含まれる値の下限値と上限値とを指定する属性範囲条件を入力とし、これを、属性範囲条件に指定された範囲に含まれる属性値を表現する文字列を照合するための正規表現に変換する検索条件生成方式、又は、この方式を計算機上で実行するための検索条件生成プログラムを実装するものである。
上記検索条件生成方式では、例えば、数値の範囲を選択する属性範囲条件を正規表現に変換する。また、例えば、文字列の範囲を選択する属性範囲条件を正規表現に変換する。
上記検索条件生成方式では、例えば、属性の下限値、上限値、属性の書式(属性のデータ型を含む)からなる属性範囲条件を、
属性範囲条件=(0,255,%3d)
と表記して入力する。ここでは、一例として、
属性の下限値=0
属性の上限値=255
属性の書式(桁数とデータ型)=「(最大)3桁の整数値」
としている。この例では、属性の書式を表すのに、C言語におけるprintfなどの書式付き出力関数の書式指定の表記法を流用しているが、同等の条件を指定することが可能であれば、同じ表記法である必要はない。また、同様の条件を入力することができるのであれば、その入力方法は問わない。
上記の属性範囲条件を入力した場合、正規表現生成装置100により、その下限値から上限値までの範囲に含まれる属性値を表現する文字列を照合するための正規表現が、
正規表現=“[^0−9]([0−9]|[1−9][0−9]|1[0−9][0−9]|2[0−4][0−9]|25[0−5])[^0−9]”
などとして出力される。なお、上記の属性範囲条件を構成する項目のうち、全てが揃っている必要はない。例えば、下限値がなければ、下限値を属性値のとりうる値の最小値として扱ってもよい(上記の例では、下限値=0となる)。また、例えば、上限値がなければ、上限値を属性値のとりうる値の最大値として扱ってもよい(上記の例では、上限値=∞となる)。また、例えば、属性の書式が整数値であることが示されていなければ、属性のデータ型が文字列であると推定してもよいし、下限値と上限値が整数値であることから属性のデータ型が整数値であると推定してもよい。
上記検索条件生成方式は、以下でも述べるように、例えば、PC(パーソナルコンピュータ)やPCサーバなどの計算機上で動作するプログラムとして実現してもよいし、本方式を実装した機能部を備えたハードウェアとして実装してもよい。
図2は、正規表現生成装置100の外観の一例を示す図である。
図2において、正規表現生成装置100は、システムユニット910、CRT(Cathode・Ray・Tube)やLCD(液晶ディスプレイ)の表示画面を有する表示装置901、キーボード902(K/B)、マウス903、FDD904(Flexible・Disk・Drive)、CDD905(Compact・Disc・Drive)、プリンタ装置906などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。システムユニット910は、コンピュータであり、LAN942(ローカルエリアネットワーク)、ゲートウェイ941を介してインターネット940に接続されている。
図3は、正規表現生成装置100のハードウェア資源の一例を示す図である。
図3において、正規表現生成装置100は、プログラムを実行するCPU911(Central・Processing・Unit)(「演算装置」、「マイクロプロセッサ」、「マイクロコンピュータ」、「プロセッサ」ともいう)を備えている。CPU911は、処理装置152の一例である。CPU911は、バス912を介してROM913(Read・Only・Memory)、RAM914(Random・Access・Memory)、通信ボード915、表示装置901、キーボード902、マウス903、FDD904、CDD905、プリンタ装置906、磁気ディスク装置920と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置920の代わりに、光ディスク装置、メモリカードリーダライタなどの記憶媒体が用いられてもよい。
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、磁気ディスク装置920の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置151の一例である。通信ボード915、キーボード902、マウス903、FDD904、CDD905などは、入力装置153の一例である。また、通信ボード915、表示装置901、プリンタ装置906などは、出力装置154の一例である。
通信ボード915は、LAN942などに接続されている。通信ボード915は、LAN942に限らず、インターネット940、あるいは、IP−VPN(Internet・Protocol・Virtual・Private・Network)、広域LAN、ATM(Asynchronous・Transfer・Mode)ネットワークなどのWAN(ワイドエリアネットワーク)などに接続されていても構わない。インターネット940あるいはWANなどに接続されている場合、ゲートウェイ941は不要となる。
磁気ディスク装置920には、オペレーティングシステム921、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。プログラム群923のプログラムは、CPU911、オペレーティングシステム921、ウィンドウシステム922により実行される。プログラム群923には、本実施の形態の説明において「〜部」、「〜手段」として説明する機能を実行するプログラムが記憶されている。プログラムは、CPU911により読み出され実行される。また、ファイル群924には、本実施の形態の説明において、「〜データ」、「〜情報」、「〜ID(IDentifier)」、「〜フラグ」、「〜結果」として説明するデータや情報や信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」や「〜テーブル」の各項目として記憶されている。「〜ファイル」や「〜データベース」や「〜テーブル」は、ディスクやメモリなどの記憶媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶されたデータや情報や信号値や変数値やパラメータは、読み書き回路を介してCPU911によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・制御・出力・印刷・表示などのCPU911の処理(動作)に用いられる。抽出・検索・参照・比較・演算・計算・制御・出力・印刷・表示などのCPU911の処理中、データや情報や信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
また、本実施の形態の説明において説明するブロック図やフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号は、RAM914などのメモリ、FDD904のフレキシブルディスク(FD)、CDD905のコンパクトディスク(CD)、磁気ディスク装置920の磁気ディスク、その他光ディスク、ミニディスク(MD)、DVD(Digital・Versatile・Disc)などの記録媒体に記録される。また、データや信号は、バス912や信号線やケーブルその他の伝送媒体により伝送される。
また、本実施の形態の説明において「〜部」、「〜手段」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜工程」、「〜手順」、「〜処理」であってもよい。即ち、「〜部」、「〜手段」として説明するものは、ROM913に記憶されたファームウェアで実現されていても構わない。あるいは、ソフトウェアのみ、あるいは、素子・デバイス・基板・配線などのハードウェアのみ、あるいは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実現されていても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVDなどの記録媒体に記憶される。このプログラムはCPU911により読み出され、CPU911により実行される。即ち、プログラムは、本実施の形態の説明で述べる「〜部」、「〜手段」としてコンピュータを機能させるものである。あるいは、本実施の形態の説明で述べる「〜部」、「〜手段」の手順や方法をコンピュータに実行させるものである。
以下では、説明をより具体的にするため、正規表現生成装置100が図2、図3に例示したコンピュータとハードウェア資源により実現されているものとする。
図4は、本実施の形態に係る正規表現生成方法を示すフローチャートである。図4のフローチャートに示すフローは、正規表現生成装置100を実現するコンピュータ上で実行されるプログラム(正規表現生成プログラム)の処理手順に相当する。この処理手順において、正規表現生成プログラムは、以下に示す各処理をコンピュータに実行させる。
正規表現生成装置100の利用者がキーボード902やマウス903で属性範囲条件データを指定すると、属性範囲条件入力部101は、その属性範囲条件データをキーボード902やマウス903から入力する(ステップS101:属性範囲条件入力処理)。
演算部102は、属性範囲条件入力部101により入力された属性範囲条件データが示す書式に基づいて、第1の値と第2の値とをCPU911で演算する(ステップS102の一部:演算処理)。属性値記憶部103は、属性範囲条件入力部101により入力された属性範囲条件データが示す下限値と上限値と、演算部102により演算された第1の値と第2の値とを、RAM914に記憶する(ステップS102の一部:属性値記憶処理)。
ステップS102において、演算部102は、第1の値と第2の値とを演算することにより、属性範囲条件の下限値から上限値までの範囲に含まれる属性値を、下位、中位、上位の3領域に分割している。3領域のうち、中位領域は、その範囲に含まれる属性値を半固定的に正規表現に変換可能な値の範囲である。下位領域は、属性範囲条件の下限値(即ち、属性値の下限値)から中位領域の下限値の1つ下(即ち、第1の値)までの値の範囲のことを指す。上位領域は、中位領域の上限値の1つ上(即ち、第2の値)から属性範囲条件の上限値(即ち、属性値の上限値)までの値の範囲のことを指す。各領域の算出の方法は、後で具体例を交えて説明する。
正規表現生成部104は、属性値記憶部103により記憶された第1の値と第2の値との間に属性値が存在する場合には、当該属性値を正規表現で表す中位領域データをCPU911で生成する(ステップS103:正規表現生成処理の一部)。第1の値と第2の値との間に属性値が存在しない場合には、中位領域データは生成されない。正規表現生成部104は、属性値記憶部103により記憶された下限値から第1の値までの属性値を正規表現で表す下位領域データをCPU911で生成する(ステップS104:正規表現生成処理の一部)。正規表現生成部104は、属性値記憶部103により記憶された第2の値から上限値までの属性値を正規表現で表す上位領域データをCPU911で生成する(ステップS105:正規表現生成処理の一部)。
ステップS103、S104、S105において、正規表現生成部104は、中位、下位、上位の3領域のそれぞれについて、個別に対応する正規表現を生成している。ステップS103、S104、S105の処理は順序に依存しないため、任意の順序で実行してよい。
正規表現結合部105は、正規表現生成部104により生成された下位領域データと上位領域データと中位領域データとをCPU911で結合して(ステップS103で中位領域データが生成されなかった場合には、下位領域データと上位領域データのみを結合することになる)、属性値記憶部103により記憶された下限値から上限値までの属性値を正規表現で表す正規表現データを生成する(ステップS106:正規表現結合処理)。
出力部106は、正規表現結合部105により生成された正規表現データを表示装置901の画面などに出力する(ステップS107:出力処理)。正規表現生成装置100の利用者は、この正規表現データを検索条件として、前述したログ専用データベースなどに入力することにより、ログなどの検索を容易に行うことができる。
以下、正規表現を生成する処理の流れを、例を交えて説明する。ここで説明するのは、属性範囲条件の下限値Aと上限値Bに対して、A≦X≦Bを満たす値X(下限値Aから上限値Bまでの属性値X)を表現する文字列を照合するための正規表現を生成する処理の流れである。
初めにここでは属性値の下限値と上限値の桁数が等しい場合に限定して、次のように表すものとする。
下限値A:An−1...A
上限値B:Bn−1...B
ここで、添え字が大きいほど上位の桁とする。
属性値を構成する属性要素A、B(1≦i≦n)は、それぞれ1個の数字や文字で、その値域をv≦A、B≦vとする。ただし、最上位桁のみv≦A、B≦vとする。ここでは簡単のために、最上位桁を除く全ての桁の値域は同じであるとする。また、(vで「k桁目の値がv」であることを表すものとする。さらに、この属性値の大小関係は以下の基準で決定されるものとする。
=B,An−1=Bn−1,...,Ak+1=Bk+1(1≦k≦n)のとき、B>AならばB>A
+1と記述してAの値を1大きくすることとし、A=vの場合A+1=vj+1とする。ただし、A=vの場合はA+1=vとし、さらにAi+1+1とする。同様に、A−1と記述してAの値を1小さくすることとし、A=vの場合A−1=vj−1とする。ただし、A=vの場合はA−1=vとし、さらにAi+1−1とする。属性値Aを1大きくすることをA+1と記述し、A+1を意味するものとする。同様に、属性値Aを1小さくすることをA−1と記述し、A−1を意味するものとする。
このような特徴を持つ属性値として代表的なものに、整数値(絶対値)がある。
ここで、下限値Aと上限値Bが等しい場合は、ステップS102を実行するまでもなく正規表現として以下を出力するだけでよい。
正規表現:“An−1...A
以降は、下限値と上限値が等しくない場合について説明する。
ステップS102では、演算部102は、属性値を下位、中位、上位の3領域に分割するが、その中でも最初に中位領域を求める。中位領域は、図5に示した処理の流れに従って、以下のように値域を求めることができる。図5では中位領域の下限値(即ち、第1の値より1大きい値)をL、上限値をU(即ち、第2の値より1小さい値)としている。
図5において、演算部102は、最上位桁(n桁目)から順番に(ステップS201)属性値の下限値Aと上限値Bの同じ桁の値をCPU911により比較していく(ステップS202)。ある桁(i桁目)について、AとBとで値が同じ場合、演算部102は、LとUの同じ桁(L、U)もその値(A)に設定し(ステップS203)、次の桁について(ステップS204)AとBを比較する。比較した桁について、AとBとで値が異なる場合、演算部102は、Lの同じ桁(L)をAの値より1大きい値(A+1)に設定するとともに、Uの同じ桁(U)をBの値より1小さい値(B−1)に設定する(ステップS205)。そして、次の桁から最下位桁までの各桁について(ステップS206、S207)、Lをその桁の最小値(v)に設定するとともに、Uをその桁の最大値(v)に設定する(ステップS208)。その結果、下記の通りLとUが得られる。このとき、属性値記憶部103はLとUをRAM914に記憶している。
中位領域(下限値L):A...Ak+1(A+1)(vk−1...(v
中位領域(上限値U):B...Bk+1(B−1)(vk−1...(v
ただし、A=B,An−1=Bn−1,...,Ak+1=Bk+1(1≦k≦n)
次に、中位領域の下限値を1小さくした値を下位領域の上限値(即ち、第1の値)とし、下位領域は以下のように求める。このとき、属性値記憶部103は属性値の下限値Aと第1の値(L−1)をRAM914に記憶している。
下位領域(下限値A):An−1...A
下位領域(上限値):A...A(vk−1...(v
また、中位領域の上限値を1大きくした値を上位領域の下限値(即ち、第2の値)とし、上位領域は以下のように求める。このとき、属性値記憶部103は第2の値(U+1)と属性値の上限値BをRAM914に記憶している。
上位領域(下限値):B...B(vk−1...(v
上位領域(上限値B):Bn−1...B
ステップS103において、正規表現生成部104は、中位領域の正規表現を生成する。中位領域に対応する正規表現は、中位領域の非共通部分の桁数kとA、Bの値にのみ依存し、以下の通り生成することができる。k+1桁目からn桁目までの値は、ステップS106において、共通部分として処理できるため、ここでは省略している。
中位領域の正規表現:“[(A+1)−(B−1)][v−v]{k−1}”
ここで、B−A=1の場合、(A+1)>(B−1)となるが、この場合は中位領域の正規表現を出力しないものとする。それ以外は同様に処理することができる。
なお、上記正規表現において、k−1=1であれば末尾の“{1}”を省略してもよい。また、k−1=0であれば末尾の“[v−v]{0}”を省略してもよい。以降の説明においても、正規表現中の“[v−v]{1}”は“[v−v]”と記述できるものとし、“[v−v]{0}”は省略できるものとする。また、“[v−v]”は単に“v”と記述できるものとする。
図6は、以下のような属性値の範囲に対応する正規表現の生成処理の流れを示す。
下限値:Ak−1...A
上限値:(v(vk−1...(v(ただし、v≧A
図6の処理の流れでは、正規表現生成部104は、最下位の桁から上位の桁に向かって処理を進めている。ここでの入力は、下限値A...A、上限値(v(vk−1...(v、及び桁数kである。ステップS301において、正規表現生成部104は、RAM914内の正規表現の格納領域(E)に初期値として“A...A[A−v]”をセットする。ステップS302以降では、下位2桁目から始めてk−1桁目までステップS304〜S306の処理を繰り返す。ステップS303において、処理の対象がk桁目より下位の場合(YES)、ステップS304において、その桁の値がvか否かによって処理を切り分ける。vの場合には(YES)、正規表現生成部104は特に何も出力せずに次の桁の処理に移行する。vではない場合には(NO)、正規表現生成部104は、正規表現の出力領域(E)の末尾に“|A...Ai+1[(A+1)−v][v−v]{i−1}”を追加し、次の桁の処理に移行する。ステップS303において、k−1桁目までの処理が完了していた場合は(NO)、ステップS307に進む。ステップS307において、Aとvが等しい場合は(YES)、正規表現生成部104は何もせずに処理を終了する。Aとvが等しくない場合は(NO)、正規表現生成部104はステップS308に進み、正規表現格納領域(E)の末尾に“|[(A+1)−v][v−v]{k−1}”を追加し、処理を終了する。処理が終了した時点で正規表現の格納領域(E)に格納されているものが、上記の範囲に対応する正規表現である。
ステップS104における下位領域の正規表現生成処理の流れは、図6においてA=B,...,Ak+1=Bk+1(1≦k≦n)を満たすkに対して下限値と上限値を以下のようにした場合に相当する。
下限値:Ak−1...A
上限値:A(vk−1...(v
そして、ステップS104において、正規表現生成部104が生成する下位領域の正規表現は以下の通りとなる。k+1桁目からn桁目までの値は、ステップS106において、共通部分として処理できるため、ここでも省略している。
下位領域の正規表現:“A...A[A−v]|A...A[(A+1)−v][v−v]|...|A[(Ak−1+1)−v][v−v]{k−2}”
図7は、以下のような属性値の範囲に対応する正規表現の生成処理の流れを示す。
下限値:(v(vk−1...(v(ただし、v≦B
上限値:Bk−1...B
図7の処理の流れでは、正規表現生成部104は、図6の処理の流れ同様に、最下位の桁から上位の桁に向かって処理を進めている。ここでの入力は、下限値(v(vk−1...(v、上限値B...B、及び桁数kである。ステップS401において、正規表現生成部104は、RAM914内の正規表現の格納領域(E)に初期値として“B...B[v−B]”をセットする。ステップS402以降では、下位2桁目から始めてk−1桁目までステップS404〜S406の処理を繰り返す。ステップS403において、処理の対象がk桁目より下位の場合(YES)、ステップS404において、その桁の値がvか否かによって処理を切り分ける。vの場合には(YES)、正規表現生成部104は特に何も出力せずに次の桁の処理に移行する。vではない場合には(NO)、正規表現生成部104は、正規表現の出力領域(E)の末尾に“|B...Bi+1[v−(B−1)][v−v]{i−1}”を追加し、次の桁の処理に移行する。ステップS403において、k−1桁目までの処理が完了していた場合は(NO)、ステップS407に進む。ステップS407において、Bとvが等しい場合は(YES)、正規表現生成部104は何もせずに処理を終了する。Bとvが等しくない場合は(NO)、正規表現生成部104はステップS408に進み、正規表現格納領域(E)の末尾に“|[v−(B−1)][v−v]{k−1}”を追加し、処理を終了する。処理が終了した時点で正規表現の格納領域(E)に格納されているものが、上記の範囲に対応する正規表現である。
ステップS105における上位領域の正規表現生成処理の流れは、図7においてA=B,...,Ak+1=Bk+1(1≦k≦n)を満たすkに対して下限値と上限値を以下のようにした場合に相当する。
下限値:B(vk−1...(v
上限値:Bk−1...B
そして、ステップS105において、正規表現生成部104が生成する上位領域の正規表現は以下の通りとなる。k+1桁目からn桁目までの値は、ステップS106において、共通部分として処理できるため、ここでも省略している。
上位領域の正規表現:“B...B[v−B]|B...B[v−(B−1)][v−v]|...|B[v−(Bk−1−1)][v−v]{k−2}”
以上、属性値の範囲を下位、中位、上位領域に分割し、個別に対応する正規表現を生成する処理について説明した。次に、ステップS106において、正規表現結合部105が、それらの生成された正規表現を結合して生成する正規表現について説明する。
正規表現結合部105は、下位、中位、上位領域の正規表現を結合し、結合した正規表現に、ステップS103〜S105において省略されていた共通部分(k+1桁目からn桁目まで)を追加する。これにより最終的に生成される正規表現は以下のような形式となる。
“A...Ak+1(<下位領域の正規表現>|<中位領域の正規表現>|<上位領域の正規表現>)”
また、中位領域がない場合に生成される正規表現は以下のような形式となる。
“A...Ak+1(<下位領域の正規表現>|<上位領域の正規表現>)”
上記の正規表現では、A≦X≦Bを満たす値Xだけでなく、値vX、Xv、vXvを表す文字列などもヒットしてしまう。そこで、このようなヒットを避けたい場合には、生成した正規表現の前後に除外文字指定“[^v−v]”を追加するとよい。
以下、属性範囲条件の上限値と下限値の桁数が異なる場合について説明する。即ち、以下のような場合である。
下限値A:An−1...A
上限値B:Bm−1...B(m>n)
属性値の桁数が異なるとき、m>nならばB>Aである。又は、下限値Aのn+1桁目からm桁目までは、暗黙の値としてvがあるものと考えることもできる。
まず、m−n=1の場合は、以下のように下位、中位、上位領域を求めることができる。
下位領域:An−1...A〜(v(vn−1...(v(v
中位領域:なし
上位領域:(v(vm−1...(v(v〜Bm−1...B
以降の処理の流れについては、図4、図6、図7に示した処理の流れと同じである。
もしくは、m−n=1の場合も、図5の処理の流れに従って、以下のように中位領域を求めてもよい。
中位領域:(A+1)(vn−1...(v(v〜(B−1)(vm−1...(v(v
このとき、下位領域と上位領域は以下のようになる。
下位領域:An−1...A〜A(vn−1...(v(v
上位領域:B(vm−1...(v(v〜Bm−1...B
そして、中位領域の正規表現は以下のようになる。
中位領域の正規表現:“[(A+1)−v][v−v]{n−1}|[v−(B−1)][v−v]{m−1}”
また、m−n>2の場合は、下位、中位、上位領域を以下のようにして同様に処理することができる。
下位領域:An−1...A〜(v(vn−1...(v(v
中位領域:(vn+1(v...(v(v〜(vm−1(vm−2...(v(v
上位領域:(v(vm−1...(v(v〜Bm−1...B
そして、中位領域の正規表現は以下のようになる。
中位領域の正規表現:“[v−v][v−v]{n,m−2}”
上記の方式を0以上の整数値に適用した場合の具体例を示す。10進数の場合、v=0、v=9である。
(例1−1)属性範囲条件:123〜246
下位領域:123〜199
中位領域:200〜199(正規表現は生成されない)
上位領域:200〜246
正規表現:“(12[3−9]|1[3−9][0−9])|(24[0−6]|2[0−3][0−9])”
(例1−2)属性範囲条件:2345〜7654
下位領域:2345〜2999
中位領域:3000〜6999
上位領域:7000〜7654
正規表現:“(234[5−9]|23[5−9][0−9]|2[4−9][0−9]{2})|[3−6][0−9]{3}|(765[0−4]|76[0−4][0−9]|7[0−5][0−9]{2})”
(例1−3)属性範囲条件:7531〜18939
下位領域:7531〜9999
中位領域:10000〜17999
上位領域:18000〜18939
正規表現:“(753[1−9]|75[4−9][0−9])|7[6−9][0−9]{2}|[89][0−9]{3})|1[0−7][0−9]{3}|(1893[0−9]|189[0−2][0−9]|18[0−8][0−9]{2})”
あるいは、
下位領域:7531〜7999
中位領域:8000〜17999
上位領域:18000〜18939
正規表現:“(753[1−9]|75[4−9][0−9])|7[6−9][0−9]{2})|([8−9][0−9]{3}|1[0−7][0−9]{3})|(1893[0−9]|189[0−2][0−9]|18[0−8][0−9]{2})”
(例1−4)属性範囲条件:304〜765432
下位領域:304〜999
中位領域:1000〜99999
上位領域:100000〜765432
正規表現:“(30[4−9]|3[1−9][0−9]|[4−9][0−9]{2})|[1−9][0−9]{3,4}|(76543[0−2]|7654[0−2][0−9]|765[0−3][0−9]{2}|76[0−4][0−9]{3}|7[0−5][0−9]{4}|[1−6][0−9]{5})”
数値の場合、数値の前に0の連続が許容される場合がある。属性範囲条件にて、「数値の先頭部分に任意の数の0の連続がある」という書式指定がなされた場合には、図4のステップS107において、正規表現結合部105は、正規表現を以下のように生成する。
正規表現:“[^1−9]0*(<下位領域の正規表現>|<中位領域の正規表現>|<上位領域の正規表現>)[^0−9]”
また、属性範囲条件にて、「全体の桁数をtとし、不足する場合は先頭に0を補う」という書式指定(C言語のprintf関数の書式指定で記述するところの”%0td”)がなされた場合には、正規表現結合部105は、以下のように正規表現を生成することができる。
正規表現:“[^1−9]0{t−m,0}(0{m−n}<下位領域の正規表現>|<中位領域の正規表現>|<上位領域の正規表現>)[^0−9]”
ここで、中位領域の正規表現は以下のようになる。
中位領域の正規表現:“0{t−n−1}[1−9][0−9]{n}|0{t−n−2}[1−9][0−9]{n+1}|...|0{t−m−1}[1−9][0−9]{m}”
負の整数の場合は、正規表現生成部104が、まず絶対値に対して同様に正規表現を生成した後で、正規表現の先頭に負号を加えることで生成できる。また、属性値の範囲が0をまたがるような場合には、正(0以上)の領域と、負(0未満)の領域とに分けて処理を行えばよい。例えば、
下限値A:−An−1...A
上限値B:Bm−1...B
という属性範囲条件が与えられた場合は、
正の下限値:0
正の上限値:Bm−1...B
及び、
負の下限値:−An−1...A
負の上限値:−1
として個別に正規表現を生成し、正規表現結合部105が最後に以下のように結合すればよい。
正規表現:“<0〜Bの範囲の正規表現>|(−<1〜Aの絶対値の範囲の正規表現>)”
これまでの説明では、属性値の下限値A、上限値Bともに指定されている場合について示してきた。ここでは、上限値Bの指定がない場合や上限値が「無限大」と指定された場合について説明する。属性のデータ型として最大値B´が存在する場合は、正規表現結合部105は下限値Aから上限値B´までの正規表現を生成すればよい。属性のデータ型として最大値がない場合には、以下のように処理するとよい。
まず、正規表現結合部105は、下限値Aと同じ桁数の属性値の最大値について正規表現を生成する。即ち、以下のようなn桁の下限値と上限値について正規表現を生成する。
下限値A:A...A
上限値B´:(v...(v
その上で、正規表現結合部105は、n桁目より上位の属性値の正規表現“[v−v][v−v]{n,}”を追加する。生成される正規表現は以下の形式になる。
正規表現:“<A〜B´の範囲の正規表現>|[v−v][v−v]{n,}”
下限値Aの指定がない場合や下限値が「無限小」と指定された場合について説明する。まず、属性のデータ型として最小値A´があるならば、正規表現結合部105は下限値A´と上限値Bについて正規表現を生成するようにすればよい。例えば、検索対象の属性のデータ型が正の整数であれば最小値は1であるし、自然数であれば最小値は0である。負の整数値も含む場合は、正規表現結合部105は、これまでに示してきた手順に従って以下のような正規表現を生成すればよい。即ち、0〜Bの数値範囲と、1桁以上の負の数値として考える。なお、以下の正規表現の記述例では、0回以上の繰り返しを“{0,}”の代わりに“*”で表している。
正規表現:“<0〜Bの範囲の正規表現>|(−[1−9][0−9]*)”
数字に全角と半角数字が、アルファベット(英字)に大文字と小文字があるように、属性の各桁の値域が2種類以上存在する場合がある(v≦A≦v,w≦A≦w,...)。その場合でも、正規表現結合部105が、上で示した処理の流れを少し修正するだけで、対応する正規表現を生成することができる。即ち、2種類以上の属性値の記述を区別しないという指定がなされた場合には、選択「|」や文字クラスを使用して並べて記述することで生成することができる。例を示す。
(1)選択を使用する場合
修正前:“v[v−v]”
修正後:“(v[v−v]|w[w−w]|...)”
(2)文字クラスを使用する場合
修正前:“v[v−v]”
修正後:“[v...][v...][v−v−w...]”
数値の場合には、下位の桁から3桁ごとにカンマ「,」で区切られる場合がある。その場合の正規表現の記述は以下のようになる。このとき、上で示した処理の流れによると、下位領域や上位領域の正規表現は桁数が固定である。以下の例では、正規表現の選択記号「|」に囲まれた部分正規表現についてのみ示す。
修正前:“Am−1...An+1[v−v]{n}”
修正後:“Am−1...An−t+4,An−t+3...An+1[v−v]{t}(,[v−v]{3}){s}”
ここで、sはn/3の商、tはn/3の余剰とする。
このように、正規表現結合部105は、n+1桁目以上については、n−t+3×i桁目とn−t+3×i+1桁目との間にカンマを挿入するとよい(iは自然数)。
上記の例では、10進数の場合について示したが、v=0、v=Fとすれば16進数も同様に処理することができる。その他、本実施の形態と同様の形式を持つ属性であれば、いずれも同様に処理することができる。
さらに、ここまで、主に整数値の例を用いて説明してきたが、各桁の値は数字である必要はなく、1桁以上の数値や、順序のある単語の集合でもよい。例えば、日付の月の表記の仕方には、月の英語名(January、February、March、・・・、December)やその略語(Jan、Feb、Mar、・・・、Dec)が使用される場合もある。この場合、月を12個の値を持つ1個の属性要素と見なしてもよい。このとき、v=“Jan”、v=“Feb”、v=“Mar”、・・・、v12=“Dec”と定義すれば、本実施の形態において示した手順で処理することができる。このような処理方法は、属性値が後述する実施の形態3に示す形式を持つような場合、特に有効である。
以上のように、本実施の形態に係る正規表現生成装置100によれば、整数値のような特徴を持った属性の下限値、上限値、書式などを指定した属性範囲条件から、その下限値から上限値までの範囲に含まれる属性値を表現する文字列を照合するための正規表現を自動的に生成することができる。これにより、従来は正確に記述することが困難であった複雑な属性範囲条件を照合する正規表現を、特別な知識も試行錯誤も必要なく、容易に短時間で得ることができる。
実施の形態2.
本実施の形態について、主に実施の形態1との差異を説明する。
実施の形態1で説明したように、整数値のデータ型や書式の指定の仕方には様々なものがある。例えば、符合の有無、最大桁数、何進数表記であるか、整数値の値域、数値の先頭の0の有無、カンマ区切りの有無、表記する文字の種類、・・・など、これらの書式を属性範囲条件で細かく指定するのは煩雑である。そこで、本実施の形態では、正規表現生成装置100において、予め設定された属性範囲条件を記憶装置151に記憶しておき、これを選択して利用できるようにする。
図8は、本実施の形態に係る正規表現生成装置100の構成を示すブロック図である。
図8において、正規表現生成装置100は、実施の形態1で説明した図1に示したものに加え、条件記憶部107、識別子入力部108を備える。
条件記憶部107は、複数の属性範囲条件データを予め記憶装置151に記憶しておく。条件記憶部107は、各属性範囲条件データを一意の識別子と対応付けて記憶装置151に記憶する。
識別子入力部108は、任意の識別子を入力装置153から入力する。
属性範囲条件入力部101は、識別子入力部108により入力された識別子に対応付けて条件記憶部107により記憶された属性範囲条件データを入力する。
図9は、本実施の形態に係る正規表現生成方法を示すフローチャートである。図9のフローチャートに示すフローは、正規表現生成装置100を実現するコンピュータ上で実行されるプログラム(正規表現生成プログラム)の処理手順に相当する。この処理手順において、正規表現生成プログラムは、以下に示す各処理をコンピュータに実行させる。
正規表現生成装置100の利用者がキーボード902やマウス903で識別子を指定すると、識別子入力部108は、その識別子をキーボード902やマウス903から入力する(ステップS501:識別子入力処理)。属性範囲条件入力部101は、条件記憶部107により磁気ディスク装置920に予め記憶されている複数の属性範囲条件データの中から、識別子入力部108により入力された識別子に対応付けて記憶された属性範囲条件データを読み出して入力する(ステップS502:属性範囲条件入力処理)。ステップS502の後は、実施の形態1で説明した図4のフローチャートと同様に、ステップS103〜S107の処理が実行される。
このように、本実施の形態において、正規表現生成装置100は、正規表現を生成する処理のために参照可能な記憶装置151内の記憶領域の一部に、正規表現生成規則(即ち、属性範囲条件)を記憶するための領域を設けておき、識別番号や識別名(いずれも識別子の一例)と属性値の書式や正規表現の生成手順(いずれも属性範囲条件に含まれる情報の一例)を組にして記憶しておく。属性範囲条件として、属性の下限値と上限値は、実施の形態1と同様にその都度指定し、属性の書式だけは、それを特定する識別番号や識別名を指定するようにしてもよい。また、このとき、属性範囲条件入力部101が、指定された識別番号や識別名に対応する書式の情報や正規表現生成手順を記憶装置151から読み出し、正規表現生成部104や正規表現結合部105が、その手順に従って正規表現を生成するようにしてもよい。あるいは、属性範囲条件入力部101が、属性の下限値と上限値を文字列で入力するようにし、正規表現生成部104や正規表現結合部105が、入力された文字列を分析してカンマ区切りの有無などを自動的に判別するようにしてもよい。
さらに、正規表現生成規則を記憶するための領域を書き換え可能な領域に定義しておき、条件記憶部107が、属性の書式を表す識別番号や識別名と、属性のデータ型、書式、正規表現の生成手順などの情報をこの領域に追加できるようにしてもよい。
正規表現生成規則を記憶するための領域は、ディスク装置や不揮発性メモリなどの記憶装置151に記憶され、正規表現の生成手順を実行する処理装置152から読み出すことができるように構成してもよいし、実行時には高速な不揮発性メモリ上に記憶されるように構成してもよい。
実施の形態3.
本実施の形態について、主に実施の形態1との差異を説明する。
本実施の形態は、実施の形態1と異なる形式の属性について、正規表現を生成する処理の流れを説明するものである。本実施の形態における正規表現生成装置100の構成は、実施の形態1で説明した図1に示したものと同じである。また、正規表現生成装置100の動作(正規表現生成方法、正規表現生成プログラムの処理手順)は、実施の形態1で説明した図4に示したものと同じである。
以下、実施の形態1と同様に、正規表現を生成する処理の流れを、例を交えて説明する。ここで説明するのは、属性範囲条件の下限値Aと上限値Bに対して、A≦X<Bを満たす値X(下限値Aから上限値Bまでの属性値X)を表現する文字列を照合するための正規表現を生成する処理の流れである。
実施の形態1とは異なり、ここでの属性値を以下のように表すものとする。
下限値A:A...An−1
上限値B:B...Bm−1
、B(1≦i≦n、1≦j≦m)は、それぞれ1個の数字や文字で、その値域をv≦A、B≦vとする。本実施の形態における属性値の大小関係は、次の順序で決まるものとする。
(1)A=B,A=B,...,Ak−1=Bk−1(1≦k≦n又はm)のとき、B>AならばB>A
(2)A=B,A=B,...,A=Bでかつm>nならばB>A
+1と記述してAの値を1大きくすることとし、A=vの場合A+1=vj+1とする。ただし、A=vの場合はA+1=vとし、さらにAi+1+1とする。同様に、A−1と記述してAの値を1小さくすることとし、A=vの場合A−1=vj−1とする。ただし、A=vの場合はA−1=vとし、さらにAi+1−1とする。属性値Aを1大きくすることをA+1と記述し、A+1を意味するものとする。同様に、属性値Aを1小さくすることをA−1と記述し、A−1と意味するものとする。
このような特徴を持つ属性値としては、文字列(辞書式順)や小数点数の小数部分(小数点以下の値)などがある。
ここで、下限値Aと上限値Bが等しい場合は、ステップS102を実行するまでもなく以下の正規表現を出力するだけでよい。
正規表現:“A...An−1
以降は、下限値と上限値が等しくない場合について説明する。
ステップS102では、演算部102は、属性値を下位、中位、上位の3領域に分割する。このとき、まずは下限値と上限値で桁数の少ない方に合わせて考えるとよい。
まず、以下のようなr桁の下限値A´と上限値B´に対して、中位領域を求める。
下限値A´:A...Ar−1
上限値B´:B...Br−1
ここでrはnとmの値の小さい方とする。中位領域を求める処理の流れを図10に示す。図10は、図5のステップS201を「i=1」とし、ステップS204、S206を「i=i+1」とし、ステップS207を「i≦r?」としたものである。
図10において、演算部102は、最下位桁(1桁目)から順番に(ステップS601)属性値の下限値A´と上限値B´の同じ桁の値をCPU911により比較していく(ステップS602)。ある桁(i桁目)について、A´とB´とで値が同じ場合、演算部102は、LとUの同じ桁(L、U)もその値(A)に設定し(ステップS603)、次の桁について(ステップS604)A´とB´を比較する。比較した桁について、A´とB´とで値が異なる場合、演算部102は、Lの同じ桁(L)をA´の値より1大きい値(A+1)に設定するとともに、Uの同じ桁(U)をB´の値より1小さい値(B−1)に設定する(ステップS605)。そして、次の桁からr桁目までの各桁について(ステップS606、S607)、Lをその桁の最小値(v)に設定するとともに、Uをその桁の最大値(v)に設定する(ステップS608)。その結果、中位領域の下限値Lと上限値Uが得られる。このとき、属性値記憶部103はLとUをRAM914に記憶している。
上記の手順に従うと、演算部102は、次のように下位領域(A´〜L−1)、中位領域(L〜U)、上位領域(U+1〜B´)を求めることができる。
下位領域:A...Ar−1〜A...A(vk−1...(v
中位領域:A...Ak−1(A+1)(vk+1...(v〜B...Bk−1(B−1)(vk+1...(v
上位領域:B...B(vk−1...(v〜B...Br−1
ただし、A=B,...,Ak−1=Bk−1(1≦k≦r)
このとき、属性値記憶部103は下限値A´、上限値B´、第1の値(L−1)、第2の値(U+1)をRAM914に記憶している。
続いて、n>mの場合は、演算部102は、下位領域にr+1桁目からn桁目までを追加する。
下位領域:A...Ar+1...A〜A...A(vk−1...(v(vr+1...(v
一方、n<mの場合は、演算部102は、上位領域にr+1桁目からm桁目までを追加する。
上位領域:B...B(vk−1...(v(vr+1...(v〜B...Br+1...B
ステップS103において、正規表現生成部104は、中位領域の正規表現を生成する。中位領域の正規表現は、中位領域のA、Bの値にのみ依存し、以下の通り生成することができる。1桁目からk−1桁目までの値は、ステップS106において、共通部分として処理できるため、ここでは省略している。
中位領域の正規表現:“[(A+1)−(B−1)]”
ここで、B−A=1の場合、(A+1)>(B−1)となるが、この場合は中位領域の正規表現を出力しないものとする。それ以外は同様に処理することができる。
図11は、以下のような属性値の範囲に対応する正規表現の生成処理の流れを示す。
下限値:Ak−1...A
上限値:(v(vk−1...(v(ただし、v≧A
図11の処理の流れは、図6に示したものとほぼ同じであり、正規表現生成部104は、最下位の桁から上位の桁に向かって処理を進める。ステップS701において、正規表現生成部104は、RAM914内の正規表現の格納領域(E)に初期値として“A...Anー1[A−v]”をセットする。ステップS702以降では、下位2桁目から始めてk+1桁目までステップS704〜S706の処理を繰り返す。ステップS703において、処理の対象がk桁目より下位の場合(YES)、ステップS704において、その桁の値がvか否かによって処理を切り分ける。vの場合には(YES)、正規表現生成部104は特に何も出力せずに次の桁の処理に移行する。vではない場合には(NO)、正規表現生成部104は、正規表現の出力領域(E)の末尾に“|A...Ai−1[(A+1)−v]”を追加し、次の桁の処理に移行する。ステップS703において、k+1桁目までの処理が完了していた場合は(NO)、ステップS707に進む。ステップS707において、Aとvが等しい場合は(YES)、正規表現生成部104は何もせずに処理を終了する。Aとvが等しくない場合は(NO)、正規表現生成部104はステップS708に進み、正規表現格納領域(E)の末尾に“|[(A+1)−v]”を追加し、処理を終了する。処理が終了した時点で正規表現の格納領域(E)に格納されているものが、上記の範囲に対応する正規表現である。
ステップS104における下位領域の正規表現生成処理の流れは、図11においてA=B,...,Ak−1=Bk−1(1≦k≦n)を満たすkに対して下限値と上限値を以下のようにした場合に相当する。
下限値:Ak+1...A
上限値:A(vk+1...(v
そして、ステップS104において、正規表現生成部104が生成する下位領域の正規表現は以下の通りとなる。1桁目からk−1桁目までの値は、ステップS106において、共通部分として処理できるため、ここでも省略している。
下位領域の正規表現:“Ak+1...An−1[A−v]|Ak+1...An−2[(An−1+1)−v]|...|A[(Ak+1+1)−v]”
図12は、以下のような属性値の範囲に対応する正規表現の生成処理の流れを示す。
下限値:(v(vk+1...(v(ただし、v≦B
上限値:Bk+1...B
図12の処理の流れは、図7に示したものとほぼ同じであり、正規表現生成部104は、最下位の桁から上位の桁に向かって処理を進める。ステップS801において、正規表現生成部104は、RAM914内の正規表現の格納領域(E)に初期値として“B...Bm−1[v−(B−1)]”をセットする。ステップS802以降では、下位2桁目から始めてk+1桁目までステップS804〜S806の処理を繰り返す。ステップS803において、処理の対象がk桁目より下位の場合(YES)、ステップS804において、その桁の値がvか否かによって処理を切り分ける。vの場合には(YES)、正規表現生成部104は特に何も出力せずに次の桁の処理に移行する。vではない場合には(NO)、正規表現生成部104は、正規表現の出力領域(E)の末尾に“|B...Bi+1[v−(B−1)]”を追加し、次の桁の処理に移行する。ステップS803において、k+1桁目までの処理が完了していた場合は(NO)、ステップS807に進む。ステップS807において、Bとvが等しい場合は(YES)、正規表現生成部104は何もせずに処理を終了する。Bとvが等しくない場合は(NO)、正規表現生成部104はステップS808に進み、正規表現格納領域(E)の末尾に“|[v−(B−1)]”を追加し、処理を終了する。処理が終了した時点で正規表現の格納領域(E)に格納されているものが、上記の範囲に対応する正規表現である。
ステップS105における上位領域の正規表現生成処理の流れは、図12においてA=B,...,Akー1=Bkー1(1≦k≦m)を満たすkに対して下限値と上限値を以下のようにした場合に相当する。
下限値:B(vk+1...(v
上限値:Bk+1...B
そして、ステップS105において、正規表現生成部104が生成する上位領域の正規表現は以下の通りとなる。1桁目からk−1桁目までの値は、ステップS106において、共通部分として処理できるため、ここでも省略している。
上位領域の正規表現:“Bk+1...Bm−1[v−(B−1)]|Bk+1...Bm−2[v−(Bm−1−1)]|...|B[v−(Bk+1−1)]”
ステップS106において、正規表現結合部105は、ステップS103〜S105で個別に生成された下位、中位、上位領域の正規表現を結合し、結合した正規表現に、ステップS103〜S105で省略されていた共通部分(1桁目からk−1桁目まで)を追加して、属性範囲条件に対応する正規表現を生成する。この正規表現は、属性範囲条件の下限値と上限値の共通部分と、下位、中位、上位領域の正規表現から、以下のような形となる。
“A...Ak−1(<下位領域の正規表現>|<中位領域の正規表現>|<上位領域の正規表現>)”
また、中位領域がない場合に生成される正規表現は以下のような形式となる。
“A...Ak−1(<下位領域の正規表現>|<上位領域の正規表現>)”
このような正規表現では、正規表現に記述された1又はn又はm文字まで文字列を照合した時点で、文字の照合を停止してしまう。よって、それよりも長い文字列については、ヒットはするものの、その文字列の末尾の位置まではわからないことがある。そこで、正規表現にヒットする文字列の終端の位置まで知りたい場合は、正規表現の末尾に“[v−v]*”を追加すればよい。
また、上記の正規表現では、A≦X<Bを満たす値Xだけでなく、値vXもヒットしてしまう。そこで、このようなヒットを避けたい場合には、正規表現の先頭に除外文字指定“[^v−v]”を追加するとよい。
上記の方式を英小文字の文字列に適用した場合(全角英小文字又は半角英小文字いずれか1種類の場合)の具体例を示す。ここで、v=a、v=zである。
(例3−1)属性範囲条件:「end」〜「start」
下位領域:「end」〜「ezz」
中位領域:「faa」〜「rzz」
上位領域:「saaaa」〜「start」
正規表現:“(en[d−z]|e[o−z])|[f−r]|(star[a−s]|sta[a−q]|s[a−s])”
また、上記の方式を0<A、B≦1となる下限値Aと上限値Bに適用した場合の具体例を示す。
(例3−2)属性範囲条件:0.00321〜0.876
下位領域:0.00321〜0.09999
中位領域:0.100〜0.799
上位領域:0.800〜0.876
正規表現:“0.((0032[1−9]|003[3−9]|00[4−9]|0[1−9])|[1−7]|(87[0−5]|8[0−6]))”
これまでの説明では、属性値の下限値A、上限値Bともに指定されている場合について示してきた。ここでは、上限値Bの指定がない場合や上限値が「無限大」と指定された場合について説明する。属性のデータ型として最大値B´が存在する場合は、正規表現結合部105は下限値Aから上限値B´までの正規表現を生成すればよい。属性のデータ型として最大値がない場合には、以下のように処理するとよい。
まず、正規表現結合部105は、下限値Aと同じ桁数の属性値の最大値について正規表現を生成する。即ち、以下のようなn桁の下限値と上限値について正規表現を生成する。
下限値A:A...A
上限値B´:(v...(v
その上で、正規表現結合部105は、(v...(v...の正規表現“v{n}[v−v]*[v−v]”を追加する。生成される正規表現は以下の形式になる。
正規表現:“<A〜B´の範囲の正規表現>|v{n}[v−v]*[v−v]”
下限値Aの指定がない場合や下限値が「無限小」と指定された場合について説明する。まず、属性のデータ型として最小値A´があるならば、正規表現結合部105は下限値A´と上限値Bについて正規表現を生成するようにすればよい。それ以外の場合は、以下のような下限値A´と上限値Bについて正規表現を生成すればよい。
下限値A´:(v
上限値B:B...B
英字に大文字と小文字が、文字に全角文字と半角文字があるように、属性の各桁の値域が2種類以上存在する場合がある。その場合は、実施の形態1の属性と同様に、選択「|」や文字クラスを使用して並べて記述することにより、対応する正規表現を生成することができる。
以上のように、本実施の形態に係る正規表現生成装置100によれば、文字列のような特徴を持つ属性値の下限値、上限値、書式などを指定した属性範囲条件から、その下限値から上限値までの範囲に含まれる属性値を表現する文字列を照合するための正規表現を自動的に生成することができる。これにより、従来は正確に記述することが困難であった複雑な属性範囲条件を照合する正規表現を、特別な知識も試行錯誤も必要なく、容易に短時間で得ることができる。
実施の形態4.
本実施の形態について、主に実施の形態1との差異を説明する。
本実施の形態は、複数の属性値と、属性値間を区切る区切り文字とから構成される階層構造を持つ属性について、その正規表現を生成する処理の流れを説明するものである。本実施の形態における正規表現生成装置100の構成は、実施の形態1で説明した図1に示したものと同じである。また、正規表現生成装置100の動作(正規表現生成方法、正規表現生成プログラムの処理手順)は、実施の形態1で説明した図4に示したものと同じである。上記のような階層構造を持つ形式の属性の正規表現を生成するため、正規表現生成装置100は、階層構造における最上位の階層から順に下位の階層に向かって、実施の形態1や3と同様の手順を適用することにより、正規表現を生成していく。
本実施の形態では、正規表現生成装置100の利用者は属性の上限値、下限値、区切り文字、階層の順序、各階層の属性の形式、値域などを属性範囲条件データとして指定する。そして、ステップS101では、属性範囲条件入力部101が、その属性範囲条件データを入力する。つまり、属性範囲条件入力部101は、属性値の書式として、属性値が区切り文字を用いた階層構造をとる属性値であり、属性値全体を区切り文字で区切った部分の各々がその階層構造の1階層であることを示す属性範囲条件データを入力する。このような階層構造を持つ属性値としては、日付、時刻、IP(Internet・Protocol)アドレス、小数点数などがある。例えば日付は、最上位から年、月、日という3つの階層からなる階層構造をとるものであり、よく使用される区切り文字としてはスラッシュ「/」がある。また、属性値が日付の場合、各階層はいずれも正の整数値で、月の階層の値域は1〜12、日の階層の値域は1〜31(又は、28、29、30)である。例えば、属性値が日付や時刻であれば、属性範囲条件入力部101は、属性値の書式として、属性値が日付や時刻であることを示す属性範囲条件データを入力することとなる。また、例えば、属性値がIPアドレスであれば、属性範囲条件入力部101は、属性値の書式として、属性値がIPアドレスであることを示す属性範囲条件データを入力することとなる。
ステップS102において、演算部102は、属性値全体について、各階層を1桁として、第1の値と第2の値とを演算する。
ステップS103において、正規表現生成部104は、第1の値と第2の値との間に属性値が存在する場合には、属性値全体について、各階層を1桁として、中位領域データを生成する。その後さらに、その中位領域データを各階層を正規表現で表すものにCPU911で変換する。また、ステップS104において、正規表現生成部104は、属性値全体について、各階層を1桁として、下位領域データを生成する。その後に、その下位領域データを各階層を正規表現で表すものにCPU911で変換する。同様に、ステップS105において、正規表現生成部104は、属性値全体について、各階層を1桁として、上位領域データを生成する。その後に、その上位領域データを各階層を正規表現で表すものにCPU911で変換する。
このように、本実施の形態において、正規表現生成装置100は、複数の値と区切り文字とから構成される階層を持った属性値の上限値と下限値とを指定する属性範囲条件を正規表現に変換する検索条件生成方式、又は、この方式を計算機上で実行するための検索条件生成プログラムを実装するものである。この方式では、最上位の階層から最下位の階層に向かって順番に、それぞれの値を実施の形態1や3と同様の手順に従って正規表現に変換する。
上記検索条件生成方式では、例えば、日付の属性範囲条件を正規表現に変換する。また、例えば、時刻の属性範囲条件を正規表現に変換する。また、例えば、IPアドレスの属性範囲条件を正規表現に変換する。
以下、実施の形態1や3と同様に、正規表現を生成する処理の流れを、例を交えて説明する。ここで説明するのは、属性範囲条件の下限値Aと上限値Bに対して、A≦X≦Bを満たす値X(下限値Aから上限値Bまでの属性値X)の文字列表現を受理する正規表現の生成処理の流れである。ここでは、区切り文字を<d><d>...として、属性値を次のように表すものとする。
下限値A:A<d>A<d>...<dn−1>A
上限値B:B<d>B<d>...<dn−1>B
ここで、A、B(1≦i≦n)は各階層の1桁以上の属性値を表し、その値域はV min≦A、B≦V maxとする。
ステップS102では、演算部102は、各階層を1桁の値と見なして全体を下位、中位、上位の各領域に分割する。このときの分割手順は、図5又は図10に示したのと同様の手順によって行う。即ち、属性範囲条件A〜Bを以下のように分割する。階層構造のある属性では、第2階層以下(即ち、最上位層以外の階層)の属性値が実施の形態1の形式の属性値の場合、V min、V maxが定義されていると考えられる。それ以外の場合には、Aと桁数が同じ値の範囲で、最小値、最大値を考えればよい。
下位領域:A<d>A<d>...<dn−1>A〜A<d>V max<d>...<dn−1>V max
中位領域:(A+1)<d>V min<d>...<dn−1>V min〜(B−1)<d>V max<d>...<dn−1>V max
上位領域:B<d>V min<d>...<dn−1>V min〜B<d>B<d>...<dn−1>B
ステップS103において、正規表現生成部104は、中位領域について、階層ごとに正規表現を生成することにより、そのまま正規表現を生成することができる。
中位領域の正規表現:“<(A+1)〜(B−1)の正規表現><d><V min〜V maxの正規表現><d>...<dn−1><V min〜V maxの正規表現>”
正規表現生成部104は、各階層の正規表現の生成方法として、それぞれの属性値の形式に従って、実施の形態1や3に示したものと同様の手順を用いることができる。つまり、正規表現生成部104は、各階層について、演算部102が行う処理と同様に、下位、中位、上位領域に値の範囲を分割し、各領域に関して正規表現を生成し、正規表現結合部105が行う処理と同様に、生成した正規表現を以下の形式で書き出す。
正規表現:“(<i階層の下位領域の正規表現>|<i階層の中位領域の正規表現>|<i階層の上位領域の正規表現>)”
これにより、正規表現生成部104は、各階層を1桁として扱っていた中位領域の正規表現を、各階層もそれぞれに対応する正規表現を含んだ正規表現に変換することができる。
下位領域に関しては、ステップS104において、正規表現生成部104が、第2階層以下を、上記の手順と同様にして下位、中位(下位、上位と考えることもできる)の各領域に分割する。上位領域がない(中位領域がないと考えることもできる)のは、元の下位領域の上限値の第2階層の値が、その属性の値域の最大値V maxになっているためである。これにより、下位領域は、さらに下位領域と中位領域に分割できる。
下位領域:A<d>A<d>...<dn−1>A〜A<d>A<d>V max<d>...<dn−1>V max
中位領域:A<d>(A+1)<d>V min<d>...<dn−1>V min〜A<d>V max<d>...<dn−1>V max
続いて、正規表現生成部104は、ステップS103と同様の手順で中位領域の正規表現を生成するとともに、下位領域の次の階層以下をさらに分割する。このようにして、下位、中位領域への分割と中位領域の正規表現の生成とを最下位の階層まで繰り返すことにより、正規表現生成部104は、各階層を1桁として扱っていた下位領域の正規表現を、各階層もそれぞれに対応する正規表現を含んだ正規表現に変換することができる。
上位領域に関しても、ステップS105において、正規表現生成部104が、同様に第2階層以下を中位、上位(下位、上位と考えることもできる)の各領域に分割する。下位領域がない(中位領域がないと考えることもできる)のは、元の上位領域の下限値の第2階層の値が、その属性の値域の最小値V minになっているためである。これにより、上位領域は、さらに中位領域と上位領域に分割できる。
中位領域:B<d>V min<d>...<dn−1>V min〜B<d>(B−1)<d>V max<d>...<dn−1>V max
上位領域:B<d>B<d>V min<d>...<dn−1>V min〜B<d>B<d>...<dn−1>B
続いて、正規表現生成部104は、ステップS103と同様の手順で中位領域の正規表現を生成するとともに、上位領域の次の階層以下を同様に分割する。このようにして、中位、上位領域への分割と中位領域の正規表現の生成とを最下位の階層まで繰り返すことにより、正規表現生成部104は、各階層を1桁として扱っていた上位領域の正規表現を、各階層もそれぞれに対応する正規表現を含んだ正規表現に変換することができる。
ステップS104及びS105の正規表現生成処理において、第k階層以下(2≦k≦n)の全階層の値が、全ての値の範囲をとる場合、即ち、以下の場合には値の範囲を分割する必要はない。
下限値:A<d>...<dk−2>Ak−1<dk−1>V min<d>...<dn−1>V min
上限値:B<d>...<dk−2>Bk−1<dk−1>V max<d>...<dn−1>V max
そして、正規表現生成部104は、k−1桁目以下に対する正規表現を、以下のようにして生成することができる。
正規表現:“[Ak−1−Bk−1]<dk−1><V min〜V maxの正規表現><d>...<dn−1><V min〜V maxの正規表現>”
ステップS106において、正規表現結合部105は、ステップS103〜S105で個別に生成された下位、中位、上位領域の正規表現を結合して、以下のように属性範囲条件に対応する正規表現を生成する。
“<下位領域の正規表現>|<中位領域の正規表現>|<上位領域の正規表現>”
中位領域がない場合に生成される正規表現は以下のような形式となる。
“<下位領域の正規表現>|<上位領域の正規表現>”
上記の方式を日付に適用した場合の具体例を示す。典型的な日付の形式として、ここでは年月日がスラッシュ「/」で区切られているものとする。
(例4−1)属性範囲条件:1996/11/15〜2006/9/20
属性範囲条件入力部101は、属性範囲条件の入力として、下限値、上限値の他に、区切り文字「/」、属性値の種類(日付)、年月日の順序などを指定する。ここで、実施の形態2と同様に、条件記憶部107が、正規表現を生成する処理のために参照可能な記憶装置151内の記憶領域の一部に、複数種類の日付の形式を記憶しておき、識別子入力部108が識別子を指定することにより、自動的に対応する日付の形式を選択できるようにしてもよい。この場合、属性範囲条件入力部101は、条件記憶部107により記憶装置151に予め記憶されている複数の属性範囲条件データの中から、識別子入力部108により入力された識別子に対応付けて記憶された属性範囲条件データを読み出して入力する。そして、この属性範囲条件データに基づいて、正規表現が生成される。あるいは、演算部102や正規表現生成部104などが、属性範囲条件入力部101により指定された下限値、上限値から日付の形式を自動的に識別するようにしてもよい。例えば、下限値が「A年A月A日」(A、A、Aはいずれも数値)と指定されたならば、区切り文字は「年」「月」「日」で、左から順に上位の階層であることを容易に認識することができる。ここで、日付を、あたかも0≦A、1≦A≦12、1≦A≦31という値域の属性要素からなる3桁の属性Aであるかのように扱うこともできる。
上記の手順に従うと、ステップS102において、演算部102は、この例の属性範囲を以下の通り下位、中位、上位領域に分割できる。
下位領域:1996/11/15〜1996/12/31
中位領域:1997/1/1〜2005/12/31
上位領域:2006/1/1〜2006/9/20
ステップS103において、正規表現生成部104は、中位領域の正規表現を以下の通りに生成する。
中位領域の正規表現:“<1997〜2005の正規表現>/<1〜12の正規表現>/<1〜31の正規表現>“
ステップS104において、正規表現生成部104は、下位領域(1996/11/15〜1996/12/31)を、さらに下位と中位領域とに分割できる。
下位領域:1996/11/15〜1996/11/31
中位領域:1996/12/1〜1996/12/31
これより、元の属性範囲の下位領域の正規表現は、以下の通り生成される。
下位領域(1996/11/15〜1996/12/31)の正規表現:“1996/(11/<15〜31の正規表現>|12/<1〜31の正規表現>)”
ステップS105において、正規表現生成部104は、上位領域(2006/1/1〜2006/9/20)を、さらに中位と上位領域とに分割できる。
中位領域:2006/1/1〜2006/8/31
上位領域:2006/9/1〜2006/9/20
これより、元の属性範囲の上位領域の正規表現は、以下の通り生成される。
上位領域(2006/1/1〜2006/9/20)の正規表現:“2006(<1〜8の正規表現>/<1〜31の正規表現>|9/<1〜20の正規表現>)”
ステップS106において、正規表現結合部105は、上記属性範囲条件の正規表現を以下のように構成することとなる。
正規表現:“(1996/(11/<15〜31の正規表現>|12/<1〜31の正規表現>))|(<1997〜2005の正規表現>/<1〜12の正規表現>/<1〜31の正規表現>)|(2006(<1〜8の正規表現>/<1〜31の正規表現>|9/<1〜20の正規表現>))”
これを展開すると、次のような正規表現が得られる。
正規表現:“(1996/(11/(1[5−9]|2[0−9]|3[0−1])|12/([0−9]|[1−2][0−9]|3[0−1])))|((199[7−9]|200[0−5])/([1−9]|1[0−2])/([0−9]|[1−2][0−9]|3[0−1]))|(2006/([1−8]/([0−9]|[1−2][0−9]|3[0−1])|9/([1−9]|1[0−9]|20)))”
上記の日付の例では、「11/31」という本来存在しない日付まで検索してしまう。ここで、厳密に日の値域を処理したいのであれば、以下の例のように日の値域が異なるグループごとに正規表現を分けて生成すればよい。
修正前:“<1〜12の正規表現>/<1〜31の正規表現>”
修正後:“(1|3|5|7|8|10|12)/<1〜31の範囲の正規表現>|(4|6|9|11)/<1〜30の範囲の正規表現>|2/<1〜28の範囲の正規表現>”
これまでの説明では、属性値の下限値A、上限値Bともに指定されている場合について示してきた。ここでは、上限値Bの指定がない場合や上限値が「無限大」と指定された場合について説明する。属性のデータ型として最大値B´が存在する場合は、正規表現結合部105は下限値Aから上限値B´までの正規表現を生成すればよい。属性のデータ型として最大値がない場合には、第1階層の値に着目して処理するとよい。
まず、正規表現結合部105は、下限値Aの第1階層の値と同じ桁数mの属性値の最大値を第1階層に持つような属性値の中で値が最も大きいもの、即ち、第2階層以下の値が全てV max(2≦i≦n)であるような値を上限値として正規表現を生成する。例えば、「2006/9/20」以降の日付を検索するための正規表現であれば、「2006/9/20」〜「9999/12/31」の属性範囲条件に対して正規表現を生成する。さらに、第1階層の値がn+1桁以上の任意の属性値を検索する正規表現を追加する。上記の例であれば、5桁以上の年を表現する正規表現を“[1−9][0−9]{4,}”と書くことができる。
下限値Aの指定がない場合や下限値が「無限小」と指定された場合について説明する。まず、属性のデータ型として最小値A´があるならば、正規表現結合部105は下限値A´と上限値Bについて正規表現を生成するようにすればよい。それ以外の場合は、第1階層以下の値が最小値V min(1≦i≦n)であるような属性値を下限値として、正規表現を生成すればよい。
階層構造を持つ属性の属性範囲条件による検索には、次のような応用も考えられる。
(例4−2)属性範囲条件:2006年9月〜2006年12月の平日
上記の条件を満たす日付を表す文字列を照合するための正規表現の生成手順を示す。上記の条件は、次の点でこれまで説明した属性範囲条件と異なる。
(1)「月」と「曜日」の2階層に範囲が設定されている。先に示した日付の属性範囲条件の例は、「年」と「月」に範囲が設定されているが、値としての実体は連続値である。
(2)第3階層の「日」に明示的な範囲条件が設定されていない。
(3)「日」と「曜日」は連動して変化する。厳密には上下の階層関係にない値である。
ここで、簡単のためにここでの日付の属性値は、左から順に「年」「月」「日」「曜日」が並んでおり、「年」「月」「日」間の区切り文字はスラッシュ「/」、「日」と「曜日」間の区切り文字は空白文字(厳密には、全角空白文字又は半角空白文字いずれか一方)であるとする。また、「曜日」の値域は、V min=“SUN”、V max=“SAT”という値を取るものとする。この属性範囲条件の第3階層は明示的に設定されていないが、V min〜V maxの値をとると考えてよい。このような属性範囲条件は以下のように考えられる。
属性範囲条件1:2006/9/1〜2006/12/31
属性範囲条件2:MON〜FRI
あとは、先に説明した日付の属性範囲条件の正規表現を生成する手順に従って、正規表現結合部105が属性範囲条件1の正規表現を生成し、さらに区切り文字に続けて属性範囲条件2の正規表現“(MON|TUE|WED|THU|FRI)”を結合すればよい。これにより最終的に生成される正規表現は以下のようになる。
正規表現:“(2006/(9|1[0−2])/([1−9]|[12][0−9]|3[01])) (MON|TUE|WED|THU|FRI)”
次に、上記の方式を時刻に適用した場合の具体例を示す。ここでは、時分秒の各階層がコロン「:」で区切られ、時間は24時間表記であるものとする。
(例4−3)属性範囲条件:8:45:00〜17:15:00
ステップS102において、演算部102は、この属性範囲条件を以下のように下位、中位、上位領域に分割できる。
下位領域:8:45:00〜8:59:59
中位領域:9:00:00〜16:59:59
上位領域:17:00:00〜17:15:00
ここから、正規表現生成部104及び正規表現結合部105が同様に処理して、以下の通り正規表現を生成することができる。
正規表現:“(8:(4[5−9]|5[0−9]):(0[0−9]|[1−4][0−9]|5[0−9])|(9|1[0−6]):([0−5][0−9]):(0[0−9]|[1−4][0−9]|5[0−9])|17:((0[0−9]|1[0−4]):(0[0−9]|[1−4][0−9]|5[0−9])|15:00))”
上記の例では、秒の値の範囲である「00〜59」に対応する正規表現を、実施の形態1に示した手順で生成するものとして、“0[0−9]|[1−4][0−9]|5[0−9]”としたが、この正規表現は“[0−5][0−9]”のようにより簡略な表記にすることもできる。時刻の中の属性で、分や秒の「00〜59」のように出現頻度の高いパターンに対しては、定型の正規表現を磁気ディスク装置920に記憶しておき、必要に応じて読み出して使用することにより、正規表現の生成処理をより簡略化することができる。このような出現頻度の高いパターンの例としては、日付の「(0)1〜12」、「(0)1〜31」、時刻の「0〜12」、「0〜24」、「00〜59」、IPアドレスの「0〜255」など、「V min〜V max」となるパターンが挙げられる。
以下のように、時刻が12時間表記の場合は、午前と午後とに分けて考えればよい。
(例4−4)属性範囲条件:8:45:00AM〜5:15:00PM
このような属性範囲条件は以下のように考えられる。
属性範囲条件1:8:45:00AM〜11:59:59AM
属性範囲条件2:0:00:00PM〜5:15:00PM
このように午前と午後とで個別に正規表現を生成した後で、正規表現結合部105が以下の通り正規表現を結合すればよい。
正規表現:“<属性範囲条件1の正規表現>|<属性範囲条件2の正規表現>”
IPアドレスの場合は、4個の正の整数が区切り文字であるピリオド「.」で区切られており、左から順に上位の階層となっている。また、各階層の数値の値域は0〜255である。また、IPv6のIPアドレスは、8個の16進数値が区切り文字であるコロン「:」で区切られている。いずれの場合も、上位の階層から下位の階層に向かって領域を分割する手順を適用し、各階層の値については実施の形態1の手順を適用することにより、同様に正規表現を生成することができる。各階層は、0以上の整数、即ち、実施の形態1と同様の形式の属性値として処理することができる。
(例4−5)属性範囲条件:10.0.1.1〜10.2.100.254
ステップS102において、演算部102は、この属性範囲条件を以下のように下位、中位、上位領域に分割できる。
下位領域:10.0.1.1〜10.0.255.255
中位領域:10.1.0.0〜10.1.255.255
上位領域:10.2.0.0〜10.2.100.254
ここから、同様に下位の階層に向かって処理を行う。即ち、ステップS104において、正規表現生成部104は、下位領域を、さらに以下のように分割できる。
下位領域:10.0.1.1〜10.0.1.255
中位領域:10.0.2.0〜10.0.255.255
ステップS105において、正規表現生成部104は、上位領域を、さらに以下のように分割できる。
中位領域:10.2.0.0〜10.2.0.99.255
上位領域:10.2.100.0〜10.2.100.254
最終的に、ステップS106において、正規表現結合部105は、以下の通り正規表現を生成することができる。
正規表現:“10¥.((0¥.(1¥.([1−9]|[1−9][0−9]|1[0−9][0−9]|(25[0−5]|2[0−4][0−9]))|([2−9]|[1−9][0−9]|1[0−9][0−9]|(25[0−5]|2[0−4][0−9]))¥.([0−9]|[1−9][0−9]|1[0−9][0−9]|(25[0−5]|2[0−4][0−9]))))|(1¥.([0−9]|[1−9][0−9]|1[0−9][0−9]|(25[0−5]|2[0−4][0−9]))¥.([0−9]|[1−9][0−9]|1[0−9][0−9]|(25[0−5]|2[0−4][0−9])))|(2¥.(([0−9]|[1−9][0−9])¥.([0−9]|[1−9][0−9]|1[0−9][0−9]|(25[0−5]|2[0−4][0−9]))|100¥.([0−9]|[1−9][0−9]|1[0−9][0−9]|(25[0−4]|2[0−4][0−9])))))”
小数は、整数部と小数部がピリオド「.」で区切られた数値である。正規表現の生成手順は、上位の階層である整数部、下位の階層である小数部の順に領域を分割する手順を適用し、整数部の値については実施の形態1の手順を適用し、小数部の値については実施の形態3の手順を適用することにより、同様に正規表現を生成することができる。
(例4−6)属性範囲条件:1.4142〜6.63
ステップS102において、演算部102は、この属性範囲条件を以下のように下位、中位、上位領域に分割できる。ここで、第2階層は実施の形態3の形式の属性値なので、その最小値、最大値は桁数が同じ値の範囲で考える。即ち、下限値の第2階層の値が4桁なので、演算部102は、下位領域の上限値として4桁の数値の最大値を選択する。また、上限値の第2階層の値が2桁なので、演算部102は、上位領域の下限値として2桁の数値の最小値を選択する。
下位領域:1.4142〜1.9999
中位領域:2.00〜5.99
上位領域:6.00〜6.63
最終的に、ステップS106において、正規表現結合部105は、以下の正規表現を生成することができる。
正規表現:“(1¥.((414[2−9]|41[5−9]|4[2−9])|([5−9])))|([2−5]¥.[0−9])|(6¥.(([0−5])|(6[0−3])))”
なお、区切り文字が正規表現で使用されるメタキャラクタ(正規表現において特別な意味を持つ文字)の場合には、その区切り文字の直前にエスケープ文字(バックスラッシュ、又は、日本語Windows(登録商標)の環境では主に「¥」が使用される)を挿入しなければならない。そのようなメタキャラクタとしては、「|」、「?」、「*」、「+」、「.」、「(」、「)」、「{」、「}」、「[」、「]」、「¥」、「^」、「$」、「<」、「>」がある。ただし、メタキャラクタの種類は、正規表現の処理系によって異なる場合がある。
以上のように、本実施の形態に係る正規表現生成装置100によれば、複数の属性値と区切り記号から構成される階層構造を持った属性の下限値、上限値、書式などを指定した属性範囲条件から、その下限値から上限値までの範囲に含まれる属性値を表現する文字列を照合するための正規表現を自動的に生成することができる。これにより、従来は正確に記述することが困難であった複雑な属性範囲条件を照合する正規表現を、特別な知識も試行錯誤も必要なく、容易に短時間で得ることができる。
実施の形態5.
本実施の形態について、主に実施の形態1との差異を説明する。
本実施の形態は、既定の構文規則や書式に従って記述されたテキストデータの、特定の範囲に含まれる文字列を検索するための正規表現を生成する処理の流れを説明するものである。ここでは、従来のように検索対象として指定される特定の文字列だけではなく、下限値から上限値までの特定の範囲に含まれる属性値を表現する文字列が検索対象となる。
図13は、本実施の形態に係る正規表現生成装置100の構成を示すブロック図である。
図13において、正規表現生成装置100は、実施の形態1で説明した図1に示したものに加え、テキスト範囲条件入力部109を備える。正規表現生成装置100は、実施の形態2と同様に、さらに、条件記憶部107、識別子入力部108を備えていてもよい。
テキスト範囲条件入力部109は、テキスト範囲条件データを入力装置153から入力する。テキスト範囲条件データは、所定の構文規則に従って記述されたテキストの特定の領域を示すテキスト範囲条件のデータである。テキスト範囲条件によって、テキスト中の特定の範囲が指定される。例えば、テキストが電子メールであれば、テキスト範囲条件入力部109は、テキストの特定の領域として、電子メールの特定のヘッダフィールドを示すテキスト範囲条件データを入力することができる。また、例えば、テキストがCSVなどのように区切り文字で複数のフィールドに区切られたものであれば、テキスト範囲条件入力部109は、テキストの特定の領域として、複数のフィールドのいずれかを示すテキスト範囲条件データを入力することができる。
属性範囲条件入力部101は、属性値の書式として、属性値がテキスト範囲条件入力部109により入力されたテキスト範囲条件データが示す領域に含まれることを示す属性範囲条件データを入力する。
正規表現生成部104は、さらに、テキスト範囲条件入力部109により入力されたテキスト範囲条件データが示す領域を正規表現で表すテキスト領域データ(以下、単に「正規表現」、又は「範囲」などという場合がある)を処理装置152で生成する。
正規表現結合部105は、属性範囲条件入力部101により入力された属性範囲条件データが示す書式に基づいて、正規表現生成部104により生成された下位領域データと上位領域データと中位領域データとテキスト領域データとを結合して、属性値を含む前記テキストの特定の領域を正規表現で表す正規表現データを生成する。
正規表現生成装置100が、条件記憶部107、識別子入力部108を備えている場合には、条件記憶部107は、複数の属性範囲条件データと複数のテキスト範囲条件データとを予め記憶装置151に記憶しておく。また、条件記憶部107は、各属性範囲条件データと各テキスト範囲条件データとの組み合わせを一意の識別子と対応付けて予め記憶装置151に記憶しておく。識別子入力部108は、任意の識別子を入力装置153から入力する。属性範囲条件入力部101は、識別子入力部108により入力された識別子に対応付けて条件記憶部107により記憶された組み合わせの属性範囲条件データを入力する。同様に、テキスト範囲条件入力部109は、識別子入力部108により入力された識別子に対応付けて条件記憶部107により記憶された組み合わせのテキスト範囲条件データを入力する。
図14は、本実施の形態に係る正規表現生成方法を示すフローチャートである。図14のフローチャートに示すフローは、正規表現生成装置100を実現するコンピュータ上で実行されるプログラム(正規表現生成プログラム)の処理手順に相当する。この処理手順において、正規表現生成プログラムは、以下に示す各処理をコンピュータに実行させる。
正規表現生成装置100の利用者がキーボード902やマウス903でテキスト範囲条件データを指定すると、テキスト範囲条件入力部109は、そのテキスト範囲条件データをキーボード902やマウス903から入力する(ステップS901:テキスト範囲条件入力処理)。また、正規表現生成装置100の利用者がキーボード902やマウス903で、そのテキスト範囲条件データが示すテキストの領域に属性値が含まれることを示す属性範囲条件データを指定すると、属性範囲条件入力部101は、その属性範囲条件データをキーボード902やマウス903から入力する(ステップS902:属性範囲条件入力処理)。ステップS902の後は、実施の形態1で説明した図4のフローチャートと同様に、ステップS102の処理が実行される。
正規表現生成部104は、ステップS901でテキスト範囲条件入力部109により入力されたテキスト範囲条件データが示すテキストの領域を正規表現で表すテキスト領域データをCPU911で生成する(ステップS903:正規表現生成処理の一部)。ステップS903の後は、実施の形態1で説明した図4のフローチャートと同様に、ステップS103〜S105の処理が実行される。
正規表現結合部105は、ステップS902で属性範囲条件入力部101により入力された属性範囲条件データが示す書式に基づいて、ステップS903、S103〜S105で正規表現生成部104により生成されたテキスト領域データと下位領域データと上位領域データと中位領域データとをCPU911で結合して(ステップS103で中位領域データが生成されなかった場合には、テキスト領域データと下位領域データと上位領域データのみを結合することになる)、属性値記憶部103により記憶された下限値から上限値までの属性値だけでなく、その属性値を含むテキストの領域を正規表現で表す正規表現データを生成する(ステップS904:正規表現結合処理)。ステップS904の後は、実施の形態1で説明した図4のフローチャートと同様に、ステップS107の処理が実行される。
このように、本実施の形態において、正規表現生成装置100は、既定の構文規則に従って記述されたテキストデータの特定の領域を選択するテキスト範囲条件と、属性値の値域に含まれる特定の範囲を選択する属性範囲条件を入力とし、これらを、上記領域の中から属性範囲条件に合致する属性値を検出するための正規表現に変換する検索条件生成方式、又は、この方式を計算機上で実行するための検索条件生成プログラムを実装するものである。この方式では、テキスト範囲条件と等価な正規表現と、属性範囲条件と等価な正規表現を生成し、さらに、それらの正規表現を結合する。
上記検索条件生成方式では、例えば、電子メールの特定のヘッダフィールドを選択するテキスト範囲条件と、属性範囲条件を入力し、それら条件を正規表現に変換する。また、例えば、1行が既定の区切り文字によって複数のフィールドに分割されているテキストデータの特定のフィールドを選択するテキスト範囲条件と、属性範囲条件とを入力し、それら条件を正規表現に変換する。
また、正規表現生成装置100は、検索条件から正規表現への変換規則を記憶するための領域を記憶装置151内に設けておいてもよい。この場合、属性範囲条件入力部101、テキスト範囲条件入力部109、識別子入力部108が、属性範囲条件とテキスト範囲条件のいずれか又はその両方と、識別子を入力として受け付ける。上記領域には、条件記憶部107が、例えば、識別子と、属性値の形式によって異なる属性範囲条件を正規表現に変換するための変換規則の組と、識別子と、テキストデータの構文によって異なるテキスト範囲条件を正規表現に変換するための変換規則の組のいずれか、又はその両方を記憶しておく。そして、正規表現生成部104や正規表現結合部105は、入力された識別子と関連付けられた変換規則を上記領域から取り出し、変換規則に従って入力済の属性範囲条件又はテキスト範囲条件を正規表現に変換する。属性範囲条件入力部101、テキスト範囲条件入力部109、識別子入力部108が、属性範囲条件又はテキスト範囲条件を正規表現に変換するための変換規則と識別子との組の入力を受け付け、条件記憶部107が、入力された変換規則と識別子の組を上記領域に記憶するようにしてもよい。
以下、正規表現を生成する処理の流れを、例を交えて説明する。
初めに、既定の構文規則や書式を持つテキストの例を示す。第1の例は、電子メールである。電子メールは、ヘッダフィールドの書式が、RFC(Request・For・Comment)2822などにより定められている。ヘッダフィールドの1項目は、基本的に、フィールド名、フィールドの値、改行(CRLF)から構成されている。第2の例は、CSVファイルである。CSVファイルは、複数のフィールドの値をカンマで区切って記述したテキストファイルで、表形式のデータを表現するために利用されることが多い。類似の形式として、TSV(Tab・Separated・Values)といわれる区切り文字にタブを使用した形式や、区切り文字にスペースを使用した形式などがあるが、いずれも、区切り文字で複数のフィールドに区切られたテキストである。
上記のようなテキスト中の、特定の範囲に含まれる文字列を検索するための正規表現は、テキストの書式ごとに異なるテキスト中の範囲を特定するための正規表現と、その範囲内の文字列を検索するための固定キーワードや正規表現とを組み合わせることにより実現することができる。そのために、本実施の形態では、正規表現生成装置100が備える記憶装置151内の参照可能な記憶領域に、書式と範囲を特定するための正規表現を予め記憶しておくことが望ましい。この場合、正規表現生成装置100の入力は、属性範囲条件に示される書式の指定と、テキスト範囲条件に示される検索対象となる範囲の指定と、指定の範囲内を検索する正規表現となる。正規表現生成装置100は、それらの入力がなされると、書式と検索対象とする範囲の指定から、対応する範囲を特定するための正規表現を生成し、さらに生成した正規表現と、範囲内を検索する正規表現とを結合して出力する。
また、テキスト中の特定の範囲を対象に、実施の形態1〜4に示したような属性範囲条件を指定した検索を行うための正規表現を生成する処理は、テキストの範囲を特定するための正規表現を生成するとともに、実施の形態1〜4に示した手順に従って属性範囲条件に対応する正規表現を生成し、それらを結合することにより実現することができる。
電子メールの例を示す。電子メールのヘッダフィールドの構文は以下の通りである。
<ヘッダフィールド名>:<属性値><改行(CRLF)>
また、複数行にまたがる属性値の場合の構文は以下の通りである。電子メールのヘッダフィールドにおいて、行の先頭が半角空白文字かタブであった場合は、その行は直前の行の続きであることを意味している。
<ヘッダフィールド名>:<属性値><改行(CRLF)>
<半角空白又はタブ><属性値><改行(CRLF)>
・・・・・・
このとき、電子メールのヘッダフィールドのテキスト範囲条件の正規表現は、以下の形になる。
(1)ヘッダフィールドが1行の場合
正規表現:“(^|¥n)<ヘッダフィールド名>:[^¥n]*<属性値の正規表現>”
(2)ヘッダフィールドが複数行にわたる場合
正規表現:“(^|¥n)<ヘッダフィールド名>:[^¥n]*(<属性値の正規表現>|(¥n(¥s|¥t)+[^¥n]*)+<属性値の正規表現>)”
ここでは、「¥n」は改行、「¥s」は半角空白、「¥t」はタブを意味するものとする。
例えば、電子メールの表題(Subject)に文字列「メール」を含む属性値を検索したい場合、正規表現生成装置100の入力は、次の情報を含んでいればよい。
(a)文書の形式=「電子メールのヘッダフィールド」
(b)検索対象の範囲(ヘッダフィールド名)=「Subject」
(c)範囲の検索条件(正規表現)=「メール」
これらの条件を指定することが可能であれば、その指定の方法は問わないが、例えば、テキスト範囲条件入力部109が、テキスト範囲条件として、(a)文書の形式と(b)検索対象の範囲を指定し、属性範囲条件入力部101が、属性範囲条件として、(c)範囲の検索条件を指定すればよい(このとき、属性範囲条件入力部101は、範囲の検索条件を指定することで、属性値がテキスト範囲条件データに示された範囲に含まれることも示したこととなる)。
上記の入力を受けて、正規表現生成部104と正規表現結合部105とで、以下のように、上記の電子メールのヘッダフィールドのテキスト範囲条件の正規表現中の<ヘッダフィールド名>を「Subject」に、<属性値の正規表現>を「メール」に置き換えた正規表現を出力する。
“(^|¥n)Subject:[^¥n]*((メール)|(¥n(¥s|¥t)+[^¥n]*)+(メール))”
ここで、検索対象のヘッダフィールドが、複数行にわたることがないことがわかっていれば、単に以下の正規表現を出力するようにしてもよい。
“(^|¥n)Subject:[^¥n]*(メール)”
電子メールの送信日時を表すヘッダフィールド(Date)のような対象に、その下限値と上限値とを指定した検索を実行するための正規表現を生成する手順を示す。このときの正規表現生成装置100の入力は、以下の通りである。
(a)文書の形式=「電子メールのヘッダフィールド」
(b)検索対象の範囲(ヘッダフィールド名)=「Date」
(c)検索条件(下限値と上限値)=「2005/10/1〜2006/9/31」
例えば、テキスト範囲条件入力部109が、テキスト範囲条件として、(a)文書の形式と(b)検索対象の範囲を指定し、属性範囲条件入力部101が、属性範囲条件として、(c)範囲の検索条件を指定する。
また、属性範囲条件入力部101が、属性範囲条件として、以下の条件も指定する。
(d)属性の種類=「日付」
(e)区切り文字と階層の順序=「日 月 年」(区切り文字が空白文字(厳密には、半角空白)で、右から順に上位とする)
(f)階層「月」の値域=「Jan〜Dec」
ここから、正規表現生成部104は、テキスト範囲条件の正規表現と、属性範囲条件の正規表現を以下のように生成することができる。
範囲:“(^|¥n)<ヘッダフィールド名>:[^¥n]*<属性値の正規表現>”
属性範囲(属性値の正規表現):“(([1−9]|[12][0−9]|3[0−1]) (Oct|Nov|Dec) 2005)|(([1−9]|[12][0−9]|3[0−1]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep) 2006)”
最後に、正規表現結合部105が、これらを結合すると、所望の正規表現を得ることができる。
CSV形式のテキストの場合でも、正規表現の生成手順は電子メールの場合と同様である。CSV形式のテキストの各行のi番目とi+1番目のカンマに挟まれた範囲を対象に、正規表現によって検索する場合、範囲を特定するための正規表現は、以下の形式になる。
“(^|¥n)([^,]*,){i}[^,]*<属性値の正規表現>”
このときの、正規表現生成装置100の入力としては、次の情報が含まれていればよい。
(a)文書の形式=「CSV」
(b)検索対象の範囲(フィールドの番号)
(c)範囲の検索条件(正規表現)
例えば、テキスト範囲条件入力部109が、テキスト範囲条件として、(a)文書の形式と(b)検索対象の範囲を指定し、属性範囲条件入力部101が、属性範囲条件として、(c)範囲の検索条件を指定する。
正規表現には、各フィールドの値がダブルクォーテーション「”」で囲まれているものもある。各フィールドの値がダブルクォーテーションで囲まれているとき、値にカンマが含まれる場合や、値にダブルクォーテーションが2個連続して含まれる場合もある。このときのテキスト範囲の正規表現は以下の形式となる(左端と右端のダブルクォーテーションはこれまでに記述したものと同様、正規表現を強調表示するものであり、正規表現の一部ではない)。
“(^|¥n)(“([^”]|”“)*”,){i}”([^”]|”“)*<属性値の正規表現>”
TSV形式の場合は、上記のテキスト範囲の正規表現の区切り文字であるカンマ「,」を、以下の通りタブ(「¥t」で表す)に置き換えるだけでよい。
“(^|¥n)(“([^”]|”“)*”¥t){i}”([^”]|”“)*<属性値の正規表現>”
スペース区切り形式のテキストの場合は、上記のテキスト範囲の正規表現の区切り文字であるカンマ「,」やタブを、以下の通り半角空白(「¥s」で表す)に置き換えるだけでよい。
“(^|¥n)(“([^”]|”“)*”¥s){i}”([^”]|”“)*<属性値の正規表現>”
また、区切り文字の連続を1個の区切り文字と見なす場合は、単体の区切り文字を“<区切り文字>+”の形式に変更するだけでよい。
実施の形態1や3において、属性範囲条件の正規表現の前に除外文字指定“[^v−v]”という表現を追加することにより、属性範囲条件を厳密に照合する方法を示した。このような属性範囲条件の正規表現と、CSV形式やTSV形式などのフィールドが区切り文字で区切られたテキストを検索するテキスト範囲条件の正規表現を結合する場合には、直前の除外文字指定と合わせて、除外文字指定に区切り文字も含めて記述する。即ち、以下のように正規表現を構成する。
正規表現:“(^|¥n)([^<区切り文字>]*<区切り文字>){i}[^v−v<区切り文字>]*<属性値の正規表現>”
これにより、“[^v−v]”に区切り文字自体が照合されてしまうのを防ぐことができる。
以上のように、本実施の形態に係る正規表現生成装置100によれば、既定の構文・書式に従って記述されたテキストの中の、特定の範囲を指定するテキスト範囲条件と、正規表現又は属性範囲条件から、その範囲に含まれる文字列を照合するための正規表現を自動的に生成することができる。これにより、従来は正確に記述することが困難であった複雑な属性範囲条件を照合する正規表現を、特別な知識も試行錯誤も必要なく、容易に短時間で得ることができる。
以上、本発明の実施の形態について説明したが、これらのうち、2つ以上の実施の形態を組み合わせて実施しても構わない。あるいは、これらのうち、1つの実施の形態を部分的に実施しても構わない。あるいは、これらのうち、2つ以上の実施の形態を部分的に組み合わせて実施しても構わない。
実施の形態1、3、4に係る正規表現生成装置の構成を示すブロック図である。 各実施の形態における正規表現生成装置の外観の一例を示す図である。 各実施の形態における正規表現生成装置のハードウェア資源の一例を示す図である。 実施の形態1、3、4に係る正規表現生成方法を示すフローチャートである。 実施の形態1における図4のステップS102の詳細を示すフローチャートである。 実施の形態1における図4のステップS104の詳細を示すフローチャートである。 実施の形態1における図4のステップS105の詳細を示すフローチャートである。 実施の形態2に係る正規表現生成装置の構成を示すブロック図である。 実施の形態2に係る正規表現生成方法を示すフローチャートである。 実施の形態3における図4のステップS102の詳細を示すフローチャートである。 実施の形態3における図4のステップS104の詳細を示すフローチャートである。 実施の形態3における図4のステップS105の詳細を示すフローチャートである。 実施の形態5に係る正規表現生成装置の構成を示すブロック図である。 実施の形態5に係る正規表現生成方法を示すフローチャートである。
符号の説明
100 正規表現生成装置、101 属性範囲条件入力部、102 演算部、103 属性値記憶部、104 正規表現生成部、105 正規表現結合部、106 出力部、107 条件記憶部、108 識別子入力部、109 テキスト範囲条件入力部、151 記憶装置、152 処理装置、153 入力装置、154 出力装置、901 表示装置、902 キーボード、903 マウス、904 FDD、905 CDD、906 プリンタ装置、910 システムユニット、911 CPU、912 バス、913 ROM、914 RAM、915 通信ボード、920 磁気ディスク装置、921 オペレーティングシステム、922 ウィンドウシステム、923 プログラム群、924 ファイル群、940 インターネット、941 ゲートウェイ、942 LAN。

Claims (12)

  1. 属性値の下限値と上限値と書式とを示す属性範囲条件データを入力装置から入力する属性範囲条件入力部と、
    前記属性範囲条件入力部により入力された属性範囲条件データが示す書式に基づいて、前記属性範囲条件入力部により入力された属性範囲条件データが示す下限値以上の属性値であって、最下位桁から少なくとも1桁が当該桁の最大値である第1の値と、前記属性範囲条件入力部により入力された属性範囲条件データが示す上限値以下の属性値であって、最下位桁から少なくとも1桁が当該桁の最小値である第2の値とを、処理装置で演算する演算部と、
    前記属性範囲条件入力部により入力された属性範囲条件データが示す下限値と上限値と、前記演算部により演算された第1の値と第2の値とを、記憶装置に記憶する属性値記憶部と、
    前記属性値記憶部により記憶された下限値から第1の値までの属性値を正規表現で表す下位領域データと、前記属性値記憶部により記憶された第2の値から上限値までの属性値を正規表現で表す上位領域データとを、処理装置で生成するとともに、前記属性値記憶部により記憶された第1の値と第2の値との間に属性値が存在する場合には当該属性値を正規表現で表す中位領域データを処理装置で生成する正規表現生成部と、
    前記正規表現生成部により生成された下位領域データと上位領域データと中位領域データとを処理装置で結合して、前記属性値記憶部により記憶された下限値から上限値までの属性値を正規表現で表す正規表現データを生成する正規表現結合部とを備えることを特徴とする正規表現生成装置。
  2. 前記演算部は、前記属性範囲条件入力部により入力された属性範囲条件データが示す書式に基づいて、前記属性範囲条件入力部により入力された属性範囲条件データが示す下限値と桁数が同じで少なくとも最上位桁以外の桁が各桁の最大値である第1の値と、前記属性範囲条件入力部により入力された属性範囲条件データが示す上限値と桁数が同じで少なくとも最上位桁以外の桁が各桁の最小値である第2の値とを、演算することを特徴とする請求項1に記載の正規表現生成装置。
  3. 前記演算部は、前記属性範囲条件入力部により入力された属性範囲条件データが示す下限値と最上位桁が同じ値でそれより以外の桁が各桁の最大値である第1の値と、前記属性範囲条件入力部により入力された属性範囲条件データが示す上限値と最上位桁が同じ値でそれ以外の桁が各桁の最小値である第2の値とを、演算することを特徴とする請求項2に記載の正規表現生成装置。
  4. 前記属性範囲条件入力部は、属性値の書式として、属性値が数値と文字列とのいずれかであることを示す属性範囲条件データを入力することを特徴とする請求項1に記載の正規表現生成装置。
  5. 前記属性範囲条件入力部は、属性値の書式として、属性値が区切り文字を用いた階層構造をとる属性値であり、属性値全体を区切り文字で区切った部分の各々が前記階層構造の1階層であることを示す属性範囲条件データを入力し、
    前記演算部は、属性値全体について、各階層を1桁として、第1の値と第2の値とを演算し、
    前記正規表現生成部は、属性値全体について、各階層を1桁として、下位領域データと上位領域データとを生成した後に、下位領域データと上位領域データとを各階層を正規表現で表すものに変換するとともに、第1の値と第2の値との間に属性値が存在する場合には中位領域データを生成し、さらに、各階層を正規表現で表すものに変換することを特徴とする請求項1に記載の正規表現生成装置。
  6. 前記属性範囲条件入力部は、属性値の書式として、属性値が日付と時刻とIP(Internet・Protocol)アドレスとのいずれかであることを示す属性範囲条件データを入力することを特徴とする請求項5に記載の正規表現生成装置。
  7. 前記正規表現生成装置は、さらに、
    所定の構文規則に従って記述されたテキストの特定の領域を示すテキスト範囲条件データを入力装置から入力するテキスト範囲条件入力部を備え、
    前記属性範囲条件入力部は、属性値の書式として、属性値が前記テキスト範囲条件入力部により入力されたテキスト範囲条件データが示す領域に含まれることを示す属性範囲条件データを入力し、
    前記正規表現生成部は、さらに、前記テキスト範囲条件入力部により入力されたテキスト範囲条件データが示す領域を正規表現で表すテキスト領域データを処理装置で生成し、
    前記正規表現結合部は、前記属性範囲条件入力部により入力された属性範囲条件データが示す書式に基づいて、前記正規表現生成部により生成された下位領域データと上位領域データと中位領域データとテキスト領域データとを結合して、属性値を含む前記テキストの特定の領域を正規表現で表す正規表現データを生成することを特徴とする請求項1に記載の正規表現生成装置。
  8. 前記テキスト範囲条件入力部は、前記テキストの特定の領域として、電子メールの特定のヘッダフィールドを示すテキスト範囲条件データを入力することを特徴とする請求項7に記載の正規表現生成装置。
  9. 前記テキスト範囲条件入力部は、前記テキストの特定の領域として、前記テキストを区切り文字で区切ったフィールドのいずれかを示すテキスト範囲条件データを入力することを特徴とする請求項7に記載の正規表現生成装置。
  10. 前記正規表現生成装置は、さらに、
    複数の属性範囲条件データと複数のテキスト範囲条件データとを予め記憶装置に記憶しておくとともに、各属性範囲条件データと各テキスト範囲条件データとの組み合わせを一意の識別子と対応付けて予め記憶装置に記憶しておく条件記憶部と、
    任意の識別子を入力装置から入力する識別子入力部とを備え、
    前記属性範囲条件入力部は、前記識別子入力部により入力された識別子に対応付けて前記条件記憶部により記憶された組み合わせの属性範囲条件データを入力し、
    前記テキスト範囲条件入力部は、前記識別子入力部により入力された識別子に対応付けて前記条件記憶部により記憶された組み合わせのテキスト範囲条件データを入力することを特徴とする請求項7に記載の正規表現生成装置。
  11. 正規表現生成装置の属性範囲条件入力部が、属性値の下限値と上限値と書式とを示す属性範囲条件データを入力装置から入力し、
    前記正規表現生成装置の演算部が、前記属性範囲条件入力部により入力された属性範囲条件データが示す書式に基づいて、前記属性範囲条件入力部により入力された属性範囲条件データが示す下限値以上の属性値であって、最下位桁から少なくとも1桁が当該桁の最大値である第1の値と、前記属性範囲条件入力部により入力された属性範囲条件データが示す上限値以下の属性値であって、最下位桁から少なくとも1桁が当該桁の最小値である第2の値とを、処理装置で演算し、
    前記正規表現生成装置の属性値記憶部が、前記属性範囲条件入力部により入力された属性範囲条件データが示す下限値と上限値と、前記演算部により演算された第1の値と第2の値とを、記憶装置に記憶し、
    前記正規表現生成装置の正規表現生成部が、前記属性値記憶部により記憶された下限値から第1の値までの属性値を正規表現で表す下位領域データと、前記属性値記憶部により記憶された第2の値から上限値までの属性値を正規表現で表す上位領域データとを、処理装置で生成し、
    前記正規表現生成装置の正規表現生成部が、前記属性値記憶部により記憶された第1の値と第2の値との間に属性値が存在する場合には当該属性値を正規表現で表す中位領域データを処理装置で生成し、
    前記正規表現生成装置の正規表現結合部が、前記正規表現生成部により生成された下位領域データと上位領域データと中位領域データとを処理装置で結合して、前記属性値記憶部により記憶された下限値から上限値までの属性値を正規表現で表す正規表現データを生成することを特徴とする正規表現生成方法。
  12. 属性値の下限値と上限値と書式とを示す属性範囲条件データを入力装置から入力する属性範囲条件入力処理と、
    前記属性範囲条件入力処理により入力された属性範囲条件データが示す書式に基づいて、前記属性範囲条件入力処理により入力された属性範囲条件データが示す下限値以上の属性値であって、最下位桁から少なくとも1桁が当該桁の最大値である第1の値と、前記属性範囲条件入力処理により入力された属性範囲条件データが示す上限値以下の属性値であって、最下位桁から少なくとも1桁が当該桁の最小値である第2の値とを、処理装置で演算する演算処理と、
    前記属性範囲条件入力処理により入力された属性範囲条件データが示す下限値と上限値と、前記演算処理により演算された第1の値と第2の値とを、記憶装置に記憶する属性値記憶処理と、
    前記属性値記憶処理により記憶された下限値から第1の値までの属性値を正規表現で表す下位領域データと、前記属性値記憶処理により記憶された第2の値から上限値までの属性値を正規表現で表す上位領域データとを、処理装置で生成するとともに、前記属性値記憶処理により記憶された第1の値と第2の値との間に属性値が存在する場合には当該属性値を正規表現で表す中位領域データを処理装置で生成する正規表現生成処理と、
    前記正規表現生成処理により生成された下位領域データと上位領域データと中位領域データとを処理装置で結合して、前記属性値記憶処理により記憶された下限値から上限値までの属性値を正規表現で表す正規表現データを生成する正規表現結合処理とをコンピュータに実行させることを特徴とする正規表現生成プログラム。
JP2006329679A 2006-12-06 2006-12-06 正規表現生成装置及び正規表現生成方法及び正規表現生成プログラム Active JP4897454B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006329679A JP4897454B2 (ja) 2006-12-06 2006-12-06 正規表現生成装置及び正規表現生成方法及び正規表現生成プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006329679A JP4897454B2 (ja) 2006-12-06 2006-12-06 正規表現生成装置及び正規表現生成方法及び正規表現生成プログラム

Publications (2)

Publication Number Publication Date
JP2008146162A JP2008146162A (ja) 2008-06-26
JP4897454B2 true JP4897454B2 (ja) 2012-03-14

Family

ID=39606310

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006329679A Active JP4897454B2 (ja) 2006-12-06 2006-12-06 正規表現生成装置及び正規表現生成方法及び正規表現生成プログラム

Country Status (1)

Country Link
JP (1) JP4897454B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011034274A (ja) * 2009-07-31 2011-02-17 Hitachi Solutions Ltd テスト自動実行システム
JP5367627B2 (ja) * 2010-03-24 2013-12-11 三菱電機インフォメーションテクノロジー株式会社 データ処理装置及びプログラム
JP5698494B2 (ja) * 2010-10-14 2015-04-08 Kddi株式会社 携帯端末およびプログラム
US20190384796A1 (en) 2018-06-13 2019-12-19 Oracle International Corporation Regular expression generation using longest common subsequence algorithm on regular expression codes
US11941018B2 (en) 2018-06-13 2024-03-26 Oracle International Corporation Regular expression generation for negative example using context

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5317509A (en) * 1992-01-21 1994-05-31 Hewlett-Packard Company Regular expression factoring for scanning multibyte character sets with a single byte automata machine
JPH11167566A (ja) * 1997-12-04 1999-06-22 Nippon Telegr & Teleph Corp <Ntt> 出力機器適合型一括テキスト変換方法、装置および記録媒体
AU1054401A (en) * 1999-11-02 2001-05-14 Ntt Docomo, Inc. Client server system

Also Published As

Publication number Publication date
JP2008146162A (ja) 2008-06-26

Similar Documents

Publication Publication Date Title
US5896321A (en) Text completion system for a miniature computer
JP3566111B2 (ja) 記号辞書作成方法及び記号辞書検索方法
EP1522933B1 (en) Computer aided query to task mapping
US8073849B2 (en) Method and system for constructing data tag based on a concept relation network
US10592672B2 (en) Testing insecure computing environments using random data sets generated from characterizations of real data sets
US20170075983A1 (en) Subject-matter analysis of tabular data
US20080319987A1 (en) System, method and program for creating index for database
US20120166438A1 (en) System and method for recommending queries related to trending topics based on a received query
CN106383836B (zh) 将可操作属性归于描述个人身份的数据
US20180267953A1 (en) Context-based text auto completion
US7761458B1 (en) Segmentation of a data sequence
KR20060045535A (ko) 사용자 모델링을 통한 효율적인 대문자화 훈련 방법
US8266150B1 (en) Scalable document signature search engine
CN105373365A (zh) 用于管理关于近似串匹配的档案的方法和系统
US10552497B2 (en) Unbiasing search results
JP4897454B2 (ja) 正規表現生成装置及び正規表現生成方法及び正規表現生成プログラム
Rieger et al. RollingLDA: An update algorithm of Latent Dirichlet Allocation to construct consistent time series from textual data
Xu et al. A new feature selection method based on support vector machines for text categorisation
Claesson et al. Counting pop-stacked permutations in polynomial time
Dogra et al. Understanding of data preprocessing for dimensionality reduction using feature selection techniques in text classification
US8266228B2 (en) Tagging communication files based on historical association of tags
Sohrabi et al. Finding similar documents using frequent pattern mining methods
CN103678355B (zh) 文本挖掘方法和文本挖掘装置
Amazal et al. A text classification approach using parallel naive Bayes in big data context
TW202232363A (zh) 文書檢索裝置、文書檢索方法、及文書檢索程式產品

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20091001

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20111202

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111220

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111222

R150 Certificate of patent or registration of utility model

Ref document number: 4897454

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150106

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250