JP5077380B2 - 文字列照合装置および文字列照合プログラム - Google Patents

文字列照合装置および文字列照合プログラム Download PDF

Info

Publication number
JP5077380B2
JP5077380B2 JP2010071824A JP2010071824A JP5077380B2 JP 5077380 B2 JP5077380 B2 JP 5077380B2 JP 2010071824 A JP2010071824 A JP 2010071824A JP 2010071824 A JP2010071824 A JP 2010071824A JP 5077380 B2 JP5077380 B2 JP 5077380B2
Authority
JP
Japan
Prior art keywords
state
transition
character
nfa
state transition
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
JP2010071824A
Other languages
English (en)
Other versions
JP2010225156A (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 JP2010071824A priority Critical patent/JP5077380B2/ja
Publication of JP2010225156A publication Critical patent/JP2010225156A/ja
Application granted granted Critical
Publication of JP5077380B2 publication Critical patent/JP5077380B2/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に記載されており、正規言語と呼ばれる言語のクラスを表現する表記方法である。正規表現を検索条件とする文字列照合方式として、DFA(Deterministic Finite Automaton、決定性有限オートマトン)による方法が知られている。
DFAによる文字列照合方式は状態遷移機械(オートマトン)のモデルに基づいている。状態遷移機械は内部に状態と状態遷移関数を持つ。状態遷移関数は現在の状態と入力文字に対して次の状態を決定する関数である。DFAを用いた文字列照合方式では、入力テキストを1文字づつ読み出し、現在の状態と入力文字の組に対して状態遷移関数を適用して得られた次の状態に遷移する。この方法によるとテキストを後戻りすることなく1度走査することによって照合を行うことができ、高速な文字列照合が可能になる。複数の条件による照合を行う場合、照合に成功した条件を区別するため、DFAを拡張し各状態に出力を定義した出力つき有限オートマトン(Moore機械)も用いられている。
DFAの状態遷移関数は照合条件となる正規表現によって決まるが、従来から、正規表現を一度NFA(Non-deterministic Finite Automaton、非決定性有限オートマトン)に変換し、更にNFAをDFAに変換するその手順が知られており、例えば非特許文献1などに記載されている。DFAによる文字列照合方式は高速であるという特長を持つが、反面、DFAの状態遷移関数を実現するための状態遷移表が巨大になりやすいという欠点があった。
一例として、特許文献3に開示されている図52の照合条件を例にとる。図53は従来の出力つき有限オートマトンにおいて図52の照合条件から生成される状態遷移表および失敗関数である。このように状態数18と文字種別5種類に対し、90通りの組を保持する状態遷移表を生成する必要がある。
このような課題を解決する方法として、特許文献1、特許文献2には、AC(Aho-Corasick)法に基づく状態遷移表をDFAに変換した後、初期状態への遷移操作および初期状態の次の状態への遷移操作を状態遷移表から除去することによって状態遷移表の記憶容量を削減する方法が示されている。しかし、特許文献1、特許文献2に示された文字列照合方法では、照合の対象を固定の文字列キーワードに限定しているため、一般の正規表現を照合の対象とすることはできない。
また、特許文献3には、DFAにおいて、失敗関数を定義することによって状態遷移表を削減する方法が示されている。しかし、特許文献3に示された方法では、一度失敗関数によって遷移した状態で再び遷移に失敗することがある。すなわち、遷移の失敗が連鎖的に発生することがある。このような場合は、繰り返し失敗関数を参照する必要があり照合速度が低下するという問題点があった。
一例として、特許文献3に開示されている図52の照合条件を例にとる。図54は図52の照合条件から生成される状態遷移表および失敗関数であり、特許文献3に開示されている。
照合条件が図52の条件であり、入力文字列が「aaca」の場合を例にとる。
特許文献3に開示されている方法では、まず、状態を状態1に初期化する。次にまず、1文字目の「a」を読み、状態遷移表の状態1の行で入力文字「a」の列に示されている状態3に遷移する。次に、2文字目の「a」を読み、同様に、状態3から状態6に遷移する。次に3文字目の「c」を読むことにより、状態6から状態10に遷移する。ところが、次に4文字目の文字「a」が出現した場合は、状態10で文字「a」に該当する遷移先が存在しないことから、まず、状態10の失敗時の遷移先である状態5に遷移する。更に、状態5で文字「a」に該当する遷移先が存在しないことから、状態5の失敗時の遷移先である状態2に遷移する。しかし、状態2でも文字「a」に該当する遷移先が存在しないことから、状態2の失敗時の遷移先である状態1に遷移する。状態1では、文字「a」に該当する遷移先状態3が存在することから状態3に遷移する。このように、4文字目の入力文字に対しては合計4回の状態遷移表の参照と状態遷移を行っており、全体としては4文字の入力文字に対して、7回の状態遷移を必要とする。このように、特許文献3の方法では、状態遷移の失敗を繰り返し、その都度失敗時の遷移先を参照する動作が必要になる場合がある。このため、状態遷移表の参照回数が増加し、照合性能が低下すると言う問題点があった。
E.J.Hopcroft, D.J.Ullman, "Formal Languages and their Relation to Automata", Addison Wesley (1969) 特開2004-103035号公報 特開2004-103034号公報 特許第2994926号公報
この発明は上記の問題点を解決するためになされたもので、正規表現を照合条件とする文字列照合に対して、状態遷移表を格納するのに必要な記憶容量を削減することを目的とする。
また、遷移の失敗による状態遷移表の参照回数を1文字当り2回以下とし、遷移の失敗が繰り返されることによる性能低下による性能低下を防止し、高速な文字列照合を可能にすることを目的とする。
本発明にかかわる文字列照合装置は、正規表現で記述された照合条件に基づいて状態遷移表を生成する状態遷移表生成部と、前記状態遷移表生成部により生成された状態遷移表に基づいて遷移するオートマトンとを備えるとともに、前記オートマトンは、前記照合条件に基づいて生成された状態遷移表において、現状態と入力文字の組に対する次の遷移先状態が存在しない場合、入力文字を読み進めずに初期状態へ遷移するものである。
正規表現で記述された照合条件に基づいて状態遷移表を生成する状態遷移表生成部と、前記状態遷移表生成部により生成された状態遷移表に基づいて遷移するオートマトンとを備えるとともに、前記オートマトンは、前記照合条件に基づいて生成された状態遷移表において、現状態と入力文字の組に対する次の遷移先状態が存在しない場合、入力文字を読み進めずに初期状態へ遷移することにより、状態遷移表を格納するのに必要な記憶容量を削減することができる。
文字列照合装置の構成を示す説明図である。 照合条件2の構成を示す説明図である。 条件式17の構成を示す説明図である。 状態遷移表生成部3の構成を示す説明図である。 状態遷移表格納部4の構成を示す説明図である。 出力表格納部5の構成を示す説明図である。 照合結果10の構成を示す説明図である。 文字列照合装置の動作を示すフローチャートである。 照合条件のコンパイルの動作を示すフローチャート 初期状態への失敗遷移の追加の手続きを示すフローチャート 初期状態への失敗遷移の追加(初期状態からσanyによる遷移先が存在しない場合)の手続きを示すフローチャート 初期状態への失敗遷移の追加(初期状態からσanyによる遷移先が存在する場合)の手続きを示すフローチャート 非決定的遷移の除去の手続きを示すフローチャート 状態集合の初期化の手続きを示すフローチャート Σに関する非決定的遷移の除去の手続きを示すフローチャート σotherに関する非決定的遷移の除去の手続きを示すフローチャート 新状態の生成の手続きを示すフローチャート σotherによる状態遷移の補正の手続きを示すフローチャート 未使用状態の除去の手続きを示すフローチャート 冗長状態の除去の手続きを示すフローチャート 冗長な状態遷移の削除の手続きを示すフローチャート 状態遷移表と出力表の生成の手続きを示すフローチャート 入力文書の照合の手続きを示すフローチャート メタキャラクタ「.」の置き換えを説明する説明図 メタキャラクタ「^」の置き換えを説明する説明図 初期状態へのε遷移を含むNFAを説明する説明図 ε遷移の省略を説明する説明図 失敗遷移の追加の必要な場合を説明する説明図 失敗遷移の追加を説明する説明図 初期状態からσanyによる遷移が存在する場合を説明する説明図 初期状態からσanyによる遷移が存在する場合の失敗遷移の追加を説明する説明図 非決定的遷移の除去(除去前)を説明する説明図 非決定的遷移の除去(除去後)を説明する説明図 非決定的遷移の除去(除去前)を説明する説明図 非決定的遷移の除去(除去後)を説明する説明図 非決定的遷移の除去(除去前)を説明する説明図 非決定的遷移の除去(除去後)を説明する説明図 非決定的遷移の除去(除去前)を説明する説明図 非決定的遷移の除去(除去後)を説明する説明図 非決定的遷移の除去(除去前)を説明する説明図 非決定的遷移の除去(除去後)を説明する説明図 冗長な状態遷移の削除を説明する説明図 冗長な状態の併合を説明する説明図 照合条件の構成を示す説明図 状態遷移表の構成を示す説明図 出力表の構成を示す説明図 動作例を示す説明図 照合条件の構成を示す説明図 状態遷移表の構成を示す説明図 出力表の構成を示す説明図 動作例を示す説明図 特許文献3に開示されている照合条件 特許文献3による従来の出力付きDFAの状態遷移表 特許文献3による従来の状態遷移表と出力表
1 文字列照合装置
2 照合条件
3 状態遷移表生成部
4 状態遷移表格納部
5 出力表格納部
6 入力文書
7 入力文字読み取り部
8 SDFAオートマトン
9 状態記憶部
10 照合結果
11 状態遷移
12 出力記述
13 現状態
14 入力文字
15 次状態
16 条件番号
17 条件式
18 条件記述
21 状態遷移表生成制御部
22 NFA状態集合
23 NFA状態遷移集合
24 NFA出力記述集合
25 状態集合
26 状態遷移集合
27 出力記述集合
31 ハッシュ値計算部
32 ハッシュ値
33 状態遷移ハッシュポインタ
34 状態遷移ハッシュチェイン
35 状態遷移ハッシュ表
36 比較部
41 条件番号インデックス
42 条件番号チェイン
実施例1.
図1はこの発明の文字列照合装置を示す構成図である。
図1において、文字列照合装置1は、この発明における正規表現による文字列照合を行う装置であり、入力文書6の中に照合条件2を満たすものが含まれるかどうかを照合結果10として出力する。照合条件2は文字列照合の条件を記述した条件であり、文字列照合装置1の入力となる。状態遷移表生成部3は照合条件2から状態遷移11と出力記述12を生成し、それぞれ状態遷移表格納部4、出力表格納部5に渡す。状態遷移表格納部は状態遷移11の組を保持する。出力表格納部5は出力記述12を保持する。入力文書6は照合の対象となる文書である。入力文字読み取り部7は入力文書6に含まれる文字を1文字づつ取り出し、入力文字14としてSDFAオートマトン8に送る。SDFAオートマトン8は内部の状態記憶部9に現状態13を記憶し、入力文字読み取り部7から入力文字14を受け取り、状態遷移表格納部4、出力表格納部5を参照して状態記憶部9に格納された現状態13の更新と照合結果10の出力を行う。状態記憶部9はSDFAオートマトン8の内部に保持された状態を記憶する。10は照合結果である。11は状態遷移であり、現状態13、入力文字14、次状態15の組である。12は出力記述であり、現状態13と条件番号16の組である。13は現状態である、14は入力文字である。15は次状態である。16は条件番号である。
図2は、この発明における照合条件2の構成を示す図である。図において、条件式17は、照合条件2を構成する個別の条件であり、照合条件2の中に1または複数の条件式17が含まれる。
図3は、この発明における条件式17の構成を示す図である。条件式17は、条件番号16と条件記述18から構成され、条件番号16は条件式を一意に区別するための番号であり、条件記述18は正規表現によって記述された照合の条件である。
図4は、この発明における状態遷移表生成部3の構成を示す図である。図において、状態遷移表生成制御部21は、状態遷移生成表の生成の動作手順を制御する。NFA状態集合22、NFA状態遷移集合23、NFA出力記述集合24、状態集合25、出力遷移集合26、状態記述集合27は状態遷移表生成制御部21が参照するデータである。
図5は、この発明における状態遷移表格納部4の構成の一例を示す図である。図において、31はハッシュ値計算部であり、現状態13と入力文字14からハッシュ値32を計算する。ハッシュ値32はハッシュ値計算部31によって計算されたハッシュ値である。状態遷移ハッシュポインタ33は状態遷移ハッシュチェイン34のポインタを複数格納する表である。状態遷移ハッシュチェイン34は状態遷移ハッシュチェイン34へのポインタ、現状態13、入力文字14、次状態15の組である。状態遷移ハッシュ表35は状態遷移ハッシュポインタ33と状態遷移ハッシュチェイン34から成るデータ構造である。比較部36は外部から入力された現状態13aと入力文字14aの組と、状態遷移ハッシュ表35に格納された現状態13b、入力文字14bを比較し、次状態15を出力する。
図6は、この発明における出力表格納部5の構成を示す図である。条件番号インデックス41は条件番号チェインへのポインタを複数格納する。条件番号チェイン42は、条件番号チェイン42へのポインタと条件番号16の組である。
図7は、この発明における照合結果10の一例を示す図である。照合結果10には、入力文書6の照合に成功した条件番号16が含まれる。
次に、本発明の動作説明に先立ち、以下の説明で用いる用語および記号の説明を行う。
非特許文献1などに記載されているように、従来から知られている出力付き決定性有限オートマトンは、(Q, Σ, Δ, δ, λ, q0)の組によって与えられる。ただしQは状態集合である。Σは入力アルファベットであり、空文字εを含む。Δは出力アルファベット、δは遷移関数(Q×Σ→Q)、λは出力関数(Q→Δ)、q0は初期状態である。
本発明のSDFAオートマトン8は(Qs, Σs, Δs, δs, λs, q0)の組によって与えられる。
ここで、Qsは状態集合25であり、従来の出力つき有限オートマトンの状態集合Qに相当するものである。
Δsは出力アルファベットであり、本実施例では条件番号16の集合の集合となる。
δsは状態遷移表格納部4によって実現される状態遷移関数であり、以下、現状態13がqs、入力文字14がσsのとき次状態15がqdとなることを、
δs(qs, σs) = qd
と表記する。
q0は初期状態であり、その意味は従来から知られている出力つき決定性有限オートマトンと同じである。
Σsは従来の出力付き有限オートマトンの入力アルファベットΣに任意文字σany, 除外文字σotherを加えた拡張入力アルファベットである。すなわち、
Σs=Σ∪{σany, σother }
とする。
また、
δs (qs, σs) = qd
であるとき、状態遷移11をtとすると、
t=trans(qs, qd, σs)
と表記するものとする。
現状態13入力文字14の組に対して次状態15が存在する状態遷移11の集合を状態遷移集合26と呼び、Tと表記する。また、状態遷移t=trans(qs, qd, σs)に対して、qsを起点、qdを終点、σsを遷移文字と呼ぶ。更に、状態遷移tの起点を与える関数をSource、終点を与える関数をDestination、遷移文字を与える関数をCharと呼び、それぞれ
qs=Source(t)
qd=Destination(t)
σs=Char(t)
と表記する。
また、
λs(qs) = r
であるとき、出力記述18をdとすると
d=desc(qs, r)
と表記するものとする。
現状態13に対して出力アルファベットrが空でない出力記述12の集合を出力記述集合27と呼び、Dと表記する。出力記述d=desc(qs, r)に対して、qsを出力状態、rを出力結果と呼ぶ。更に、出力記述dの出力状態を与える関数をState、出力結果を与える関数をResultと呼び、それぞれ
qs =State(d)
r =Result(d)
と表記することにする。
本発明のSDFAオートマトン8を生成する過程でNFAが生成されるが、NFAは(Q(NFA), Σs, Δs, δs(NFA), λs(NFA), q0(NFA))の組によって表される。
ここで、Q(NFA)はNFA状態集合22を表す。状態集合25はNFA状態の集合の集合となる。すなわち状態集合25をQと表記するときQ=2Q(NFA)の関係にある。以下、NFAの状態をDFAの状態と区別するため、q(NFA)と表記し、NFAの初期状態をq0(NFA)と表記する。
δs(NFA)はNFAの状態遷移関数であり、現在のNFA状態13がq(NFA)、入力文字14がσsから次状態の集合への関数である。
λs(NFA)はNFAの出力関数であるり、現在のNFA状態13がq(NFA)のとき、出力アルファベットがr∈Δsとなることを
λs(NFA) (q(NFA)) = r
と表記する。
Δsは条件番号16の集合、Σsは拡張入力アルファベットであり、その意味は本発明のSDFAオートマトン8と同じである。
NFAの状態について、NFA状態遷移を以下のように定める。NFAの状態qd(NFA)
q d(NFA)∈δ(qs(NFA), σs)
のとき、NFA状態遷移32を
t(NFA)=trans(qs(NFA), qd(NFA), σs)
と表記するものとする。NFA状態遷移の集合をNFA状態遷移集合とよび、T(NFA)と表記する。また、同様に状態遷移t(NFA)=trans(qs(NFA), qd(NFA), σs)に対して、qs(NFA)を起点、qd(NFA)を終点、σsを遷移文字と呼ぶ。更に、状態遷移t(NFA)の起点を与える関数をSource、終点を与える関数をDestination、遷移文字を与える関数をCharと呼び、それぞれ
qs(NFA)=Source(t(NFA))
qd(NFA)=Destination(t(NFA))
σs(NFA)=Char(t(NFA))
と表記することにする。
NFA状態q(NFA)と出力アルファベットrの組をNFA出力記述と呼ぶことにする。
λs(q(NFA)) = r
であるとき、NFA出力記述34をd(NFA)とすると
d(NFA)=desc(qs(NFA), r)
と表記するものとする。
NFA状態13に対して出力アルファベットpが空でないNFA出力記述の集合をNFA出力記述集合24と呼び、D(NFA)と表記する。出力記述d(NFA)=desc(q(NFA), r)に対して、q(NFA)を出力状態、rを出力結果と呼ぶ。更に、出力記述dの出力状態を与える関数をState、出力結果を与える関数をResultと呼び、それぞれ
q(NFA) =State(d(NFA))
r(NFA) =Result(d(NFA))
と表記することにする。
以上で用語および記号の説明を終わり、次に、動作について説明する。
図8に、本発明の文字列照合装置1の動作を示す。
本発明の文字列照合装置1は、まず、照合条件2を受け取り状態遷移表生成部3により状態遷移11と出力記述12を生成する過程、すなわち、照合条件のコンパイルの手続きを実行する(ステップS51)。
次いで、入力文書6を受け取り、入力文字読み取り部7およびSDFAオートマトン8によって、状態遷移11と出力記述12を参照しながら照合結果10を出力する手続きを順次実行する(ステップS52)。
なお、本実施の例では1回の「照合条件のコンパイル」に対して「入力文書の照合」を1回行うこととしているが、1回の「照合条件のコンパイル」の手続きで生成された、状態遷移11と出力記述12を用いて、複数個の入力文書に対して「入力文書の照合」を行っても良い。
次に、図9により、手続き「照合条件のコンパイル」について説明する。
まず「ε遷移を含むNFAの生成」の手続きにより、正規表現から、ε遷移を含むNFAを生成する(ステップS101)。
次いで、「ε遷移の除去」の手続きによりNFAに含まれるε遷移(空文字による遷移)の除去を行う(ステップS102)。
次いで、「初期状態への遷移の追加」の手続きにより、照合に失敗した際の初期状態への遷移を追加する(ステップS103)。
次いで、「非決定的遷移の除去」の手続きにより、非決定的な遷移を除去する(ステップS104)。
次いで、「未使用状態の除去」の手続きにより、これまでの手順で不要になった状態の除去を行う(ステップS105)。
次いで、「状態数の削減」の手続きにより、冗長な状態および冗長な状態遷移の除去を行う(ステップS106)。
次いで、「状態遷移表と出力表の生成」の手続きにより、状態集合から状態遷移表と出力表を生成する(ステップS107)。
以上の手順により手続き「照合条件のコンパイル」を実行することができる。
ステップS101の、「ε遷移を含むNFAの生成」の手順については、非特許文献1などに示されている公知の手順を使用することができる。
ただし、図24に示すように正規表現中に含まれる任意の文字を表すメタキャラクタ「.」はσanyに置き換える。なお、以下、図24〜図31では状態q(NFA)を単にqと表記している。
また、図25に示すように正規表現中に含まれる、特定文字集合以外を表すメタキャラクタ「^」はσotherに置き換え更に、該当する状態から初期状態q0(NFA)への状態遷移を追加するという手順を追加する。
ステップS102の、「ε遷移の除去」の手順についても、非特許文献1などに示されている公知の手順により、ε遷移(空文字による遷移)を遷移先集合への遷移で置き換えることにより、実現することができる。
次に、図10によってステップS103の「初期状態への失敗遷移の追加」の手続きを示す。
まず、ステップS102によって生成されたNFAの初期状態q0(NFA)からσanyによる遷移が存在しない場合はステップS202に進む。それ以外の場合は、ステップS203に進む(ステップS201)。
「初期状態への失敗遷移の追加(初期状態からσanyによる遷移先が存在しない場合)」の手続きを実行し、終了する(ステップS202)。
ステップS201でNFAの初期状態q0(NFA)からσanyによる遷移が存在する場合は「初期状態への失敗遷移の追加(初期状態からσanyによる遷移先が存在する場合)」の手続きを実行し、終了する(ステップS203)。
なお、本実施例ではNFAの初期状態q0(NFA)からσanyによる遷移先が存在するか否かにより処理を分けているが、ステップS202の処理はステップS203によって代行することも可能である。ステップS202の処理はステップS203と比較すると適用可能な範囲が「初期状態からσanyによる遷移先が存在する」場合に限定されるが、より状態遷移の数を削減することができる。初期状態からσanyによる遷移先が存在するとは、照合条件となる正規表現の先頭に任意文字「.」が指定されるということであるが、実用上はこのような指定がされることは少ないため、多くの場合はステップS202の処理を適用することによって状態遷移の数を削減できる。
以上の手順に従って、手続き「初期状態への失敗遷移の追加」を行うことができる。
次に、ステップS202の「初期状態への失敗遷移の追加(初期状態からσanyによる遷移先が存在しない場合)」の手続きについて説明する。
一般に、連続的な文字列照合を行うNFAまたはDFAでは、すべての状態から初期状態へのε遷移を追加することにより、任意の文字位置からの文字列照合を実現できる。図26に、正規表現(a|b|c(d|e))f に対応するNFAにε遷移を追加した例を示す。本発明のSDFAオートマトン8では、遷移に失敗した際に入力文字を進めずに初期状態q0に戻って再度状態遷移を行うため、初期状態q0へのε遷移を省略できる。すなわち、図27に示すNFAを構成すればよく、状態遷移の総数を大幅に削減することができる。しかし、初期状態q0(NFA)から遷移文字σにより状態q1(NFA)に遷移可能であるとき、状態q(NFA)からの遷移文字σによる遷移が存在するか、または、状態q(NFA)を起点とするいずれかの遷移文字σがσanyである場合は、σによる遷移が成功した場合にもσによりq1(NFA)にも遷移可能であるため、状態q(NFA)からσによる状態q1(NFA)への状態遷移を追加する。図28に、正規表現(a|b|c(d|e))f の場合の例を示す。図28の例では初期状態q0(NFA)から遷移文字aにより状態q1(NFA)に遷移可能であり、状態q3(NFA)から遷移文字aによる遷移が存在するため、図29のように遷移文字aによる状態q3(NFA)から状態q1(NFA)への遷移を追加する。状態q3(NFA)から遷移文字aによる遷移は非決定的な状態遷移となるが、後続の「非決定的遷移の除去」の手続きにより、この非決定的遷移は最終的に除去される。手続き「初期状態への失敗遷移の追加(初期状態からσanyによる遷移先が存在しない場合)」および「初期状態への失敗遷移の追加(初期状態からσanyによる遷移先が存在する場合)」はこの処理を行うためのものである。
図11により、ステップS202の「初期状態への失敗遷移の追加(初期状態からσanyによる遷移先が存在しない場合)」の手続きについて説明する。
まず、t0(NFA) をステップS102によって生成されたNFAの初期状態q0(NFA)を起点とする最初の状態遷移とし、ステップS302に進む(ステップS301)。
NFAの初期状態q0(NFA)を起点とするすべての状態遷移t0(NFA)の処理を終了したら手続きを終了する。それ以外の場合はステップS303に進む(ステップS302)。
σをChar(t0(NFA))とし、ステップS304に進む(ステップS303)。
q(NFA)をNFA状態集合Q(NFA)に含まれる最初のNFA状態とし、ステップS305に進む(ステップS304)。
NFA状態集合Q(NFA)に含まれるすべてのNFA状態q(NFA)の処理を終了したらステップS313に進む。それ以外の場合はステップS306に進む(ステップS305)。
NFA状態q(NFA)が初期状態q0(NFA)の場合は、ステップS312に進む。それ以外の場合はステップS307に進む(ステップS306)。
t(NFA)を、q(NFA)を起点とする最初のNFA状態遷移とし、ステップS308に進む(ステップS307)。
q(NFA)を起点とするすべてのNFA状態遷移t(NFA)の処理を終了したらステップS312に進む。それ以外の場合はステップS309に進む(ステップS308)。
Char(t(NFA))=σ 、Char(t(NFA))= σanyのいずれかの条件が成立する場合はステップS310に進む。いずれの条件も成立しない場合はステップS311に進む(ステップS309)。
NFA状態遷移 trans(q(NFA), Destination(t0(NFA)), σ)がNFA状態遷移集合T(NFA)に含まれていなければTに加え、ステップS311に進む(ステップS310)。
t(NFA)をNFA状態q(NFA)を起点とする次のNFA状態遷移とし、ステップS305に進む(ステップS311)。
ステップS306にてNFA状態q(NFA)がNFAの初期状態q0(NFA)の場合、またはステップS308にてq(NFA)を起点とするすべてのNFA状態遷移t(NFA)を処理した場合はNFA状態q(NFA)をNFA状態集合QNFAに含まれる次のNFA状態とし、ステップS305に進む(ステップS312)。
ステップS305にてすべてのNFA状態q(NFA)の処理を終了した場合は、t0(NFA) をNFAの初期状態q0(NFA)を起点とする次のNFA状態遷移とし、ステップS302に進む(ステップS313)。
以上の手順に従って、手続き「初期状態への失敗遷移の追加(初期状態からσanyによる遷移先が存在しない場合)」を行うことができる。
次に、ステップS203の「初期状態への失敗遷移の追加(初期状態からσanyによる遷移先が存在する場合)」の手続きについて説明する。この手続きの目的はステップS202と同じであるが、図30に示す正規表現(.|b|c(d|e))f のように、初期状態からσanyによる遷移先q1(NFA)が存在する場合は、すべての状態に対して、遷移が成功した場合にもq1(NFA)にも遷移可能となるため、図31に示すように、NFAの初期状態q0(NFA)を除くすべてのNFA状態q(NFA)とすべての遷移文字σに対して、q1(NFA)への遷移を追加する。
図12により、ステップS203の「初期状態への失敗遷移の追加(初期状態からσanyによる遷移先が存在する場合)」の手続きについて説明する。
まず、t0(NFA) をステップS102によって生成されたNFAの初期状態q0(NFA)を起点とする最初のNFA状態遷移とし、ステップS352に進む(ステップS351)。
NFAの初期状態q0(NFA)を起点とするすべてのNFA状態遷移t0(NFA)の処理を終了したら手続きを終了する。それ以外の場合はステップS353に進む(ステップS352)。
σをChar(t0(NFA))とし、ステップS354に進む(ステップS353)。
qをNFA状態集合Q(NFA)に含まれる最初のNFA状態とし、ステップS355に進む(ステップS354)。
NFA状態集合Q(NFA)に含まれるすべてのNFA状態qの処理を終了したらステップS359に進む。それ以外の場合はステップS356に進む(ステップS355)。
NFA状態q(NFA)が初期状態q0(NFA)の場合は、ステップS356に進む。それ以外の場合はステップS357に進む(ステップS306)。
NFA状態遷移trans (q(NFA), Destination(t0(NFA)), σ(NFA))がNFA状態遷移集合T(NFA)に含まれていなければT(NFA)に加え、ステップS355に進む(ステップS358)。
ステップS355にてすべてのNFA状態q(NFA)の処理を終了した場合は、t0(NFA) をNFAの初期状態q0(NFA)を起点とする次のNFA状態遷移とし、ステップS352に進む(ステップS359)。
以上の手順に従って、手続き「初期状態への失敗遷移の追加(初期状態からσanyによる遷移先が存在する場合)」を行うことができる。
次にステップS104の「非決定的遷移の除去」の手続きについて説明する。本手続きは、NFAに含まれる非決定的な遷移を除去し、決定的な遷移を生成するものである。図32に一例を示す。状態qsourceから遷移文字aによる状態遷移としてq1およびq2が存在する、すなわち非決定的であるため、遷移先の状態を併合する、すなわち図33に示すように遷移先のNFA状態集合q1およびq2の和集合qn =q1∪q2への状態遷移とする。この手順は基本的に非特許文献1などに示されているDFAの生成手順と同様であるが、本実施の例では、更に、図34のように、任意文字σanyによる状態遷移q2と遷移文字aによる状態遷移の終点q1を含む場合について、非決定的な遷移文字aに関する状態qn =q1∪q2への状態遷移の他に、除外文字σotherによる状態q1への遷移を生成する(図35)。
図13によって、ステップS104の「非決定的遷移の除去」の手続きについて説明する。本手続きおよび「σotherに関する非決定的遷移の除去」の手続きでは変数Retryを使用する。変数RetryはTRUEまたはFALSEのいずれかの値をとることができる。
まず「状態集合の初期化」の手続きを行い、ステップS402に進む(ステップS401)。
次いで、変数RetryをFALSEに初期化し、ステップS401に進む(ステップS402)。
次いで、「Σに関する非決定的遷移の除去」の手続きを行い。ステップS404に進む(ステップS403)。
次いで、「σotherに関する非決定的遷移の除去」の手続きを行い、ステップS405に進む(ステップS404)。
変数RetryがTRUEの場合はステップS403に進む。FALSEの場合は終了する(ステップS405)。
以上の手順に従って、手続き「非決定的遷移の除去」を行うことができる。
次にステップS401の「状態集合の初期化」の手続きについて説明する。本手続きは、DFAの状態を生成するため、必要な状態集合を初期化するためのものであり、すべてのNFAの状態q(NFA)に対して、DFAの状態{q(NFA)}を関連する状態遷移ととともに生成することを目的とする。
図14によって、ステップS401の「状態集合の初期化」の手続きについて説明する。
まず、状態集合Qを空に初期化しステップS502に進む(ステップS501)。
次に、q(NFA)をNFA状態集合Q(NFA)に含まれる最初のNFA状態とし、ステップS502に進む(ステップS502)。
NFA状態集合Q(NFA)に含まれるすべてのNFA状態q(NFA)を処理した場合はステップS506に進む。それ以外の場合は、ステップS504に進む(ステップS503)。
状態集合QにNFA状態集合(すなわちDFAの状態){q(NFA)}を加え、ステップS505に進む(ステップS504)。
q(NFA)をNFA状態集合Q(NFA)に含まれる次のNFA状態とし、ステップS503に進む(ステップS505)。
ステップS503においてNFA状態集合Q(NFA)に含まれるすべてのNFA状態(NFA)を処理した場合は、状態遷移集合Tを空にし、ステップS507に進む(ステップS506)。
次に、t(NFA)をNFA状態遷移集合T(NFA)に含まれる最初のNFA状態遷移とし、ステップS508に進む(ステップS507)。
NFA状態遷移集合T(NFA)に含まれるすべてのNFA状態遷移t(NFA)を処理したらステップS511に進む。それ以外の場合は、ステップS509に進む(ステップS508)。
状態遷移集合Tにtrans({Source(t(NFA))}, {Destination(t(NFA))}, Char(t(NFA)))を加え、ステップS510に進む(ステップS509)。
t(NFA)をNFA状態遷移集合T(NFA)に含まれる次のNFA状態遷移とし、ステップS508に進む(ステップS510)。
ステップS508においてT(NFA)に含まれるすべてのNFA状態遷移t(NFA)を処理した場合は、出力記述集合Dを空にし、ステップS512に進む(ステップS511)。
次に、d(NFA)をNFA出力記述集合D(NFA)に含まれる最初のNFA出力記述とし、ステップS508に進む(ステップS512)。
NFA出力記述集合D(NFA)に含まれるすべてのNFA出力記述d(NFA)を処理したら終了する。それ以外の場合は、ステップS509に進む(ステップS513)。
出力記述集合Dにdesc({State(d(NFA))}, Result(d(NFA)))を加え、ステップS510に進む(ステップS514)。
d(NFA)をNFA出力記述集合D(NFA)に含まれる次のNFA出力記述とし、ステップS508に進む(ステップS515)。
以上の手順によって、手続き「状態集合の初期化」を行うことができる。
次に、ステップS403の「Σに関する非決定的遷移の除去」の手続きについて説明する。本手続きでは、図32および図34に示した例のように、一つの遷移文字σ∈Σに対して複数の遷移先が存在するとき、新たな状態への遷移で置き換えることにより、各遷移文字σによる遷移先を一意に確定することを目的とする。
図15によって、ステップS403の「Σに関する非決定的遷移の除去」の手続きについて説明する。本手続きでは変数Foundを使用する。変数RetryはTRUEまたはFALSEのいずれかの値をとることができる。
まず、FoundをFALSEに初期化し、ステップS602に進む(ステップS601)。
次に、qを状態集合Q中の最初の状態遷移とし、ステップS603に進む(ステップS602)。
状態集合Q中のすべての状態qを処理した場合はステップS616に進む。それ以外の場合はステップS604に進む(ステップS603)。
σを入力アルファベットΣ中の最初のアルファベットとし、ステップS605に進む(ステップS604)。
入力アルファベットΣ中のすべてのアルファベットσを処理した場合はステップS610に進む。それ以外の場合はステップS606に進む(ステップS605)。
qを起点とし、σを遷移文字とする状態遷移tが複数存在するか、またはσを遷移文字とする状態遷移tとσanyを遷移文字とする状態遷移tが存在する、すなわち、σによる遷移が非決定的である場合は、ステップS607に進む。それ以外の場合はステップS609に進む(ステップS606)。
パラメータqsourceをq、σtをσに設定し手続き「新状態の生成」を行い、ステップS608に進む(ステップS607)。
変数FoundにTRUEを設定し、ステップS609に進む(ステップS608)。
σを入力アルファベットΣ中の次のアルファベットとし、ステップS605に進む(ステップS609)。
ステップS605で入力アルファベットΣ中のすべてのアルファベットσを処理した場合は、tを状態qを起点とする最初の状態遷移とし、ステップS611に進む(ステップS610)。
状態qを起点とするすべての状態遷移tを処理した場合はステップS615に進む。それ以外の場合はステップS612に進む(ステップS611)。
tの遷移文字Char(t)がσanyの場合はステップS613に進む。それ以外の場合はステップS614に進む(ステップS612)。
tの遷移文字をσotherで置き換える、すなわちtを (Source(t), Destination(t), σother)でおきかえ、ステップS614に進む(ステップS613)。
tを状態qを起点とする次の状態遷移とし、ステップS611に進む(ステップS614)。
ステップS611で状態qを起点とするすべての状態遷移tを処理した場合はqを状態集合Q中の次の状態遷移とし、ステップS603に進む(ステップS615)。
ステップS603で状態集合Q中のすべての状態qを処理した場合は、変数FoundがTRUEであればステップS601に進む。それ以外の場合は終了する(ステップS616)。
以上の手順により、手続き「Σに関する非決定的遷移の除去」を行うことができる。
次に、ステップS404の手続き「σotherに関する非決定的遷移の除去」について説明する。本手続きでは、図36に示すように、「Σに関する非決定的遷移の除去」によって生成された遷移文字σotherによる遷移について、状態qsourceから複数の状態q1およびq2への状態遷移が存在する場合、それらの和集合qn =q1∪q2の状態への遷移で置き換えることにより、図37に示すように、遷移文字σotherによる非決定的な遷移を除去する。
図16により、ステップS404の手続き「σotherに関する非決定的遷移の除去」について説明する。本手続きでは変数Foundを使用する。変数FoundはTRUEまたはFALSEのいずれかの値をとることができる。また本手続きでは変数Counterを使用する。変数Counterは0以上の整数値を取ることができる。
まず、変数FoundにFALSEを設定し、ステップS702に進む(ステップS701)。
qを状態集合Q中の最初の状態とし、ステップS703に進む(ステップS702)。
状態集合Q中のすべての状態qを処理した場合はステップS714に進む。それ以外の場合はステップS701に進む(ステップS703)。
変数Counterに0を設定し、ステップS705に進む(ステップS704)。
tにqを起点とする最初の状態遷移を設定しステップS706に進む(ステップS705)。
qを起点とするすべての状態遷移tを処理した場合はステップS710に進む。それ以外の場合はステップS707に進む(ステップS706)。
tの遷移文字Char(t)がσotherの場合はステップS708に進む。それ以外の場合はステップS709に進む(ステップS707)。
変数Counterに1を加え、ステップS709に進む(ステップS708)。
tに、qを起点とする次の状態遷移を設定し、ステップS705に進む(ステップS709)。
ステップS706においてqを起点とするすべての状態遷移tを処理した場合は、変数Counterの値が2以上であればステップS711に進む。それ以外の場合はステップS713に進む(ステップS710)。
パラメータqsourceをq、σtをσotherに設定し、手続き「新状態の生成」を呼び出し、ステップS712に進む(ステップS711)。
変数FoundにTRUEを設定し、また変数RetryにTRUEを設定し、ステップS713に進む(ステップS712)。
qを状態集合Q中の次の状態遷移とし、ステップS703に進む(ステップS713)。
ステップS703にて状態集合Q中のすべての状態qを処理した場合は、変数FoundがTRUEの場合はステップS701に進む。それ以外の場合は終了する(ステップS714)。
以上の手順により、手続き「σotherに関する非決定的遷移の除去」を行うことができる。
次に、ステップS607およびステップS711の手続き「新状態の生成」の手順について説明する。本手順は、状態qsourceから遷移文字σtに関する個々の非決定的な状態遷移を除去する手順である。
図17によって、ステップS607およびステップS711の手続き「新状態の生成」の手順について説明する。手続き「新状態の生成」ではqsourceおよびσtをパラメータとする。
まず、状態qsourceを起点とし、σtにより遷移可能な状態の集合を求め、それらのNFA状態に関する和集合を求め、状態qnとする。qnが状態遷移集合Tに含まれている場合はステップS817に進む。それ以外の場合はステップS802に進む(ステップS801)。
次に、状態qnを状態集合Qに追加し、ステップS803に進む(ステップS802)。
tをqsourceを起点とする最初の状態遷移とし、ステップS804に進む(ステップS803)。
qsourceを起点とするすべての状態遷移tを処理した場合はステップS817に進む。それ以外の場合はステップS805に進む(ステップS804)。
Char(t)=σtの場合、またはChar(t)=σanyの場合はステップS806に進む。それ以外の場合はステップS816に進む(ステップS805)。
t1を、Destination(t)を起点とする最初の状態遷移とし、ステップS807に進む(ステップS806)。
Destination(t)を起点とするすべての状態遷移t1を処理した場合はステップS812に進む。それ以外はステップS808に進む(ステップS807)。
状態遷移trans(qn, Destination(t1), Char(t1))∈TでなければTにtrans(qn, Destination(t1), Char(t1))を追加し、ステップS809に進む(ステップS808)。
Char(t1)=σotherであればステップS810に進む。それ以外であればステップS811に進む(ステップS809)。
手続き「σotherによる状態遷移の補正」を呼び出し、ステップS811に進む。このとき、パラメータとして(qsource, qn, t1)を与える(ステップS810)。
t1を、Destination(t)を起点とする次の状態遷移とし、ステップS807に進む(ステップS811)。
ステップS807でDestination(t)を起点とするすべての状態遷移t1を処理した場合は、dをDestination(t)を出力状態とする最初の出力記述とし、ステップS813に進む(ステップS812)。
Destination(t)を出力状態とするすべての出力記述dを処理した場合はステップS816に進む。それ以外の場合は、ステップS814に進む(ステップS813)。
出力記述desc(qn,Result(d))∈DでなければDにdesc(qn,Result(d))を加え、ステップS815に進む(ステップS814)。
dをDestination(t)を出力状態とする次の出力記述とし、ステップS813に進む(ステップS815)。
tをqsourceを起点とする次の状態遷移とし、ステップS804に進む(ステップS816)。
ステップS801でqnが状態遷移集合Tに含まれていない場合、およびステップS804でqsourceを起点とするすべての状態遷移tを処理した場合は、tをqsourceを起点とする最初の状態遷移とし、ステップS818に進む(ステップS817)。
qsourceを起点とするすべての状態遷移tを処理した場合はステップS822に進む。それ以外の場合はステップS819に進む(ステップS818)。
Char(t)=σtの場合はステップS820に進む。それ以外の場合はステップS821に進む(ステップS819)。
状態遷移tを状態遷移集合Tから削除し、ステップS821に進む(ステップS820)。
tをqsourceを起点とする次の状態遷移とし、ステップS818に進む(ステップS821)。
ステップS818でqsourceを起点とするすべての状態遷移tを処理した場合は、状態遷移trans(qsource, qn, σt) ∈TでなければTにtrans(qsource, qn, σt)を追加し、終了する(ステップS822)。
以上の手順により、手続き「新状態の生成」を行うことができる。
次にステップS811の手続き「σotherによる状態遷移の補正」について説明する。本手続きは、図38に示すように、非決定的遷移の除去の際に併合すべき状態q1, q2を起点とする状態遷移の中に遷移文字σotherによる状態遷移が含まれる場合の、状態q1, q2を起点とする状態遷移の終点となる状態の併合の手順を示すものである。図38の状態q1, q2を併合すると図39のようになり、状態qn =q1∪q2遷移文字bによる状態遷移の終点はq3∪q5となる。同様に、図40に示す状態q1, q2を併合すると、図41に示すように遷移文字b、c、σotherによる状態遷移の終点は、それぞれq3∪q6、q4∪q5、q4∪q6となる。
図18によって、ステップS811の手続き「σotherによる状態遷移の補正」について説明する。本手続きでは、拡張入力アルファベットσ∈Σsの集合、CharSetを用いる。
まずCharSetを空に初期化し、ステップS902に進む(ステップS901)。
次に、tをSource(tother)を起点とする最初の状態遷移とし、ステップS903に進む(ステップS902)。
Source(tother)を起点とするすべての状態遷移を処理した場合は、ステップS907に進む。それ以外の場合は、ステップS904に進む(ステップS903)。
Char(t)が入力アルファベットΣに含まれる、すなわち、Char(t)≠σanyかつChar(t)≠σotherの場合はステップS906に進む。それ以外の場合はステップS905に進む(ステップS904)。
CharSetにChar(t)を加え、ステップS906に進む(ステップS905)。
tをSource(tother)を起点とする次の状態遷移とし、ステップS903に進む(ステップS906)。
ステップS903でSource(tother)を起点とするすべての状態遷移を処理した場合は、t を状態qを起点とする最初の状態遷移とし、ステップS908に進む(ステップS907)。
状態qを起点とするすべての状態遷移qを処理した場合は終了する。それ以外の場合はステップS909に進む(ステップS908)。
Destination(t)≠Source(tother )の場合はステップS910に進む。それ以外の場合はステップS916に進む(ステップS909)。
t1 をDestination(t)を起点とする最初の状態遷移とし、ステップS911に進む(ステップS910)。
Destination(t)を起点とするすべての状態遷移t1 を処理した場合はステップS916に進む。それ以外の場合はステップS912に進む(ステップS911)。
Char(t1)が入力アルファベットΣに含まれる、すなわち、Char(t1)≠σanyかつChar(t1)≠σotherの場合はステップS913に進む。それ以外の場合はステップS915に進む(ステップS912)。
Char(t1)がCharSetに含まれる場合はステップS915に進む。それ以外の場合はステップS914に進む(ステップS913)。
状態遷移trans(qn, Destination(tother), Char(t1))∈TでなければTにtrans(qn, Destination(tother), Char(t1))を加え、ステップS915に進む(ステップS914)。
t1 をDestination(t)を起点とする次の状態遷移とし、ステップS911に進む(ステップS915)。
ステップS909にてDestination(t)≠Source(tother )でなかった場合、あるいはステップS911にてDestination(t)を起点とするすべての状態遷移t1 を処理した場合は、t を状態qを起点とする次の状態遷移とし、ステップS908に進む(ステップS916)。
以上の手順により、手続き「σotherによる状態遷移の補正」を行うことができる。
次に、ステップS105の「未使用状態の除去」の手続きについて説明する。本手続きでは、これまでの処理の結果発生した、状態遷移の終点とならない状態、すなわち、どのような入力に対しても決して到達しない状態を削除する。
図19によって、ステップS105の「未使用状態の除去」の手続きについて説明する。本手続きでは変数Foundを用いる。変数FoundはTRUEまたはFALSEのいずれかの値をとることができる。
まず、変数FoundをFALSEにし、ステップS1002に進む(ステップS1001)。
次に、qを状態集合Qに含まれる最初の状態とし、ステップS1003に進む(ステップS1002)。
状態集合Qに含まれるすべての状態qを処理した場合はステップS1017に進む。それ以外の場合はステップS1004に進む(ステップS1003)。
qが初期状態q0の場合はステップS1016に進む。それ以外の場合はステップS1005に進む(ステップS1004)。
qを終点とする状態遷移が存在する場合はステップS1016に進む。それ以外の場合はステップS1006に進む(ステップS1005)。
変数FoundをTRUEにし、ステップS1007に進む(ステップS1006)。
tをqを起点とする最初の状態遷移とし、ステップS1008に進む(ステップS1007)。
qを起点とするすべての状態遷移tを処理した場合はステップS1011に進む。それ以外の場合はステップS1009に進む(ステップS1008)。
状態遷移tを状態遷移集合Tから取り除き、ステップS1010に進む(ステップS1009)。
tをqを起点とする次の状態遷移とし、ステップS1008に進む(ステップS1010)。
ステップS1008でqを起点とするすべての状態遷移tを処理した場合は、dをqを出力状態とする最初の出力記述とし、ステップS1012に進む(ステップ1011)。
qを出力状態とするすべての出力記述dを処理した場合はステップS1015に進む。それ以外の場合はステップ1013に進む(ステップ1012)。
出力記述dを出力記述集合Dから削除し、ステップS1014に進む(ステップS1013)。
dをqを出力状態とする次の出力記述とし、ステップS1012に進む(ステップS1014)。
ステップS1012にてqを出力状態とするすべての出力記述dを処理した場合は、状態qを状態集合Qから削除し、ステップS1012に進む(ステップS1015)。
qを状態集合Qに含まれる次の状態とし、ステップS1003に進む(ステップS1016)。
ステップ1003にて状態集合Qに含まれるすべての状態qを処理した場合は、変数Foundを調べFoundがTRUEの場合はステップS1002に進む。それ以外の場合は終了する(ステップ1017)。
以上の手順により、手続き「未使用状態の除去」を行うことができる。
なお、手続き「未使用状態の除去」は、状態遷移表を格納するのに必要なメモリ容量を削減することを目的としている。従って、本手続きを省略しても手続き「入力文書の照合」を実行することは可能であり、省略することにより、「照合条件のコンパイル」に要する時間を短縮することができる。
次に、図20によって、ステップS106の「冗長状態の除去」の手続きについて説明する。本手続きでは、2種類の不要な状態を除去する。第1の場合は、σotherによる状態遷移と同一の終点の状態を持つ状態遷移である。図42に一例を示す。図42において、遷移文字bによるq3を終点とする状態遷移を削除してもSDFAオートマトンの動作は同じであり、この状態遷移を削除することにより、状態遷移の総数を削減し、状態遷移表を格納するのに必要なメモリ容量を削減することができる。第2の場合は、すべての遷移文字に対する状態遷移の終点が等しい複数の状態の併合である。図43に一例を示す。図43において、状態q1と状態q2ではすべての遷移文字に対する状態遷移の終点が等しいため、状態q1と状態q2を併合したqn=q1∪q2で置換することができる。これらの2種類の場合の一方によって状態または状態遷移が削除されると、それにより他方による状態または状態遷移の削除が可能になる場合があるため、新たに状態または状態遷移が削除されなくなるまでこれら2種類を繰り返す。
図20によって、ステップS106の「冗長状態の除去」の手続きについて説明する。本手続きでは変数StateRemovedおよびTransitionRemovedを用いる。変数StateRemovedおよびTransitionRemovedはTRUEまたはFALSEのいずれかの値をとることができる。
まず、StateRemovedにTRUEを設定し、ステップS1102に進む(ステップS1101)。
手続き「冗長な状態遷移の削除」を呼び出し、ステップS1103に進む。本手続きの中でTransitionRemovedが設定される(ステップS1102)。
TransitionRemoved=FALSEかつStateRemoved=FALSEの場合は終了する。それ以外の場合はステップS1104に進む(ステップS1103)
手続き「冗長な状態の併合」を呼び出し、ステップS1105に進む(ステップS1104)。
TransitionRemoved=FALSEかつStateRemoved=FALSEの場合は終了する。それ以外の場合はステップS1102に進む(ステップS1105)。
以上の手順により、手続き「冗長状態の除去」を行うことができる。
なお、手続き「冗長状態の除去」は、状態遷移表を格納するのに必要なメモリ容量を削減することを目的としている。従って、本手続きを省略しても手続き「入力文書の照合」を実行することは可能であり、省略することにより、「照合条件のコンパイル」に要する時間を短縮することができる。
次に、ステップS1102の手続き「冗長な状態遷移の削除」について説明する。本手続きは、「冗長状態の除去」の第1の場合に相当し、図42に示すような、σotherによる状態遷移と同一の終点の状態を持つ状態遷移を削除する。
図21によって、ステップS1102の手続き「冗長な状態遷移の削除」について説明する。
まず、変数TransitionRemovedをFALSEに設定し、ステップS1202に進む(ステップS1201)。
次に、tを状態遷移集合Tに含まれる最初の状態遷移とし、ステップS1203に進む(ステップS1202)。
状態遷移集合Tに含まれるすべての状態tを処理した場合は終了する。それ以外の場合は、ステップS1204に進む(ステップS1203)。
Char(t)がσotherである場合にはステップS1205に進む。それ以外の場合はステップS1210に進む(ステップS1204)。
次に、t1をSource(t)を起点とする最初の状態遷移とし、ステップS1206に進む(ステップS1205)。
Source(t)を起点とするすべての状態遷移t1を処理した場合はステップS1210に進む。それ以外の場合は、ステップS1207に進む(ステップS1206)。
t1≠tかつDestination(t1)=Destination(t)の場合はステップS1208に進む。それ以外の場合はステップS1209に進む(ステップS1207)。
状態遷移t1を状態遷移集合Tから削除し、ステップS1209に進む(ステップS1208)。
t1をSource(t)を起点とする次の状態遷移とし、ステップS1206に進む(ステップS1209)。
ステップS1204にてChar(t)がσotherでなかった場合、またはステップS1206にてSource(t)を起点とするすべての状態遷移t1を処理した場合は、tを状態遷移集合Tに含まれる次の状態遷移とし、ステップS1203に進む(ステップS1210)。
以上の手順により、手続き「冗長な状態遷移の削除」を行うことができる。
次に、ステップ1104の手続き「冗長な状態の併合」について説明する。本手続きは、「冗長状態の除去」の第2の場合、すなわち、図43に示すような、すべての遷移文字に対する状態遷移の終点が等しい複数の状態を併合する。
ステップ1104の手続き「冗長な状態の併合」は、例えば、非特許文献1などに記載されている公知の手順により実行可能である。この手順によって、1つ以上の状態が併合されたときは変数StateRemovedをTRUEに設定する。それ以外の場合は変数StateRemovedをFALSEに設定する。
次に、図22によりステップS107の「状態遷移表と出力表の生成」について説明する。本手続きでは、状態集合25、状態遷移集合26、および出力記述集合27から、状態遷移11と出力記述12を取り出し、それぞれ状態遷移表格納部4、出力表格納部12に格納する。
まず、状態集合Qに含まれている状態の総数をNとするとき、各状態qに0〜N-1の一意の状態番号StateId(q)を対応づける(ステップS1301)。
状態遷移集合Tから最初の状態遷移tを取り出す(ステップS1302)。
状態遷移集合Tに含まれるすべての状態遷移tを処理したらステップS1307に進む。それ以外の場合はステップS1304に進む(ステップS1303)。
現状態Source(t)、入力文字Char(t)の組に対してハッシュ値計算部31でハッシュ値32を計算し、ステップS1305に進む(ステップS1304)。
ハッシュ値32をオフセットとする状態遷移ハッシュポインタ33に現状態Source(t)、入力文字Char(t) 、次状態Destination(t)の組から成る状態遷移ハッシュチェイン34を追加し、ステップS1306に進む(ステップS1305)。
tを状態遷移集合Tに含まれる次の状態遷移とし、ステップS1303に進む(ステップS1306)。
ステップS1303にて状態遷移集合Tに含まれるすべての状態遷移を処理した場合は、出力記述集合から最初の出力記述dを取り出す(ステップS1307)。
出力記述集合Dに含まれるすべての出力記述dを処理したら終了する。それ以外の場合はステップS130に進む(ステップS1308)。
State(d)の状態番号StateId(State(d))に対応する条件番号インデックス41に条件番号チェイン42としてResult(d)を追加しステップS1310に進む(ステップS1309)。
dを出力記述集合Dに含まれる次の出力記述とし、ステップS1308に進む(ステップS1310)。
以上に示した手順により、手続き「状態遷移表と出力表の生成」を実行することができる。
次いで、図23によって、手続き「入力文書の照合」について説明する。
まず、状態qに初期状態q0を設定し、ステップS2002に進む(ステップS2001)。
出力表格納部5を探索し、qに関連する条件番号16を出力する。この手順は、条件番号インデックス41の現状態13の状態番号StateId(q)に対応する条件番号チェイン42へのポインタを順に探索することによって実現される。すべての条件番号チェイン42の探索が終わったらステップS2003に進む(ステップS2002)。
入力がすべて終了したら終了する。それ以外の場合はステップS2004に進む(ステップS2003)。
入力文字読み取り部7から次の入力文字14を受け取り、σとし、ステップS2005に進む(ステップS2004)。
状態遷移表格納部4を探索し、状態qから遷移文字σによる遷移先qdが存在するか否か、すなわち、trans(q, qd, σ)∈Tなるqdが存在するかどうか調べ、ステップS2006に進む(ステップS2005)。
遷移先qdが存在する場合はステップS2007に進む。それ以外の場合はステップS2008に進む(ステップS2006)。
qに qdを設定し、ステップS2002に進む(ステップS2007)。
ステップS2006でqdが存在しない場合は、状態qから遷移文字σotherによる遷移先qdが存在するか否か、すなわち、trans(q, qd, σother)∈Tなるqdが存在するかどうか調べ、ステップS2009に進む(ステップS2008)。
遷移先qdが存在する場合はステップS2007に進む。それ以外の場合はステップS2010に進む(ステップS2009)。
状態qにq0を設定し、ステップS2006に進む。
以上の手順により、手続き「入力文書の照合」を行うことができる。
以下、図44に示す照合条件2と図54に示す入力文字列の場合を例にとって、本実施の例の文字列照合装置の動作を説明する。図44の照合条件は特許文献3に示されていた図52の照合条件の表記を本実施の例の形式にあわせたものであり、図52と論理的に等価な照合条件である。
ステップS51に示した手続き「照合条件コンパイル」を実行することにより、図44の照合条件2から、図45に示す状態遷移表と、図46に示す出力表が生成される。なお、初期状態の状態番号を0とする。
図45の状態遷移表は状態遷移表格納部4に格納される現状態13、入力文字14に対する次状態15を表で表現したものであり、例えば、現状態の状態番号が6で入力文字「d」の時、次状態は10となることを示している。図中で「−」は、次状態15が存在しないことを示しており、このような組み合わせに対しては状態遷移表格納部4はメモリを消費することなく格納することができる。従来の出力つき有限状態オートマトンでは図53に示す通り、90個の組み合わせを必要とするのに対し、図45の例では、46個の状態遷移につき情報を格納すればよく、状態遷移表を格納するのに必要なメモリを削減するという効果が得られている。
図46の出力表は出力表格納部5に格納される現状態13に対応する条件番号16の集合を表で表現したものであり、例えば、現状態が4のとき、条件番号0を出力することを示している。
一例として入力文字列「aaca」を入力とした場合の動作を図47に示す。まず、状態qを初期状態(状態0)に設定する。次いで1文字目の文字「a」を読み、状態0における文字「a」の遷移先である状態2に遷移する。文字「a」による遷移先が定義されているのでσotherの参照は不要であり、このことを図47中では(不要)と表記している。次に、2文字目の文字「a」を読み、状態2における文字「a」の遷移先である状態5に遷移する。次に、3文字目の文字「c」を読み、状態5における文字「c」の遷移先である状態9に遷移する。次に、4文字目の文字「a」を読み、状態9における文字「a」の遷移先である状態12に遷移する。ここで入力が終了する。
特許文献3に記載された従来の技術では同等の条件に対して7回の状態遷移表の参照を必要としていたが、本実施の例では4回で済む。このように、本発明によれば、遷移の失敗による状態遷移表の参照回数を1文字当り2回以下とし、遷移の失敗が繰り返されることによる性能低下による性能低下を防止し、高速な文字列照合を可能にすることを目的とする。
なお、図44の照合条件は、特許文献3に記載の技術との比較のために記載したものであるが、初期状態からすべての文字による遷移が可能であると言う特殊な条件を持っている。図44の照合条件の目的とするところは照合対象文字列「abcd」のうち一文字が変化してもその文字列を検出できるようにすることであるが、その目的および照合条件の意味をほとんど変更せずに図48の照合条件に変換することができる。このような場合には、状態遷移に必要なメモリを更に削減し、本実施の例の効果をより発揮することができる。
ステップS51に示した手続き「照合条件コンパイル」を実行することにより、図48の照合条件2から、図49に示す状態遷移表と、図50に示す出力表が生成される。なお、初期状態の状態番号を0とする。
図49の状態遷移表の意味は図45と同様であり、状態遷移表格納部4に格納が必要な状態遷移の数は23個に削減され、更に必要なメモリを削減するという効果が得られている。
また、図48の照合条件2について、入力「xabxd」に対する動作を図51に示す。状態0において1文字目の「x」の遷移先は定義されていないので、σotherを参照するが、それでも遷移先が定義されていないので次状態は初期状態、すなわち状態0とする。このとき状態遷移表の参照は2回行われる。以下、2文字目の「a」で状態3、3文字目の「b」で状態6に遷移する。4文字目の「x」では、「x」の遷移先は定義されていないので、σotherを参照し、次状態1を得る。このとき状態遷移表の参照は2回である。更に、5文字目の「d」で状態2に遷移する。状態2は出力となる条件番号16として番号0が存在しているので、これを出力する。この場合、状態遷移表の参照回数は7回となる。
なお、非特許文献1など記述されているように、出力を持たない一般のDFAは、出力アルファベットとして「受理した」「受理しない」という2種類の情報を出力する特殊なMoore機械とみなすことができる。本実施の例でも、単に照合結果に条件番号が存在するか否かを判定することにより、「受理した」「受理しない」という2種類の情報を出力する文字列照合装置を構成できる。
なお、以上の実施の例では、入力および照合の対象は「文字」であるとしてきたが、「文字」は人間に可読な文字列に限定されず、任意の記号列、データ列に対して適用が可能である。例えば遺伝子配列やセンサなどにより計測されたデータの識別に適用しても良い。
なお、以上の実施の例では、状態遷移表格納部4に状態遷移ハッシュ表35を使用するものとしたが、配列、木構造、など2次元構造の表を論理的に表現可能ないかなるデータ構造によって実現しても良い。
また、初期状態など使用頻度の高い状態に対してはアクセス速度の高速な配列などのデータ構造を使用し、使用頻度の低い状態に対してはメモリ容量の効率の高いハッシュ表や木構造などのデータ構造を併用しても良い。
なお、以上の実施の例では、出力表格納部5に条件番号インデックス41を使用するものとしたが、木構造やハッシュ表など、1次元構造の表を論理的に表現可能ないかなるデータ構造によって実現してもよい。
この発明は、文字列照合装置に適用することが可能である。

Claims (17)

  1. 正規表現で記述された照合条件に基づいて生成された状態遷移表において、現状態と入力文字の組に対する次の遷移先状態が存在しない場合、所定の状態qへ遷移する除外文字を設定して状態遷移表を生成する状態遷移表生成部と、
    前記状態遷移表生成部により生成された前記状態遷移表に基づいて、遷移中の現在の状態である現状態と、入力された文字列から文字毎に順次読み進めた入力文字との組が、前記状態遷移表に格納された前記状態遷移の状態と遷移文字との組に一致する場合に、この状態と遷移文字との組に対応付けられた前記遷移先状態へ遷移し、前記現状態と前記入力文字との組に対応付けられた前記遷移先状態が存在しない場合、前記除外文字による遷移先である前記状態qへ遷移し、前記入力文字の次の入力文字を読み進めるオートマトンと
    を備えることを特徴とする文字列照合装置。
  2. 前記状態遷移表生成部は、前記照合条件に基づいて生成された状態遷移表において、現状態と入力文字の組に対する次の遷移先状態が存在しない場合、初期状態へ遷移する状態遷移表を作成することを特徴とする請求項1記載の文字列照合装置。
  3. 前記状態遷移表生成部は、複数の照合条件が入力された場合、状態の併合に基づいて出力記述の併合を行い、出力表作成し、
    前記オートマトンは、前記出力表に基づいて出力することを特徴とする請求項1記載の文字列照合装置。
  4. 前記状態遷移表生成部は、ある状態から任意文字による遷移先q1と所定の遷移文字σに
    よる遷移先q2が存在するとき、前記任意文字を前記除外文字で置き換え、前記所定の遷移
    文字σによる遷移先をq1とq2を併合した状態で置き換えることを特徴とする請求項1記載
    の文字列照合装置。
  5. 前記状態遷移表生成部は、ある状態から前記除外文字による遷移先の状態が複数存在するとき、それら複数の状態を併合した状態で置き換えることを特徴とする請求項1記載の文字列照合装置。
  6. 前記状態遷移表生成部は、所定の状態q1,q2を併合する際に、q2から前記除外文字によりq3に状態遷移する場合、q1を起点とする状態遷移先とq3を併合することを特徴とする請求項1記載の文字列照合装置。
  7. 前記状態遷移表生成部は、NFAを生成する際に、「.」による遷移を任意文字遷移とする状態遷移を生成することを特徴とする請求項1記載の文字列照合装置。
  8. 前記状態遷移表生成部は、NFAを生成する際に、[^a]による遷移を、文字aによる遷移と除外文字σotherによる遷移とに置き換えることを特徴とする請求項1記載の文字列照合装置。
  9. 前記状態遷移表生成部は、通常の文字と除外文字σotherが同一の状態に遷移するときに、通常の文字による状態遷移を削除することを特徴とする請求項1記載の文字列照合装置。
  10. 通常の文字と除外文字σotherとが同一の状態に遷移するときに、通常の文字による状態遷移を削除した後に、すべての文字に対して同一の状態に遷移する複数の状態を併合し、さらに、すべての文字に対して同一の状態に遷移する複数の状態を併合した後に、通常の文字と除外文字σotherとが同一の状態に遷移するときに、通常の文字による状態遷移を削除することを特徴とする請求項9記載の文字列照合装置。
  11. 前記状態遷移表生成部は、前記状態遷移表をハッシュ表により構成することを特徴とする請求項1記載の文字列照合装置。
  12. 前記オートマトンは、前記照合条件に基づいて生成された状態遷移表において、現状態と入力文字の組に対する次の遷移先状態が存在しない場合、入力文字を読み進めずに初期状態へ遷移することを特徴とする請求項1記載の文字列照合装置。
  13. 前記状態遷移表生成部は、複数の照合条件が入力された場合、状態の併合に基づいて出力記述の併合を行い、出力表作成し、
    前記オートマトンは、前記出力表に基づいて出力することを特徴とする請求項12記載の文字列照合装置。
  14. 前記状態遷移表生成部は、状態遷移表を生成する際、初期状態q0から所定の遷移文字σにより所定の状態q1に遷移可能であり、かつ、任意の状態qから前記所定の遷移文字σにより遷移可能であるとき、前記任意の状態qから前記所定の遷移文字σによる前記所定の状態q1への状態遷移を追加することを特徴とする請求項12に記載の文字列照合装置。
  15. 前記状態遷移表生成部は、前記状態遷移表をハッシュ表により構成することを特徴とする請求項12記載の文字列照合装置。
  16. コンピュータを制御して、文字列の照合を行うプログラムであって、
    状態遷移表生成部により、正規表現で記述された照合条件に基づいて生成された状態遷移表において、現状態と入力文字の組に対する次の遷移先状態が存在しない場合、所定の状態qへ遷移する除外文字を設定して状態遷移表を生成する処理と、
    前記状態遷移表生成部により生成された状態遷移表に基づいて、遷移中の現在の状態である現状態と、入力された文字列から文字毎に順次読み進めた入力文字との組が、前記状態遷移表に格納された前記状態遷移の状態と遷移文字との組に一致する場合に、この状態と遷移文字との組に対応付けられた前記遷移先状態へ遷移し、前記現状態と前記入力文字との組に対応付けられた前記遷移先状態が存在しない場合、前記除外文字による遷移先である前記状態qへ遷移し、前記入力文字の次の入力文字を読み進める処理とを前記コンピュータに実行させることを特徴とする文字列照合プログラム。
  17. 前記状態遷移表生成部により生成された状態遷移表に基づいて遷移するとともに、前記照合条件に基づいて生成された状態遷移表において、現状態と入力文字の組に対する次の遷移先状態が存在しない場合、入力文字を読み進めずに初期状態へ遷移する処理とを前記コンピュータに実行させることを特徴とする請求項16記載の文字列照合プログラム。
JP2010071824A 2010-03-26 2010-03-26 文字列照合装置および文字列照合プログラム Active JP5077380B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010071824A JP5077380B2 (ja) 2010-03-26 2010-03-26 文字列照合装置および文字列照合プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010071824A JP5077380B2 (ja) 2010-03-26 2010-03-26 文字列照合装置および文字列照合プログラム

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2007531511A Division JP4535130B2 (ja) 2004-12-09 2004-12-09 文字列照合装置および文字列照合プログラム

Publications (2)

Publication Number Publication Date
JP2010225156A JP2010225156A (ja) 2010-10-07
JP5077380B2 true JP5077380B2 (ja) 2012-11-21

Family

ID=43042222

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010071824A Active JP5077380B2 (ja) 2010-03-26 2010-03-26 文字列照合装置および文字列照合プログラム

Country Status (1)

Country Link
JP (1) JP5077380B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5589952B2 (ja) * 2011-05-12 2014-09-17 富士通株式会社 照合装置および照合プログラム
JP5554304B2 (ja) * 2011-09-16 2014-07-23 株式会社東芝 オートマトン決定化方法、オートマトン決定化装置およびオートマトン決定化プログラム
JP5807517B2 (ja) * 2011-11-09 2015-11-10 富士通株式会社 オートマトン処理装置、オートマトン処理方法およびオートマトン処理プログラム

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2702927B2 (ja) * 1987-06-15 1998-01-26 株式会社日立製作所 文字列検索装置
JP4118363B2 (ja) * 1996-06-27 2008-07-16 富士通株式会社 スパースな状態遷移表に基づく複数記号列の照合装置および方法
JP3231673B2 (ja) * 1996-11-21 2001-11-26 シャープ株式会社 文字,文字列検索方法及び該方法に用いる記録媒体

Also Published As

Publication number Publication date
JP2010225156A (ja) 2010-10-07

Similar Documents

Publication Publication Date Title
JP4535130B2 (ja) 文字列照合装置および文字列照合プログラム
JP6160259B2 (ja) 文字列探索方法、文字列探索装置および文字列探索プログラム
JP5381710B2 (ja) ε遷移を含まない非決定性有限オートマトン生成システムと方法およびプログラム
JP5473893B2 (ja) コード列検索装置、検索方法及びプログラム
JP2005525625A (ja) データ構造によるコンピュータ表現及びそれに関連する符号化/復号化方法
JP2008112240A (ja) ビット列検索方法及びプログラム
JP5077380B2 (ja) 文字列照合装置および文字列照合プログラム
KR100904835B1 (ko) 문자열 대조 장치 및 문자열 대조 프로그램을 기록한 컴퓨터 판독 가능한 기억 매체
JP4402169B1 (ja) コード列検索装置、検索方法及びプログラム
JP5770534B2 (ja) プロセッサ、圧縮プログラム、圧縮装置、および圧縮方法
JP2010225137A (ja) 検索プログラム及び検索方法
JP5807592B2 (ja) 符号化方法、符号化装置及びコンピュータプログラム
JP5041003B2 (ja) 検索装置および検索方法
KR102146625B1 (ko) 오토마타 기반 증분적 중위 확률 계산 장치 및 방법
JP6898818B2 (ja) グラフ生成装置、グラフ生成方法、データ構造、及びプログラム
KR101645890B1 (ko) 비결정적 유한 오토마타의 상태 축소 방법 및 장치
JP3761451B2 (ja) 記号列を格納するデータ構造、記号列検索装置、記号列検索方法、プログラム、ならびに、情報記録媒体
JP4464459B1 (ja) コード列検索装置、検索方法及びプログラム
TWI443538B (zh) Multi - hierarchical parallel multi - character string alignment device
JP4429373B1 (ja) コード列検索装置、検索方法及びプログラム
WO2010095179A1 (ja) コード列検索装置、検索方法及びプログラム
JP5441791B2 (ja) 検索機能付きファイルストレージ装置及びプログラム
Skrzypczak et al. Descriptive Complexity of mso+ u
Legrand-Duchesne et al. Parameterized complexity of untangling knots
JP5522017B2 (ja) 情報処理装置、情報処理装置の制御方法、及びコンピュータプログラム

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120228

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120427

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: 20120731

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: 20120813

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

Free format text: PAYMENT UNTIL: 20150907

Year of fee payment: 3

R151 Written notification of patent or utility model registration

Ref document number: 5077380

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

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

Free format text: PAYMENT UNTIL: 20150907

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