以下、本発明を実施するための最良の形態を図面に基づき説明する。
[第1の実施形態]
図1は、本発明の第1の実施形態に係る文字認識支援システム1を示す機能ブロック図である。図1に示すように、本実施形態の文字認識支援システム1は、認識結果修正装置として機能する知識処理装置5とデータベース合成装置3とから構成される。
ここで、本実施形態のデータベース合成装置3及び知識処理装置5は、コンピュータに本実施形態の各処理に対応するソフトウェアを組み込むことによって実現可能であるため、以下ではそのような構成を想定して説明を行う。ただし、これらデータベース合成装置3及び知識処理装置5は、電子部品を組み合わせた専用のハードウェアやその集合体、又は分散処理用のコンピュータネットワークなどを用いて構成されるものであってもよい。なお、本実施形態では、まず、知識処理装置5の構成を説明し、その後に、データベース合成装置3の構成を説明する。
本実施形態の知識処理装置5は、互いに関連付けられた、後述する住所文字列データ(連結所在文字列データ)で表される所在名としての住所名(住所文字列)と、郵便番号データ(符号文字列データ)で表される郵便番号と、にそれぞれ対応する文字イメージの対を、文字認識した文字認識結果を修正する。すなわち、この知識処理装置5は、図1に示すように、データベース合成装置3により合成された再合成データベースとしての知識データベース7と、文字認識結果入力部9と、検索部12と、選択部15と、補正部としての適用部16と、知識処理結果出力部17と、を備えて構成される。
図2は、住所名の文字認識結果28のデータ構造を示す概念図であり、図3は、郵便番号の文字認識結果29のデータ構造を示す概念図である。ここで、これら文字認識結果28、29は、例えば帳票からイメージスキャナなどで読み取られた住所名及び郵便番号の対の文字イメージを、例えば比較照合用の辞書データ(文字コードと比較照合用の文字イメージとを対応付けたテーブルデータ)により、パターンマッチングして得られた出力結果である。
上記検索部12及び選択部15は、互いに協働しつつ、文字認識結果として表される文字列の対(住所名及び郵便番号を文字認識した結果得られた後述する各候補リストが総合的に表す文字列との対)と、知識データベース7内で対応付けられた全ての住所文字列データ及び郵便番号データの対が各々表す文字列の対と、を実質的に一文字単位で照合し、一文字単位の一致/不一致の結果を含む文字列の対どうしの照合結果を得る第2の照合部として機能する。また、後述する適用部16は、文字認識結果入力部9が入力する文字認識結果28、29を、上記照合結果に基づいて補正する。
住所名の文字認識結果28は、図2に示すように、文字数及びオフセットを有するヘッダ部28tと、候補リスト28a、28b…とで構成される。また、図3に示すように、郵便番号の文字認識結果29は、同様に、文字数及びオフセットを有するヘッダ部29tと、候補リスト29a、29b…とで構成される。これら文字認識結果28、29は、図2、図3に示すように、整数データで表される文字認識された文字数と、一文字毎(文字列先頭から1、2…n文字目)の候補リスト28a、28b…(及び候補リスト29a、29b…)へのオフセットと、上記一文字毎の候補リスト28a、28b…(29a、29b…)と、の配列として実装される。
ここで、オフセットとは、あるデータの位置を、基準点からの差(距離)で表した値であり、上記候補リストのオフセットは、当該文字認識結果28、29を各々構成するデータ本体の先頭アドレス(基準のアドレス位置)から、一文字毎の候補リスト28a、28b…(及び候補リスト29a、29b…)の始まる先頭のアドレス位置まで、の差を表したデータである。各候補リスト28a、28b…、29a、29b…は、当該リストに含まれる認識候補の個数を示す認識候補数と、認識候補毎にそれぞれ対応する文字コード及びその類似度の対と、の配列で実装される。各候補リスト28a、28b…、29a、29b…は、文字認識の類似度(パターンマッチングによる文字認識の確からしさ)の高いものから順に、第1候補、第2候補…となるように配列される。
各候補リスト中の文字コードとしてはJISコードが適用されている。また、文字コードとしては、文字認識の対象となる文字列の種類やその他の実装の都合に応じて、ASCIIコードや、その他の文字コードを適用することも可能である。上述した文字認識結果入力部9は、このようなデータ構造を持つ文字認識結果28、29の入力を受け付ける。
図4は、知識データベース7に記憶された知識レコード7a,7b〜7nのデータ構造を示す図である。知識データベース7には、住所文字列(所在文字列)で構成された複数の住所名を各々表す複数の住所文字列データ(連結所在文字列データ)と、これら複数の住所文字列データに各々対応付けられた郵便番号(符号列[数字列]のみで表現される符号文字列)を表す郵便番号データ(符号文字列データ)と、が対で記憶されている。この知識データベース7は、図4に示す複数の知識レコード7a,7b〜7nを連結したかたちで実装されている。
図4に示すように、知識レコード7a,7b〜7nは、レコードヘッダ30t、住所名データ構成部30x、及び郵便番号データ構成部30yから構成される。住所名データ構成部30xは、住所名の文字の個数を整数データで表す文字数と、住所名を構成する各文字に各々対応する複数の文字コードとの配列として実装されている。郵便番号データ構成部30yは、郵便番号を構成している文字数と、郵便番号を構成する文字毎に各々対応する複数の文字コードとの配列として実装されている。
レコードヘッダ30tは、レコード長と、住所名のオフセットと、郵便番号のオフセットと、から構成される。レコード長は、知識レコードの長さ(レコード本体の長さ)を整数で表している。住所名のオフセットは、知識レコードの先頭から住所名データ構成部30xの先頭へのオフセットを整数で表している。郵便番号のオフセットは、知識レコードの先頭から住所名データ構成部30xの先頭へのオフセットを整数で表している。ここで、上記文字コードには、後述するデータベース合成装置3による処理により、ワイルドカードとしての代替文字が含まれている場合がある。このワイルドカードとしては、JISコードの例えば「?」に対応する文字コード「0x2129」が適用されている。
図5は、検索部12により行われた検索結果31のデータ構造を示す図である。検索部12は、知識データベース7内から、後述する検索結果第1(又は第2)列挙条件を満たす、知識レコード(住所名と郵便番号との対)を検索し、検索結果として、該当する知識レコードの検出数を示す検索結果数31tに加え、知識レコードを特定する識別子と、住所名の不適合文字数と、郵便番号の不適合文字数と、からなる検索データ本体31a、31b…を列挙する。検索部12は、検索された知識レコードの識別子の配列r、及び列挙された検索結果数31tを表す変数nrを記憶する。検索された知識レコードの識別子の配列rを記憶するための記憶領域としては、知識データベース7中の知識レコード数分の領域を確保する。
図6は、検索部12が行う検索処理を示すフローチャートである。検索部12は、図6に示すように、まず、知識データベース7で現在参照している知識レコードの位置を示す変数oを、最初の知識レコードのオフセットで初期化する(S[ステップ]1)。次に、検索部12は、列挙された検索結果数31t(検索された個数)を示す変数nrを、0で初期化する(S2)。
さらに、検索部12は、知識データベース7の末端に達しているか否かを確認する(S3)。ここで、検索部12は、知識データベース7の末端に達していると判定するまで(S4の真[YES])、以下の知識レコード確認処理(S3〜S8の一連の処理)を繰り返す。
すなわち、知識レコード確認処理では、まず、現在参照している知識レコードの位置を示す変数oが知識データベース7の末端に達しているか否かを確認する(S3)。末端に達しているか否かは、変数oが知識データベース7のサイズ(データサイズ)以上になっているか否かで判定する。検索部12は、末端に達していると判定した場合(S4の真)、知識レコード確認処理を打ち切り、検索処理自体を終了させる。
知識レコード確認処理において、検索部12は、知識データベース7の末端に達していないと判定した場合(S4の偽)、まず、現在参照中の知識レコードが検索結果第1(又は第2)列挙条件を満たしているか否かを検索用第1(又は第2)比較処理により判定する(S5)。
検索部12は、現在参照中の知識レコードが検索結果第1(又は第2)列挙条件を満たしていると判定した場合(S6の真)、現在参照中の知識レコードの位置を示す変数oの現在の値を、検索の結果得られた知識レコードの識別子として列挙(出力)する。また、新しい検索結果が得られた際には、知識レコードの識別子の配列rのnr番目のエントリに、図5に示すように、検索の結果得られた知識レコードの識別子を記憶し、上記nrを1増加させる。
さらに、知識レコード確認処理において、検索部12は、上記配列rのnr番目のエントリに、検索用第1(又は第2)比較処理により求めた住所名不適合文字数E1及び郵便番号適合文字数E2を記憶する(S7)。最後に、検索部12は、次の知識レコードのオフセットを算出し、現在参照中の知識レコードの位置を示す変数oを更新(代入)する(S8)。
図7は、検索部12が行う検索用第1比較処理を示すフローチャートである。すなわち、図7に示すように、検索部12は、まず、図2及び図3に示す住所名及び郵便番号における文字認識結果28、29の文字数(例えば住所名及び郵便番号の総文字数)が、図4に示す知識レコード中の住所名及び郵便番号の文字数(例えば住所名及び郵便番号の総文字数)以上であることを検出した場合(S11の真)、検索結果第1列挙条件が満たされていないと判定する。
また、検索部12は、図2及び図3に示す住所名及び郵便番号における文字認識結果28、29の文字数が、知識レコード中の住所名及び郵便番号の文字数以上でない場合(S11の偽)、後述する図8の不適合文字数算出処理によって、住所名の不適合文字数E1を計数する(S12)。次に、検索部12は、上記不適合文字数算出処理によって、郵便番号における不適合文字数E2を計数する(S13)。さらに、検索部12は、不適合文字数E1、E2の各々が、それぞれについて予め定めた閾値ε1、閾値ε2以下である場合(S14の真)、検索結果第1列挙条件が満たされていると判定し、それ以外の場合(S14の偽)、検索結果第1列挙条件が満たされていないと判定する。
図8は、検索部12が行う不適合文字数算出処理を示すフローチャートである。検索部12は、この不適合文字数算出処理において、前述した図10、図11の候補リスト第1(又は第2)適合条件を満たさない文字の個数(不適合文字数E)を計数する。すなわち、図8に示すように、検索部12は、図2、図3に示す文字認識結果28、29の先頭アドレスRを取得した後(S21)、この先頭アドレスRから文字認識結果の文字数mを取得する(S22)。さらに、検索部12は、文字認識結果28、29における現在参照中の文字の番号iを0に初期化し(S23)、また不適合文字数Eを0に初期化する(S24)。
次に、検索部12は、文字認識結果28、29における現在参照中の文字の番号iが、上記先頭アドレスRから取得した文字数m以上になった場合に(S25の真)、不適合文字数Eを出力する(S30)。一方、検索部12は、参照中の文字の番号iが、文字数m未満である場合(S25の偽)、候補リスト第1(又は第2)適合条件を満足するか否かを判定する(S26)。候補リスト第1(又は第2)適合条件を満たしていない場合(S27の偽)、検索部12は、不適合文字数Eに1を加算し(S28)、さらに、参照中の文字の番号iに1を加算して上記S(ステップ)25の処理に戻る(S29)。また、候補リスト第1(又は第2)適合条件を満たしている場合(S27の真)、検索部12は、不適合文字数Eに1を加算せずに、参照中の文字の番号iに1を加算してS25の処理に戻る。
続いて、検索結果第2列挙条件を適用する検索用第2比較処理について説明する。ここで、検索部12は、検索用第1比較処理と検索用第2比較処理とを選択的に切り替えて実行することが可能である。検索用第1比較処理と検索用第2比較処理との切り替えは、オペレータによる外部から切替情報の入力により人為的に行われるものであってもよいし、文字認識結果入力部9に入力される文字認識結果28、29の種別(例えば文字列の種別)などを検索部12が検出し、この検出結果に基づいて検索部12が自動で切り替えるものであってもよい。
図9は、検索部12が行う検索用第2比較処理を示すフローチャートである。図9に示すように、検索部12は、まず、検索用第1比較処理と同様に、図2、図3に示す住所名及び郵便番号における文字認識結果28、29の文字数が、図4に示す知識レコード中の住所名及び郵便番号の文字数以上であることを検出した場合(S31の真)、検索結果第2列挙条件が満たされていないと判定する。
また、検索部12は、文字認識結果28、29の文字数が、知識レコード中の住所名及び郵便番号の文字数以上でない場合(S31の偽)、図8の不適合文字数算出処理によって、郵便番号における不適合文字数E2を計数する(S32)。この際、検索部12は、郵便番号における不適合文字数E2が、閾値ε2以下の場合(S33の真)、検索結果第2列挙条件が満たされていると判定する。
これに対して、郵便番号における不適合文字数E2が、閾値ε2以下でない場合(S33の偽)、検索部12は、図8の不適合文字数算出処理によって、住所名における不適合文字数E1を計数する(S34)。住所名における不適合文字数E1が、閾値ε1以下の場合(S35の真)、検索結果第2列挙条件が満たされていると判定する(S36)。それ以外の場合(S35の偽)、検索部12は、検索結果第2列挙条件が満たされていないと判定する。
すなわち、検索結果第2列挙条件を基に検索結果を列挙するか否かを決める上記の検索用第2比較処理では、文字認識結果28、29が示す文字列と参照中の知識レコード中の文字列との照合において、住所名における一文字単位の一致/不一致の結果よりも、郵便番号における一文字単位の一致/不一致の結果が、優先的に判断される。したがって、郵便番号の文字認識結果29の信頼性(文字認識の確からしさ)が高い場合、検索結果第2列挙条件を適用することで、当該文字認識結果の修正(補正)の精度を向上させることが可能である。
また、検索部12は、上述した不適合文字数E(不適合文字数E1、E2)を計数するために次のような判断を行う。すなわち、検索部12は、文字認識結果28、29の住所名及び郵便番号を示す文字列中の一文字毎の各認識候補(第1候補、第2候補…)と、各知識レコード内で互いに対の住所名及び郵便番号を示す文字列中の文字(文字認識結果に対応する並び順の文字)と、を実質的に比較し、候補リスト第1(又は第2)適合条件を満たしていない文字(文字認識結果28、29中の候補リスト28a、28b…、29a、29b…)を、不適合文字(不適合文字数Eとして計数される文字)として判別する。
図10は、検索部12が行う候補リスト第1適合条件の適否の判定処理を示すフローチャートである。検索部12が候補リスト第1適合条件に適合すると判定するのは、知識レコードの文字列中の対応する文字がワイルドカード(代替文字)である場合である。これに加えて、検索部12が候補リスト第1適合条件に適合すると判定するのは、図2、図3に示す文字認識結果28、29内の候補リスト28a、28b…、29a、29b中の認識候補(第1候補、第2候補…)と図4に示す知識レコード7a、7b…7n中の文字列を構成する文字とが一致し、且つ一致した認識候補(文字)の類似度が予め定めた閾値θ以上の場合である。
すなわち、図10に示すように、検索部12は、まず、知識レコード中の住所名及び郵便番号を表す全文字列中のi番目の文字の文字コードC1を取得する(S41)。次に、検索部12は、文字コードC1が、ワイルドカードを示す文字コードであるか否かを判定する(S42)。文字コードC1が、ワイルドカードを示す文字コードである場合(S42の真)、検索部12は、候補リスト第1適合条件を満たしていると判定する。つまり、照合部としての機能を一部有する検索部12は、知識データベース7(再合成データベース)内の郵便番号データ(符号文字列データ)中に、ワイルドカード(代替文字)が含まれていた場合、当該ワイルドカードとの照合による文字単位の一致/不一致の結果を強制的に一致とする。
また、検索部12は、文字コードC1が、ワイルドカードを示す文字コードではないと判定した場合(S42の偽)、文字認識結果28、29内の参照中の候補リストの先頭アドレスLを(図2、図3に示すオフセットR+[文字認識結果の文字数を示す記憶領域1+文字の順番i]で表現できる演算式により)算出して(S43)、先頭アドレスLから候補リスト中の認識候補数nを取得する(S44)。さらに、検索部12は、参照中の候補(認識候補の文字)の番号jを0に初期化する(S45)。参照中の候補の番号jが認識候補数n以上である場合(S46の真)、検索部15は、候補リスト第1適合条件に不適合であると判定する。
また、参照中の候補の番号jが認識候補数n以上でない場合(S46の偽)、検索部12は、番号j(j番目)の候補の文字コードC2を取得する(S47)。さらに、検索部12は、文字コードC2が文字コードC1と一致した場合(S48の真)、番号j(j番目)の候補の類似度Sを取得する(S49)。取得した類似度Sが閾値θ以上の場合(S50の真)、検索部12は、候補リスト第1適合条件に適合すると判定する。また、検索部12は、取得した類似度Sが閾値θ以上でなかった場合(S50の偽)、及び上記の文字コードC2が文字コードC1と一致しない場合(S48の偽)、番号jに1を加算してS46の処理に戻る(S51)。
続いて、検索部12が行う候補リスト第2適合条件の適否の判定処理について説明する。ここで、検索部12は、候補リスト第1適合条件の適否の判定処理と候補リスト第2適合条件の適否の判定処理とを選択的に切り替えて実行することが可能である。これらの判定処理の切り替えは、例えばオペレータによる外部から切替情報の入力により人為的に行われるものであってもよいし、文字認識結果入力部9に入力される文字認識結果28、29の種別(例えば文字列の種別)などを検索部12が検出し、この検出結果に基づいて検索部12が自動で切り替えを行うものであってもよい。
図11は、検索部12が行う候補リスト第2適合条件の適否の判定処理を示すフローチャートである。ここで、検索部12が候補リスト第2適合条件に適合すると判定するのは、知識レコードの文字列中の対応する文字がワイルドカードである場合である。これに加えて、検索部12が候補リスト第2適合条件に適合すると判定するのは、図2、図3に示す文字認識結果28、29内の候補リスト28a、28b…、29a、29b中の認識候補(第1候補、第2候補…)を対象とし、当該候補リストにおけるm番目までの候補の中に、図4に示す知識レコード7a、7b…7nが記憶する文字列中の文字と、一致する文字が存在する場合である。
すなわち、図11に示すように、まず、検索部12は、上述した候補リスト第1適合条件の適否の判定処理におけるS41〜S45と同様に、S61〜S65までの一連の処理を行う。次に、検索部12は、参照中の候補の番号jが認識候補数n以上であるか、若しくは当該参照中の番号j(j番目)の候補が、予め定めたm番目までの候補に入っていない場合(S66の真)、検索部15は、候補リスト第2適合条件に不適合であると判定する。
また、参照中の候補の番号jが認識候補数n以上でなく、しかも番号jの候補が、m番目までの候補に入っている場合(S66の偽)、検索部12は、番号j(j番目)の候補の文字コードC2を取得する(S67)。文字コードC2が文字コードC1と一致した場合(S68の真)、検索部12は、候補リスト第2適合条件に適合すると判定する。また、検索部12は、文字コードC2が文字コードC1と一致しなかった場合(S68の偽)、番号jに1を加算して、S66の処理に戻る(S69)。
次に、選択部15について説明する。図12は、選択部15により図5に示す検索結果31中から選択された選択結果32のデータ構造を示す図である。図12に示すように、選択結果32は、選択された知識レコードの数を示す選択結果数32tと、選択された全ての知識レコードの識別子を示すデータ本体部32aと、から構成される。選択部15は、データ本体部32aを構成する各知識レコード(の識別子)を、図5に示す検索結果31中の検索データ本体部31a、31b…の中から選択し、この選択した全ての知識レコード(の識別子)を所定の順序で並べ替える。具体的には、選択部15は、図12に示すように、データ本体部32aを構成する全ての知識レコードの識別子の配列s、及び選択結果数32tを表す変数nsとして、当該選択結果32を記憶する。
図13は、選択部15が行う検索結果選択処理を示すフローチャートである。図13に示すように、選択部15は、まず、図5に示す検索結果31中の(検索データ本体部31a、31b…が含む)知識レコードの識別子の配列rを同サイズの配列r1として複写し(S81)、複写したこの識別子の配列r1を、後述する知識レコード(第1/第2)比較処理に基づき降順に整列させる(S82)。次に、予め閾値で取り決めた個数分の知識レコード(の識別子)を先頭から抽出し、これを図12に示す選択結果32として列挙する(S83)。ここで、上記S82で用いる整列のアルゴリズムとしては、例えばマージソート法や、ヒープソート法などのアルゴリズムを適用することができる。
図14は、選択部15が行う知識レコード第1比較処理を示すフローチャートである。選択部15は、図14に示すように、知識レコードの識別子aと識別子bとについて、識別子aが示す知識レコードAと識別子bが示す知識レコードBとを以下の1〜3のように判定する。
1.知識レコードAが知識レコードBより妥当であると評価した場合、「a>b」
2.知識レコードBが知識レコードAより妥当であると評価した場合、「b>a」
3.知識レコードA、Bが同程度に妥当であると評価した場合、「a=b」
ここで、このような妥当性の評価は、知識レコードA、Bのうちで、実質的に、どちらの知識レコードの内容が、図2、図3に示す文字認識結果28、29の内容に対して、類似性が高いかを評価するものである。
選択部15は、上記知識レコードA(a)、B(b)の妥当性の評価を次の二つの比較結果から判定する。すなわち、知識レコード第1比較処理を行う選択部15は、図5に示すように、知識レコードA中の住所名を対象とした不適合文字数を表す住所名不適合文字数E1aと、知識レコードB中の住所名を対象とした不適合文字数を表す住所名不適合文字数E1bと、を比較する。次に、選択部15は、知識レコードA中の郵便番号を対象とした不適合文字数を表す郵便番号不適合文字数E2aと、知識レコードB中の郵便番号を対象とした不適合文字数を表す郵便番号不適合文字数E2bと、を比較する。
より具体的には、図14に示すように、選択部15は、まず、知識レコードAの住所名不適合文字数E1aと知識レコードBの住所名不適合文字数E1bとを比較する。この際、E1a>E1bならば(S91の真)、a>bと判定し、E1a<E1bならば(S92の真)、a<bと判定する。
次に、選択部15は、知識レコードAの郵便番号不適合文字数E2aと知識レコードBの郵便番号不適合文字数E2bとを比較する。この際、選択部15は、E2a>E2bならば(S93の真)、a>bと判定し、E2a<E2bならば(S94の真)、a<bと判定する。さらに、選択部15は、住所名不適合文字数E1aと知識レコードBの住所名不適合文字数E1bとの比較においても、知識レコードAの郵便番号不適合文字数E2aと知識レコードBの郵便番号不適合文字数E2bとの比較においても判定がつかない場合(S94の偽)、a=bと判定する。
次に、選択部15が行う知識レコード第2比較処理について説明する。ここで、選択部15は、上述した知識レコード第1比較処理と知識レコード第2比較処理とを選択的に切り替えて実行することが可能である。これらの比較処理の切り替えは、例えばオペレータによる外部から切替情報の入力により人為的に行われるものであってもよいし、文字認識結果入力部9に入力される文字認識結果28、29の種別(例えば文字列の種別)などを選択部15が検出し、この検出結果に基づいて選択部15が自動で切り替えを行うものであってもよい。
図15は、選択部15が行う知識レコード第2比較処理を示すフローチャートである。図15に示すように、選択部15は、まず、知識レコードAの郵便番号不適合文字数E2aと知識レコードBの郵便番号不適合文字数E2bとを比較する。選択部15は、E2a>E2bならば(S101の真)、a>bと判定し、E2a<E2bならば(S102の真)、a<bと判定する。
次に、選択部15は、知識レコードAの住所名不適合文字数E1aと知識レコードBの住所名不適合文字数E1bとを比較する。この際、選択部15は、E1a>E1bならば(S103の真)、a>bと判定し、E1a<E1bならば(S104の真)、a<bと判定する。さらに、選択部15は、知識レコードAの郵便番号不適合文字数E2aと知識レコードBの郵便番号不適合文字数E2bとの比較、及び、知識レコードAの住所名不適合文字数E1aと知識レコードBの住所名不適合文字数E1bとの比較においても、判定がつかない場合(S104の偽)、a=bと判定する。
ここで、知識レコード第2比較処理における知識レコード第1比較処理との相違点は、郵便番号不適合文字数の比較を先に行っている点である。したがって、郵便番号の文字認識結果の信頼性が高い場合、知識レコード第2比較処理を選択部15に行わせることで、文字認識結果の修正(補正)の精度を向上させることが可能である。
さらに、図13に示したように、選択部15は、このような知識レコード第1(又は第2)比較処理に基づいて、知識レコードの識別子の(複写した)配列r1を、妥当性の高い知識レコードを表す識別子(文字認識結果の内容に対して類似性が高い内容を持つ知識レコード)から順に、降順に整列させる。さらに、選択部15は、上記整列させた知識レコードの識別子の配列r1の先頭から、予め閾値で決められた個数の識別子を順に抽出し、抽出した(知識レコードの)識別子を図12に示す選択結果32として列挙する。
ここで、図12に示すように、選択結果32の選択データ本体部32aに所定個数列挙された識別子が表す知識レコードのうちで、その最上段に位置する(最上段の識別子が表す)知識レコード中の住所名及び郵便番号の対は、図2、図3に示す文字認識結果28、29中の住所名及び郵便番号の対に対し、最も類似性の高いものとして選択部15に認識される。
次に、適用部16について説明する。適用部16は、選択結果個別適用処理を行うことによって、図2、図3に示す文字認識結果28、29を、選択部15が選択した図12に示す選択結果32に基づき補正する。図16は、適用部16が行う選択結果個別適用処理を示すフローチャートである。図16に示すように、適用部16は、選択結果32の選択データ本体部32aに列挙された(識別子で表される)各知識レコードについて、選択結果個別適用処理を行う。
より具体的には、図16に示すように、適用部16は、図12に示す選択結果32中の知識レコードの個数(選択結果数)Uを取得する(S111)。選択結果32において現在参照中の知識レコード(の識別子)の番号uを0に初期化する(S112)。知識レコードの番号uが個数U以上になるまで(S113の真)、次のS114〜117の処理を繰り返す。つまり、適用部16は、後述する知識未適用処理(S114)、住所名知識適用処理(S115)、郵便番号知識適用処理(S116)、を順に行った後、番号uに1を加算してS113に戻る(S117)
このような適用部16は、知識未適用処理を行うことで、図2、図3に示す文字認識結果28、29を基に知識未適用住所名及び知識未適用郵便番号を生成する。また、適用部16は、住所名知識適用処理を行うことで、知識未適用住所名を補正した住所名知識適用処理結果(住所名補正結果)を生成する。さらに、適用部16は、郵便番号知識適用処理を行うことで、知識未適用郵便番号を補正した郵便番号知識適用処理結果(郵便番号補正結果)を生成する。
図17は、適用部16が図16のS114で行う知識未適用処理を示すフローチャートである。図17に示すように、適用部16は、まず、図2、図3に示す文字認識結果28、29中の文字数(住所名及び郵便番号の総文字数)Lを取得し(S121)、さらに処理中の文字の番号iを0に初期化する(S122)。次に、適用部16は、処理中の文字の番号iが、取得した文字数L以上になるまで(S123)、以下のS124〜126の処理を繰り返す。
つまり、適用部16は、まず、図2、図3に示す文字認識結果28、29における候補リスト28a、28b…(29a、29b…)中のi番目の文字の第1候補の文字コードを取得する(S124)。次に、適用部16は、取得した文字コードcを出力文字列(出力対象の住所名、郵便番号を表す文字列の対)のi番目の文字コードに設定し(S125)、この後、番号iに1を加算にしてS123に戻る(S126)。
図18は、適用部16が図16のS115で行う住所名知識適用処理を示すフローチャートである。図17に示すように、適用部16は、図12に示す選択結果32の選択データ本体部32aに列挙された例えば最上段に位置する(最上段の識別子が表す)知識レコード中の住所名の文字数Lsを取得し(S131)、処理中の文字の番号iを0に初期化する(S132)。次に、適用部16は、処理中の文字の番号iが、取得した文字数Ls以上になるまで(S133の真)、以下のS134〜136の処理を繰り返す。
すなわち、適用部16は、選択結果32として列挙された例えば最上段に位置した(識別子が示す)知識レコード中の住所名を表すi番目の文字の文字コードcを取得する(S134)。次に、適用部16は、取得した文字コードcを知識未適用文字列(知識未適用文字列における住所名に対応する文字列)のi番目の文字と置き換えることにより、当該文字コードcを住所名知識処理結果のi番目の文字コードとして設定する(S135)。この設定後、番号iに1を加算にしてS133に戻る(S136)。
図19は、適用部16が図16のS116で行う郵便番号知識適用処理を示すフローチャートである。図19に示すように、適用部16は、図12に示す選択結果32の選択データ本体部32aに列挙された例えば最上段に位置する(最上段の識別子が表す)知識レコード中の郵便番号の文字数Lcを取得し(S141)、処理中の文字の番号iを0に初期化する(S142)。次に、適用部16は、処理中の文字の番号iが、取得した文字数Ls以上になるまで(S133の真)、以下のS144〜147の処理を繰り返す。
つまり、適用部16は、選択結果32として列挙された例えば最上段に位置した(識別子が示す)知識レコード中の郵便番号を表すi番目の文字の文字コードcを取得する(S144)。ここで、取得した文字コードcがワイルドカードを示す文字コードであるか否かを判定する(S145)。取得した文字コードcがワイルドカードを示す文字コードでない場合(S145の偽)、適用部16は、取得した文字コードcを知識未適用文字列(知識未適用文字列における郵便番号に対応した文字列)のi番目の文字と置き換えることにより、当該文字コードcを郵便番号知識処理結果のi番目の文字コードとして設定する(S146)。
ただし、上記取得した文字コードcがワイルドカードを示す文字コードである場合(S145の真)、当該取得した文字コードcを知識未適用文字列(の郵便番号に対応した文字列)のi番目の文字と置き換えないようにする。この後、適用部16は、番号iに1を加算にしてS143の処理に戻る(S147)。このような住所名知識適用処理や郵便番号知識適用処理などを行うことにより、文字認識結果28、29中の候補リストとして1文字毎に複数あった認識候補が一つに絞り込まれ、これにより、文字認識結果28、29を補正した補正結果として、一組の住所名(住所文字列)及び郵便番号が得られる。修正結果出力部17は、文字認識結果28、29を補正したこのような補正結果(文字認識の修正結果)を例えば表示装置などに対して出力する。
なお、上記S134及びS144に関する処理に代えて、適用部16は、図12に示す選択結果32として列挙された最上段、2段目、3段目…に位置した(識別子がそれぞれ示す)知識レコード中の住所名及び郵便番号の各文字コードを順に取得し、この取得した各文字コードで表される(最上段、2段目、3段目…に対応した)複数組の住所名及び郵便番号を、住所名知識処理結果及び郵便番号知識処理結果として得るようにしてもよい。
この場合、適用部16により、文字認識結果28、29を補正した補正結果(住所名及び郵便番号に対応した文字認識の修正結果)が、複数組得られることになるが、この複数組の補正結果を、妥当性の高い順(文字認識の確からしい上記の最上段、2段目、3段目…の順)に並べたかたちで、修正結果出力部17が例えば表示出力するようにし、これをユーザ側に選択させるようにしてもよい。また、これに代えて、適用部16が、上記のように複数組の補正結果を生成した場合、修正結果出力部17が、妥当性の最も高い(文字認識の最も確からしい)選択結果32の最上段の知識レコードに対応した補正結果(一組の住所名及び郵便番号)のみを例えば表示装置などに対して出力させるようにしてもよい。
次に、本実施形態の文字認識支援システム1が備えるデータベース合成装置3の構成を詳細に説明する。ここで、図20は、データベース合成装置3の構成を示す機能ブロック図である。図20に示すように、データベース合成装置3は、データベース取得部2と、記憶部3aと、抽出部6と、互いに協働してデータベース生成部として機能する合成部8及び補完部10と、データベース再合成部として機能する出力部14と、から構成される。本実施形態のデータベース合成装置3は、図1及び図20に示すように、上述した知識処理装置5が、図2、図3に示した文字認識結果28、29の補正に用いる知識データベース(再合成データベース)7を生成(合成)し、この知識データベース7を上記出力部14を通じて出力する。
データベース取得部2は、複数の合成元のデータベース(合成元データベース22、23、24…)を取得する(データベースの内容をそのデータ構造ごと入力する)。データベース取得部2により取得される合成元データベース22、23、24、25…は、所在名としての住所名を階層的に表わす(表現する)複数の住所文字列階層データ(所在文字列階層データ)と、これら複数の住所文字列データに各々対応付けられた符号列を含む(数字列を記憶した)複数の郵便番号データ(符号文字列データ)と、のうちの少なくとも一方(上記複数の住所文字列階層データ)を記憶する。郵便番号データは、7桁の整数値の数字列(符号列)で構成される。
抽出部6は、データベース取得部2により取得された複数の合成元データベース22、23、24、25…から、各住所文字列階層データ中の階層毎の要素をそれぞれ表す複数の部分文字列データと、郵便番号データと、を互いの対応関係と共に抽出結果レコード21a、21b…21nとして抽出する。抽出部6は、抽出した抽出結果レコード21a、21b…21nを一時的に記憶部3aに記憶させる。
ここで、階層とは、概念の大小関係で住所名(所在名)を区分したものであって、住所文字列階層データで表現される住所名(所在名)が、東京都府中市武蔵台である場合、「東京都」、「府中市」、「武蔵台」が階層毎の要素となる。また、データベース合成装置3では、「東京都」を第1階層の要素、「府中市」を第2階層の要素、「武蔵台」を第3階層の要素として取り扱う。したがって、部分文字列データで表わされる部分住所名(部分文字列)は、上記「東京都」、「府中市」、「武蔵台」などを示すことになる。なお、後述するルートノードに対応する「日本国」は、第0階層の要素として位置付けられる。また、上記のルートノードに対応する「日本国」は、住所名(住所文字列)の構成要素からは、実質的には除外される。
図21は、抽出部6が行うデータベースの抽出処理を示すフローチャートである。すなわち、抽出部6は、図21に示すように、まず、Nd個の合成元データベースのうち、抽出中の合成元データベースの番号iを0に初期化する(S161)。さらに、抽出部6は、番号iが、Nd個以上になるまで(S162の真)、i番目の合成元データベースについてデータベース個別抽出処理を実行する(S163)。データベース個別抽出処理の実行後、抽出部6は、合成元データベースの番号に1を加算しS162に戻る(S164)。
図22は、抽出部6により抽出された抽出結果レコード21a、21b…21nのデータ構造を示す図である。抽出部6は、合成元データベース22、23、24、25…から抽出した複数の抽出結果レコード21a、21b…21nを記憶部3aに記憶する。個々の抽出結果レコード21a、21b…21nは、図22に示すように、ヘッダ部21tと文字データ本体部21xとを有する。
文字データ本体部21xは、各階層の部分住所名を一文字毎に表す文字コードの配列(部分住所名を示す文字列順に配列された複数の文字コード)と、郵便番号を一文字毎に表す文字コードの配列(郵便番号を示す文字列順に配列された複数の文字コード)とから構成されている。
ヘッダ部21tは、郵便番号(郵便番号文字列)の文字数と、郵便番号のオフセットと、部分住所名(部分文字列)の個数と、階層毎(第1階層、第2階層…)の部分住所名の文字数と、階層毎の部分住所名のオフセットと、から構成される。郵便番号(又は部分住所名)のオフセットは、抽出結果レコード自体の先頭アドレスと、郵便番号(又は階層毎の部分住所名)を表す文字コードの配列と、の相対位置の差を示すデータ値である。
また、抽出部6は、合成元データベースが郵便番号データを持たず、住所文字列階層データのみで構成されていた場合、郵便番号に関するデータを未指定に設定する。未指定に設定する場合、上記ヘッダ部21t中の郵便番号の文字数を「−1」に設定する。また、抽出部6は、抽出処理を行う際に、郵便番号を表す文字コードの配列として、後に、郵便番号の指定の有無や(文字コードの配列の)長さなどを適宜変更できるように一定の要素数の配列を確保する。
また、抽出部6は、このようなデータ構造を持つ抽出結果レコード21a、21b…21nを、後述するデータベース個別抽出処理によって、合成元データベース22、23、24、25…から抽出する。ここで、抽出部6が行うデータベース個別抽出処理の方法は、合成元データベース22、23、24、25…のデータ形式によって互いに異なるので、各データベースのデータ形式と共に順次説明を行う。なお、合成元のデータベースの形式は、後述する第1データ形式〜第4データ形式の他、前述した図22に示す抽出結果レコード21a、21b…21nが持つデータ構造にて抽出可能であれば、いかなるデータ形式のものを適用してもよい。また、第1データ形式〜第4データ形式の合成元データベース22、23、24、25には、互いのデータ形式の違いを識別するための例えば識別情報などが付与されており、抽出部6は、例えばこの識別情報を検出することにより、第1データ形式〜第4データ形式にそれぞれ対応するデータベース個別抽出処理を切り換えて実行する。
図23は、第1データ形式(ノードデータ形式)で構築された合成元データベース22の構成を表す模式図である。第1データ形式の合成元データベース22は、住所文字列階層データ(所在文字列階層データ)中に階層毎に埋め込まれたかたちの部分文字列データと郵便番号文字列(符号文字列データ)とを互いに関連付けたデータ単位を、それぞれノードとして表し、このノードどうしを辺で結んだツリー構造(木構造)で表現されている。合成元データベース22の先頭のノードは、ツリーのルートノード(根ノード)である。
図24は、第1データ形式の合成元データベース22のデータ構造を示す概念図である。図24に示すように、ツリー構造内の各ノード22a、22b、22c…は、ヘッダ部22tと文字データ本体部22xとを有する。文字データ本体部22xは、各階層の部分住所名(部分文字列)を一文字毎に表す文字コードの配列(部分住所名を示す文字列順に配列された複数の文字コード)と、郵便番号を一文字毎に表す文字コードの配列(郵便番号を示す文字列順に配列された複数の文字コード)とから構成されている。
ヘッダ部22tは、整数値で表される住所名(住所文字列)の有無と、次ノードの識別子と、最初の子ノードの識別子と、郵便番号(郵便番号文字列)の文字数と、郵便番号のオフセットと、部分住所名の文字数と、部分住所名のオフセットと、から構成される。郵便番号(又は部分住所名)のオフセットは、ノード自体の先頭アドレスと、郵便番号(又は階層毎の部分住所名)を表す文字コードの配列と、の相対位置の差を示すデータ値である。
図23(及び図24)に示すように、各ノードの最初の子ノードの識別子を記憶する記憶エリアには、自身のノードからみて直接の子供のノードに該当するノードの識別子が記憶されている。つまり、図23に示すように、ノード22aの最初の子ノードの識別子の記憶エリアには、ノード22bの識別子が記憶され、また同様に、ノード22bの最初の子ノードの識別子には、ノード22cの識別子が記憶される。
図23(及び図24)に示すように、各ノードの最初の次(兄弟)ノードの識別子を記憶する記憶エリアには、自身のノードからみて直接の兄弟のノードに該当するノードの識別子が記憶されている。つまり、図23に示すように、ノード22bの最初の子ノードの識別子の記憶エリアには、ノード22fの識別子が記憶され、また同様に、ノード22dの最初の子ノードの識別子の記憶エリアには、ノード22eの識別子が記憶される。
ここで、各ノード21a、21b、22c…の識別子には、合成元データベース22本体の先頭アドレスからのオフセットが適用されている。また、自身のノードからみて最初の子ノードや最初の次ノードに該当するノードが存在しない場合、値「−1」を、自身のノード中の識別子の記憶エリアに記憶させる。また、自身のノードが、ある住所名(住所文字列)を構成する最下位の階層の部分住所名(部分文字列)を表す場合には、自身のノードの住所名の有無を示す記憶エリアに整数値「1」が記憶されている。一方、自身のノードが、ある住所名を構成する最下位の階層の部分住所名を表わさない場合には、自身のノードの住所名の有無を示す記憶エリアに整数値「0」が記憶されている。
より具体的には、図23に例示される第1段目(第0階層)のノード22aは、ルートノードであり、例えば「日本国」に該当するノードである。また、図23中の第2段目(第1階層)のノードは、都道府県名に対応するノードであって、ノード(ルートノード)22aの最初の子ノードとなるノード22bは、例えば「東京都」に該当するノードである。また、さらに、図23中の第3段目(第2階層)のノードは、「区」や「市」などに対応するノードであり、ノード22bの最初の子ノードとなるノード22cは、例えば「府中市」などに該当するノードである。
図23中の第4段目(第3階層)のノードは、「町名」などに対応するノードであって、ノード22cの最初の子ノードとなるノード22dは、例えば「武蔵台」に該当するノードである。また、このノード22dの最初の次ノード(兄弟ノード)となるノード22eは、例えば「東芝町」などに該当するノードである。
つまり例えば、前述した図23中の第3段目のノード22cには、住所名(住所文字列)の有無として「有」、郵便番号として「1830000」、部分住所名として「府中市」、最初の子ノードを示す識別子の記憶エリアには「ノード22dの識別子」が記憶されている。また例えば、ノード22dには、住所名(住所文字列)の有無として「有」、郵便番号として「1830042」、部分住所名として「武蔵台」、最初の次ノード(兄弟ノード)を示す識別子の記憶エリアには「ノード22eの識別子」が記憶されている。
図25は、抽出部6が行う第1データ形式階層読込処理(第1データ形式の合成元データベース22に対応したデータベース個別抽出処理)を示すフローチャートである。図25(及び図23)に示すように、抽出部6は、住所文字列(住所名全体)を構成するための部分文字列(部分住所名)の配列Sxを、当該第1データ形式階層読込処理の再帰的呼び出しで更新しながら処理を行う。つまり、抽出部6による第1データ形式階層読込処理は、ツリー構造の合成元データベース22における階層の番号vとして0を指定しかつ親ノードの識別子pとしてルートノード(先頭ノード)の識別子を指定することで開始され、さらに以下のS151〜S157の処理を繰り返すことによって実現される。
1.抽出部6は、識別子pで示される親ノードから最初の子ノードの識別子c0を取得する(S151)。
2.次に、抽出部6は、取得したこの識別子c0で子ノードの識別子cを初期化する(S152)。
3.さらに、抽出部6は、識別子cが−1になる(最初の子ノード、次ノードに該当するノードが存在しなくなる)まで(S153の真)、以下のS154〜S157の処理を繰り返す。
[1]すなわち、抽出部6は、現在の子ノードに記憶されている郵便番号と、第0番目〜第v番目までのいずれかの要素として、現在の子ノード中の部分文字列(部分住所名)を登録可能な部分文字列の配列Sxと、を格納した抽出結果レコードを生成する(S154)。
[2]次に、抽出部6は、現在の子ノードに記憶されている部分住所名を、部分住所名(部分文字列)の配列Sxの第v番目の要素としてコピーする(S155)。
[3]続いて、抽出部6は、第1データ形式階層読込処理を再帰的に呼び出す。つまり、再帰呼び出しの階層の番号v1としては、「v+1」を指定し、親ノードの識別子p1としては、処理中の子ノードの識別子「c」を指定する(S156)。言い換えれば、このS156の処理では、さらに一つ下の階層のノードを基準としたデータの抽出を行う。
[4]さらに、抽出部14は、識別子cで示される現在の子ノードから、次ノード(兄弟ノード)の識別子を取得し、取得した識別子の値でcを更新する(S157)。
抽出部6は、このような第1データ形式階層読込処理を行うことにより、第1データ形式の合成元データベース22から全てのデータをその構造ごと抽出し、図22に示す構造の複数の抽出結果レコード21a、21b…21nを生成する。
図26は、第2データ形式の合成元データベース23の構成を示す概念図である。第2データ形式の知識データベース23は、図26に示すように、各行(1行毎)に、郵便番号と、住所名全体(住所文字列)を各々が構成する部分住所名(部分文字列)の「個数」と、その個数分の「部分住所名」と、がカンマで区切って記録されたテキストデータで構成される。
図27は、抽出部6が行う第2データ形式の合成元データベース23に対応したデータベース個別抽出処理を示すフローチャートである。すなわち、抽出部6は、合成元データベース23におけるテキストデータの終端(最終行)に達するまで(S161の真)、各行について以下のS161〜S167の処理を繰り返すことによって得られた結果を基に、図22に示す複数の抽出結果レコード21a、21b…21nを生成する。
1.まず、抽出部6は、例えば改行マークなどを検出しつつ、1行分のテキストデータを読み込む(S161)。
2.抽出部6は、1行分のテキストデータをカンマの位置で区切り(分離し)、区切られた文字列の配列f(f[0]、f[1]、f[2]…f[n])を生成する。さらに区切られた文字列の個数Nfを記憶する(S163)。
3.抽出部6は、カンマで区切った文字列先頭のf[0]を、郵便番号Dとする(S164)。
4.抽出部6は、住所名f[1]を十進数で記述された整数としてデコードし、部分住所名の個数Nxとする(S165)。
5.抽出部6は、f[2]から先の、f[2]、f[3]…と続くNx個分の文字列の配列を、部分住所名(部分文字列)の配列Sxに設定する(S166)。
6.抽出部6は、郵便番号D、部分住所名の個数Nx、部分住所名の配列(個々の部分住所名を表す文字コード及びその並び順などを含むデータ)Sx、を格納した抽出結果レコードを生成する(S167)。
図28は、第3データ形式の合成元データベース24の構成を示す概念図である。第3データ形式の知識データベース24は、図28に示すように、郵便番号を記述した行と、部分住所名(部分文字列)の個数を記述(指定)した行と、指定した行数分の部分住所名を記述した行と、からなるレコードの繰り返しとして記録されたテキストデータで構成される。
図29は、抽出部6が行う第3データ形式の合成元データベース24に対応したデータベース個別抽出処理を示すフローチャートである。すなわち、抽出部6は、(レコード毎に)テキストデータの終端に達するまで(S171の真)、以下のS172〜S177の処理を繰り返すことによって得られた結果を基に、図22に示す複数の抽出結果レコード21a、21b…21nを生成する。
1.まず、抽出部6は、例えば改行マークなどを検出しつつ、1行分(図28中の所定のレコードの1行目)のテキストデータを読み込み、郵便番号Dとする(S172)。
2.抽出部6は、1行分(図28中の所定のレコードの2行目)のテキストデータを読み込んで、十進数で記述された整数としてデコードし、部分住所名(部分文字列)の個数Nxとする(S173)。
3.抽出部6は、部分住所名の番号iを0に初期化し、i≧Nxとなるまで(S174)、以下のS175、S176の処理を順に繰り返す。
[1]抽出部6は、1行分(図28中の所定のレコードの3行目、4行目…)のテキストデータを読み込んで、i番目の部分文字列Sx[i]とする(S175)。
[2]抽出部6は、番号iに1を加算する(S176)。
4.抽出部6は、郵便番号Dと、部分住所名の個数Nxと、部分住所名の配列(個々の部分住所名を表す文字コード及びその並び順などを含むデータ)Sxと、を格納した抽出結果レコードを生成する(S177)。
図30は、第4データ形式の合成元データベース25の構成を示す概念図である。第4データ形式の合成元データベース25は、図30に示すように、第3データ形式の合成元データベース24とほぼ同等のデータ構造を有するものの、郵便番号を記述した行が存在しない点において、合成元データベース24とは構成が異なる。つまり、合成元データベース25は、所在名としての住所名を階層的に表す複数の住所文字列階層データ(所在文字列階層データ)のみが記憶されている。具体的には、第4データ形式の知識データベース25は、図30に示すように、部分住所名(部分文字列)の個数を記述(指定)した行と、指定した行数分の部分住所名を記述した行と、からなるレコードの繰り返しとして記録されたテキストデータで構成される。
図31は、抽出部6が行う第4データ形式の合成元データベース24に対応したデータベース個別抽出処理を示すフローチャートである。すなわち、抽出部6は、(レコード毎に)テキストデータの終端に達するまで(S181の真)、以下のS182〜S186の処理を繰り返すことによって得られた結果を基に、図22に示す複数の抽出結果レコード21a、21b…21nを生成する。
1.まず、抽出部6は、例えば改行マークなどを検出しつつ、1行分(図30中の所定のレコードの1行目)のテキストデータを読み込んで、十進数で記述された整数としてデコードし、照合対象文字列の部分文字列の個数Nxとする(S182)。
2.抽出部6は、部分住所名(部分文字列)の番号iを0に初期化し、i≧Nxとなるまで(S183)、以下、S184、S185の処理を順に繰り返す。
[1]抽出部6は、1行分(図30中の所定のレコードの2行目、3行目…)のテキストデータを読み込んで、i番目の部分住所名Sx[i]とする(S184)。
[2]抽出部6は、番号iに1を加算する(S185)。
3.抽出部6は、郵便番号を未指定とし(郵便番号の文字数に「−1」を指定し)、部分住所名の個数Nxと、部分住所名の配列(個々の部分住所名を表す文字コード及びその並び順などを含むデータ)Sxと、を格納した抽出結果レコードを生成する(S186)。
次に、合成部8及び補完部10並びに出力部14について説明する。図20に示すように、合成部8は、補完部10と協働しつつ、抽出部6により抽出された(記憶部3aに一時的に記憶された)図22に示す抽出結果レコード21a、21b…21nに基づいて、個々の部分文字列データ(実質的に住所文字列階層データ中の階層毎の要素を表していたデータ)とそれらの階層の関係を示す階層情報と郵便番号データ(符号文字列データ)とを互いに関連付けて記憶させた合成データベース18を生成する。合成部8は、生成した合成データベース18を一時的に記憶部3aに記憶させる。
一方、データベース再合成部としての機能を有する出力部14は、記憶部3a内に記憶された上記合成データベース18内の階層情報に基づいて、当該合成データベース18内の関連する部分文字列データどうしを、階層順に連結するように配列させた住所文字列データ(連結所在文字列データ)と、この住所文字列データの構成要素となった部分文字列データに対応する郵便番号データ(符号文字列データ)と、を互いに関連付けて記憶させた知識データベース(再合成データベース)7を生成して出力する。ここで、図1、図20に示すように、出力部14が出力する知識データベース7を用いて、上述した知識処理装置5は、図2、図3に示した住所名及び郵便番号の文字認識結果28、29を修正(補正)する。
まず、合成部8及び補完部10の構成について詳述する。補完部10及び合成部8は、図23、図24に示す合成元データベース22を構築していた第1データ形式(ノードデータ形式)で、合成データベース18を生成する。つまり、上記した部分文字列データどうしの階層の関係を示す階層情報は、自身のノードの最初の子ノードの識別子を記憶する記憶エリア内の情報と、自身のノードの最初の次ノード(兄弟ノード)の識別子を記憶する記憶エリア内の情報と、上述した住所名(住所文字列)の有無を示す記憶エリア内の情報と、から主に実現される。なお、合成部8(及び補完部10)は、ノードどうしを辺で結んだツリー構造で合成データベース18が表現されるという主旨を逸脱しない限り、いかなる形式の合成データベースを生成してもよい。
図32は、合成部8が行う合成処理を示すフローチャートである。合成部8が備える第1登録処理部8a又は(補完部と協働する)第2登録処理部8bは、図22に示す抽出結果レコード21a、21b…21nのデータ内容を、後述する個別抽出結果(第1/第2)登録処理によって順次登録することで、合成データベース18を構築する。
すなわち、第1登録処理部8a又は第2登録処理部8bは、図32に示すように、まず、ルートノードのみを備えた空のデータベースを生成し(S191)、現在登録中の抽出結果レコード21a、21b…21nの番号iを0に初期化する(S192)。さらに、第1登録処理部8a又は第2登録処理部8bは、抽出結果レコードの番号iが、抽出結果レコードの総数Ne以上になるまで(S193)、個別抽出結果(第1/第2)登録処理によって、i番目の抽出結果レコードを登録し(S194)、登録後、番号iに1を加算してS193の処理に戻る(S195)。
図33は、合成部8の第1登録処理部8aが行う個別抽出結果第1登録処理を示すフローチャートである。第1登録処理部8aは、図33に示すように、S201〜S217の処理を行うことにより、概略的には、まずルートノードのみを備えた空のデータベースを生成し、その後、内部ノードを順次生成しながら、図22に示す抽出結果レコード21a、21b…21nのデータ内容を順次登録して行くことで実現される。
1.第1登録処理部8aは、まず、カレントノード(処理中の現在のノード)の識別子pをルートノードの識別子で初期化する(S201)。
2.カレントノードが位置する階層の番号vを0に初期化する(S202)。
3.階層の番号vが図22に示す登録中の抽出結果レコードの部分住所名(部分文字列)の個数に達するまで(S205の真)、以下のS203〜S215の処理を繰り返す。
[1]pが指すカレントノードから、最初の子ノードの識別子c0を取得する(S203)。
[2]処理中の子ノードの識別子cをc0で、新規ノードの登録先のノードを示す識別子eをカレントノードの識別子pで初期化し(S204)、cが−1すなわち、該当ノードが存在しないことを示す識別子となるまで(S205の真)、主に以下のS207〜S215の処理を繰り返す。
<1>cが指すノードに格納された部分住所名(部分文字列)が、登録中の抽出結果レコードの第v番目の階層の部分住所名と一致するか否かを判定し(S207)、一致した場合(S208の真)、後述するS214の処理に進む。
<2>一致しなかった場合(S208の偽)、 現在cが指すノードの識別子をeに代入する一方で、現在cが指すノードの次ノード(兄弟ノード)の識別子をcに代入する(S209)。
<3>cが−1になった場合(S206の真)、新しいノードを生成し、そのノードを以下の内容で初期化し(S210)、後述するS211の処理に進む。
・住所名(住所文字列)の有無を、「無し」を示す「0」に初期化。
・最初の子ノードと次ノードの識別子を、該当ノード無しを示す「−1」に初期化。
・郵便番号の文字数を、郵便番号の未指定を示す「−1」に初期化。
・部分住所名(部分文字列)を、登録中の抽出結果レコードの第v番目の部分住所名で初期化。
・e=pである場合(S211の真)、eの子ノードの識別子として新しいノードの識別子を記憶し(S212)、e=pでなかった場合(S211の偽)、eの次ノードの識別子として新しいノードの識別子を記憶する(S213)。
[3]カレントノードの識別子pにcを代入する(S214)。
[4]階層の番号vを1増加させる(S215)。
4.識別子cが示すカレントノードに登録中(登録対象)の抽出結果レコードの郵便番号を登録する(S216)。
5.識別子cが示すカレントノードの住所名(住所文字列)の有無を設定する記憶エリアに、住所名(住所文字列)部分住所名の「有り」を表わす整数値1を設定する(S217)。
このようにして、第1登録処理部8aは、図23、図24に示す合成元データベース22が構築されていた第1データ形式で(ツリー構造の)合成データベース18を生成する。第1登録処理部8aは、生成した合成データベース18を記憶部3aに記憶させる。ここで、第1登録処理部8aは、上述したS216、S217の処理において、実質的に、抽出元の抽出結果レコード中の住所名(住所文字列)を構成していた最下位の階層の部分住所名(部分文字列)を表す子ノード(後記の終端ノード)に、当該抽出元の抽出結果レコード中の郵便番号(符号文字列データ)を、対応付ける第1のデータ更新部としての機能を有する。なお、後述する個別抽出結果第2登録処理の説明のために、S217の時点で識別子cが指しているカレントノードを「終端ノード」と以降記述する。
次に、上記第1のデータ更新部としての機能も持つ第2登録処理部8bが、補完部10と協働して行う個別抽出結果第2登録処理について説明する。合成部8は、上述した個別抽出結果第1登録処理と個別抽出結果第2登録処理とを選択的に切り替えて実行することが可能である。これらの登録処理の切り替えは、例えばオペレータによる外部から切替情報の入力により人為的に行われるものであってもよいし、登録対象の文字列の種別などを合成部8自体が検出し、この検出結果に基づいて合成部8が自動で切り替えを行うものであってもよい。
図34は、第2登録処理部8bが補完部10と協働して行う個別抽出結果第2登録処理を示すフローチャートである。
1.(補完部10と協働とする)第2登録処理部8bは、まず、カレントノード(処理中の現在のノード)の識別子pをルートノードの識別子で初期化する(S221)。
2.カレントノードが位置する階層の番号vを0に初期化する(S222)。
3.階層の番号vが図22に示す登録中の抽出結果レコードの部分住所名(部分文字列)の個数に達するまで(S225の真)、以下のS223〜S236の処理を繰り返す。
[1]pが指すカレントノードから、最初の子ノードの識別子c0を取得する(S223)。
[2]処理中の子ノードの識別子cをc0で、新規ノードの登録先のノードを示す識別子eをカレントノードの識別子pで初期化し(S224)、cが−1すなわち、該当ノードが存在しないことを示す識別子となるまで(S225の真)、主に以下のS227〜S236の処理を繰り返す。
<1>cが指すノードに格納された部分住所名(部分文字列)が、登録中の抽出結果レコードの第v番目の階層の部分住所名と一致するか否かを判定し(S237)、一致した場合(S232の真)、後述する郵便番号合成処理により、識別子cが指すカレントノードに格納された郵便番号と登録中の抽出結果に格納された郵便番号とから、新しい郵便番号を生成してカレントノードに登録し(S233)、後述するS235の処理に進む。
<2>一致しなかった場合(S232の偽)、 現在cが指すノードの識別子をeに代入する一方で、現在cが指すノードの次ノード(兄弟ノード)の識別子をcに代入する(S234)。
<3>cが−1になった場合(S226の真)、新しいノードを生成し、そのノードを以下の内容で初期化し(S228)、後述するS229の処理に進む。
・住所名(住所文字列)の有無を、「有り」を示す「0」に初期化。
・最初の子ノードと次ノードの識別子を、該当ノード無しを示す「−1」に初期化。
・郵便番号を、登録中の抽出結果レコードの郵便番号で初期化。
・部分住所名(部分文字列)を、登録中の抽出結果レコードの第v番目の部分住所名で初期化。
・e=pである場合(S229の真)、eの子ノードの識別子として新しいノードの識別子を記憶し(S230)、e=pでなかった場合(S229の偽)、eの次ノードの識別子として新しいノードの識別子を記憶する(S231)。
[3]カレントノードの識別子pにcを代入する(S235)。
[4]階層の番号vを1増加させる(S236)。
ここで、個別抽出結果第1登録処理と比べた場合の個別抽出結果第2登録処理の特徴は、以下の点である。すなわち、新規のノードを生成すると同時に、その新規のノードについて、住所名(住所文字列)の有無を「有り」に設定する。これにより、抽出結果レコード中に住所名として直接登録されていない中間の階層のノード(終端ノードよりも上位の階層のノード)を、擬似的な終端ノードとして設定でき、この中間の階層のノードと例えばその親ノードなどとを配列した住所名(住所文字列)を新たに構成することが可能となる。
図35Aは、郵便番号合成処理(符号文字列合成処理)による代表郵便番号(代表符号文字列)の補完の様子を示した図である。また、図35Bは、郵便番号の対応付けの矛盾を解決するための郵便番号合成処理による代表郵便番号の割り当ての様子を示した図である。第2登録処理部8b及び補完部10が行う個別抽出結果第2登録処理では、終端ノードよりも上位の中間の階層のノードについても、後述する郵便番号合成処理により、郵便番号を補完することが可能となる。つまり、あるノードの親ノードに対し郵便番号が登録されていない場合、その親ノードを共有する子ノード(終端ノード)内の郵便番号から推定した代表郵便番号が当該親ノードに登録される。
図36は、代表番号合成部10aを備えた補完部10及び第2登録処理部8bが行う郵便番号合成処理を示すフローチャートである。また、図37は、郵便番号合成処理による代表郵便番号の決定方法を説明するための概念図である。図20に示すように、第2登録処理部8bと協働する補完部10は、検出部としての機能を有し、終端ノード(抽出結果レコード中の住所名を構成していた最下位の階層の部分住所名を表す子ノード)のその親ノードに対し、対応付けされている郵便番号データ(符号文字列データ)が存在するか否かを検出する。
また、補完部10は、判別部及び第2のデータ更新部として機能する代表番号合成部10aを備えている。代表番号合成部10aは、図35Aに示すように、上記終端ノードのその親ノードに対応付けされた郵便番号データが存在しないことが検出された場合、当該終端ノードとその兄弟ノードに各々対応付けられた郵便番号データどうしを一文字毎に比較し、一文字単位の一致/不一致を判別する。さらに、この判別結果に基づいて、代表番号合成部10aは、一致した全ての文字の配列を含む代表郵便番号(新たな符号文字列データ)を生成し、生成した代表郵便番号を(郵便番号のない)当該親ノードに対応付ける(補完する)。
この際、代表番号合成部10aは、図35A、図37に示すように、終端ノードとその兄弟ノードどうしの比較により不一致となった全ての文字をワイルドカード(代替文字)と置き換え、このワイルドカードの配列と、前記一致した全ての文字の配列と、を組み合わせることにより、代表郵便番号を生成する。図35Aでは、(東京都府中市)武蔵台、東芝町、栄町を部分住所名として各々示すノード中の郵便番号「1830042」、「1830043」、「1830051」どうしの比較の結果、一致した全ての文字の配列「18300・・」と、不一致となった文字の配列「・・・・??」とを合成した代表郵便番号「18300??」が得られた態様を例示している。さらに、合成された代表郵便番号「18300??」は、終端ノードとその兄弟ノードに共通する親ノード(中間の階層のノード)である府中市を表すノードに補完される。
さらにまた、代表番号合成部10aは、例えば代表郵便番号が補完された前記親ノードのそのまた親ノードを対象とし、この親ノードに対応付けされた郵便番号データが存在しないことが検出された場合、当該代表郵便番号が補完された親ノードとその兄弟ノードに各々対応付けられた郵便番号データどうしを一文字毎に比較し、一文字単位の一致/不一致を判別する。さらに、この判別結果に基づいて、代表番号合成部10aは、一致した全ての文字の配列を含む代表郵便番号(新たな符号文字列データ)を生成し、生成した代表郵便番号を(郵便番号のない)当該親ノードのその親ノードに対応付ける。このようにして、代表番号合成部10aは、ツリー構造のデータベース18中の全てのノードに対して、郵便番号を補完する。
このように第2登録処理部8b及び代表番号合成部10aを有する補完部10は、ツリー構造の合成データベース18中の近接する部分木(部分ツリー)内での郵便番号の類似性を利用して、郵便番号が対応付けられていないノードについても郵便番号を補完することができる。これにより、例えば、郵便番号の登録ない住所データベースと、郵便番号の登録のある住所データベースと、を統合(合成)した場合に、互いのデータベースの情報で互いを補い合いつつ全体として情報量の多い一つの合成データベースを得ることができる。さらに、このような情報量の多いデータベースを知識処理装置5に適用することで、文字認識結果の補正の精度をより向上させることができる。
また、図35B及び図34のS233において、第2登録処理部8bと協働する補完部10は、実質的に、複数の異なる郵便番号(符号文字列データ)が対応付けされる(一つの部分住所名を表す)同一のノードが存在するか否かを検出する。また、代表番号合成部10aは、複数の異なる符号文字列データが存在することが検出された場合、図35Bに示すように、当該複数の異なる郵便番号どうしを一文字毎に比較し、一文字単位の一致/不一致を判別する。さらに、代表番号合成部10aは、この判別結果に基づいて、一致した全ての文字の配列を含む代表郵便番号を新たに生成し、生成したこの代表郵便番号を上記同一のノードに対応付ける処理を行う。
図35Bでは、(東京都府中市)武蔵台を表す同一のノードに、二つの異なる郵便番号「1830042」、「1830043」が対応付け(指定)される場合を例示している。この場合、武蔵台を表す(同一の)ノードには、代表郵便番号「183004?」が最終的に対応付けされることになる。したがって、このような第2登録処理部8bと協働する補完部10の処理は、例えば、住所合併前の比較的古いデータベースと、住所合併後の比較的新しいデータベースと、を統合(合成)する場合などにおいて生じ得る郵便番号の対応付けの矛盾などを解消することができる。
より詳細には、図34中のS233で郵便番号合成処理を行うことで、図36、図37に示すように、代表番号合成部10aは、合成元の二つの郵便番号C1、C2を合成した代表郵便番号C3を生成する。合成部8は、郵便番号C1の文字数をL1、郵便番号C2の文字数をL2、代表郵便番号である郵便番号C3の文字数をL3とすると、合成部8は、以下のようにして郵便番号合成処理を行う。
図36に示すように、代表番号合成部10aは、まず、代表郵便番号である郵便番号C3の文字数L3を、合成元の郵便番号C1の文字数L1と、合成元の郵便番号C2の文字数L2と、の最大値とする(S241)。次に、代表番号合成部10aは、現在決定中の文字の番号iを0に初期化し(S242)、文字の番号iが、文字数L3に達するまで(S243の真)、以下のS243〜S254の処理を繰り返す。
[1]すなわち、代表番号合成部10aは、文字の番号i < 文字数L1である場合(S244の真)、合成元の一方の郵便番号C1のi文字目の文字コードをc1に設定する(S245)。文字の番号i < 文字数L1でない場合(S244の偽)、代表番号合成部10aは、当該文字が存在しないことを示すコードとして例えば「−1」をc1に設定する(S246)。
[2]次に、代表番号合成部10aは、文字の番号i < 文字数L2である場合(S247の真)、合成元の他方の郵便番号C2のi文字目の文字コードをc2に設定する(S248)。文字の番号i < 文字数L2でない場合(S247の偽)、代表番号合成部10aは、当該文字が存在しないことを示すコードとして例えば「−1」をc2に設定する(S249)。
[3]続いて、代表番号合成部10aは、c1=c2である場合(S250の真)、c1をc3に代入する(S251)。c1=c2でない場合(S250の偽)、代表番号合成部10aは、予め定めておいた文字コードをc3に指定する。この文字コードとしては、例えば知識処理装置5におけるワイルドカードとして、「?」に対応したJISコード「0x2129」を指定する(S252)。
[4]さらに、代表番号合成部10aは、代表郵便番号である郵便番号C3の第i文字目をc3として設定する(S253)、設定後、番号iを1加算してS243の処理に戻る(S254)。
したがって、このような郵便番号合成処理では、一致した文字(の配列)をそのまま新しい郵便番号の構成要素として適用し、不一致であった文字(の配列)を、郵便番号の構成要素として実質的には適用しないこと(文字認識の補正情報には適用しないこと)を意味付けたワイルドカード(代替文字)を設定する。すなわち、抽出結果レコード21a、21b…21nで指定されている情報から極力、判明する範囲内で、代表郵便番号が決定される。これにより、合成部8が生成した合成データベース18を基に得られる知識データベース7の内容が、図1に示す知識処理装置5に最大限に活用されるかたちで、文字認識結果の補正が行われることになる。
次に、補完部10が行う階層補完処理について説明する。図38は、階層補完処理による郵便番号の補完の様子を示した図である。また、図39は、補完部10が行う階層補完処理を示すフローチャートである。図38に示すように、補完部10は、第2の検出部としての機能を有するものであって、ツリー構造の合成データベース18内において、抽出結果レコード中の住所名(住所文字列)を構成していた互いに階層が一つ異なる各部分住所名(各部分文字列データ)をそれぞれ表す子ノード及びその親ノードに対し、対応付けさている郵便番号(符号文字列データ)が存在するか否かを検出する。
さらに、補完部10は、第3のデータ更新部としての機能をも有するものであって、図38に示すように、上記親ノードに対応付けされた郵便番号(符号文字列データ)が存在し且つ前記子ノードに対応付けされた郵便番号が存在しないことを検出した場合、当該親ノードに対応付けされた郵便番号(符号文字列データ)を、当該子ノードに対応付ける(補完する)。図38では、(東京都)昭島市を表す親ノードに代表郵便番号として先に補完(補完[1])された「19600??」を、図39に示す階層補完処理により、玉川町を表す子ノードに補完(補完[2])した態様を例示している。補完部10は、図38(及び図35)に示すように、近接する地域の住所名に類似する郵便番号が割り当てられていることを利用して上述した郵便番号合成処理や階層補完処理を実現する。
補完部10が行う階層補完処理を図39に示すフローチャートに基づき説明する。図39に示すように、補完部10は、概略的には、ノードの配列Nvをこの階層補完処理の再帰的呼び出しで更新しながら処理を進める。すなわち、補完部10による階層補完処理は、記憶部3aに記憶された合成データベース18を対象とし、配列Nvの第v番目の要素に対応する階層の番号vとして0を指定しかつ親ノードの識別子pとしてルートノード(先頭ノード)の識別子を指定することで開始され、さらに以下のS261〜S268の処理を繰り返すことによって実現される。
1.補完部10は、配列Nvの第v番目の要素に親ノードの識別子pを代入する。(S261)。
2.補完部10は、識別子pで示される親ノードから最初の子ノードの識別子c0を取得する(S262)。
3.補完部10は、取得したこの識別子c0で、参照中の子ノードを示す識別子cを初期化し(S263)、cが−1になる(最初の子ノード、次ノードに該当するノードが存在しなくなる)まで(S264の真)、以下のS265〜S268の処理を繰り返す。
[1]補完部10は、階層補完処理を再帰的に呼び出す。再帰呼び出しの階層の番号v1としては、「v+1」を指定し、親ノードの識別子p1としては、処理中の子ノードの識別子「c」を指定する(S265)。つまり、このS156の処理では、さらに一つ下の階層のノードを基準としたデータの抽出を行う。
[2]さらに、補完部10は、識別子cが示す子ノードの郵便番号が未指定の場合(S266の真)、識別子pが示す親ノードの郵便番号を、識別子cが示す子ノードにコピーする(S267)。
[3]また、補完部10は、識別子cが指す子ノードから、次ノード(兄弟ノード)の識別子を取得し、取得した値で識別子cを更新する(S268)。
補完部10は、このような階層補完処理を行うことで、上位の階層のノードから取得した郵便番号で、下位の階層のノードに郵便番号を補完する。また、この階層補完処理の行われた合成データベース18は、補完部10により記憶部3a内に記憶される。
次に、出力部14について説明する。上述したように、出力部14は、記憶部3aに記憶されたツリー構造の合成データベース18内の階層情報(ノード毎の、最初の子ノード及び次ノードの識別子、並びに住所名の有無を示す情報)に基づいて、当該合成データベース18内の関連する部分住所名(部分文字列)どうしを、階層順に連結するように配列させた住所名([連結]住所文字列)と、この住所名の構成要素となっていた部分住所名に対応する郵便番号と、を互いに関連付けて記憶させた知識データベース(再合成データベース)7を生成(再構築)して出力する。
ここで、図1、図20に示すように、出力部14が出力する図4に示す知識データベース7(知識レコード7a、7b…7n)に基づいて、上述した知識処理装置5は、図2、図3に示した住所名及び郵便番号の文字認識結果28、29を修正(補正)する。すなわち、出力部14は、図20に示すように、階層出力第1処理部14aと、番号更新部14dを有する階層出力第2処理部14cと、出力文字列生成部14bと、を備えている。
ここで、出力部14は、階層出力第1処理部14aと階層出力第2処理部14cとを選択的に切り替えて実行することが可能である。これらの処理の切り替えは、例えばオペレータによる外部から切替情報の入力により人為的に行われるものであってもよいし、処理対象の文字列の種別などを出力部14自体が検出し、この検出結果に基づいて出力部14が自動で切り替えを行うものであってもよい。
まず、階層出力第1処理部14aの機能について説明する。図40は、階層出力第1処理部14aが出力文字列生成部14bと協働して行う階層出力第1処理を示すフローチャートである。(出力文字列生成部14bと協働して処理を行う)階層出力第1処理部14aは、出力先の知識データベース(7)を空に初期化した後、図40に示すように、記憶部3aに記憶されたツリー構造の合成データベース18内の階層毎のノード番号が格納される配列Nvを、階層出力第1処理を再帰的に呼び出しつつ更新して行く。つまり、階層出力第1処理は、配列Nvの第v番目の要素に対応する階層の番号vとして0を指定しかつ親ノードの識別子pとしてルートノード(先頭ノード)の識別子を指定することで開始され、さらに以下の271〜S280の処理を繰り返すことによって実現される。
1.階層出力第1処理部14aは、配列Nvの第v要素に、親ノードの識別子pを代入する(S271)。
2.階層出力第1処理部14aは、識別子pが示す親ノードから、最初の子ノードの識別子c0を取得する(S272)。
3.階層出力第1処理部14aは、参照中の子ノードを示す識別子cをc0で初期化して(S273)、cが−1になる(最初の子ノード、次ノードに該当するノードが存在しなくなる)まで(S274の真)、以下の処理S275〜S280を繰り返す。
[1]すなわち(S274の偽の場合)、階層出力第1処理部14aは、階層第1出力処理を再帰的に呼び出す(S275)。詳細には、出力部14は、再帰呼び出しでの階層の番号v1としては「v+1」を、親ノードの識別子p1としては、処理中の子ノードの識別子cを指定する。
[2]さらに、階層出力第1処理部14aは、識別子cが示す子ノードに記憶されている住所名の有無の指定が「有り」となっている場合(S276の真)、後述するS280の処理の前に、以下のS277〜279の処理を行う。なお、住所名の有無の指定が「有り」となっていない場合(S276の偽)、S280の処理に進む。
<1>(上記S276の真の場合)階層出力第1処理部14aは、出力文字列生成部14bと協働し後述する出力文字列生成処理によって、配列Nvを参照しながら住所文字列(連結住所文字列)Tを生成する(S277)。
<2>階層出力第1処理部14aは、識別子cが示す子ノードに格納されている郵便番号Cを取得する(S278)。
<3>階層出力第1処理部14aは、生成した住所文字列Tと郵便番号Cとを含む図4に示す知識レコードを生成し、生成した知識レコードを出力先の知識データベース7に連結する(S279)。
[3]階層出力第1処理部14aは、識別子cが示す子ノードから、次ノード(兄弟次ノード)の識別子を取得し、取得した値でcを更新する(S280)。
ここで、S276〜S279の処理について例示すると、部分住所名として例えば「武蔵台」を表すノードについて住所名の有無の指定が「有り」となっていた場合、例えば「東京都府中市武蔵台」と「1830042」との対を表す知識レコードが生成される。さらにまた、部分住所名として例えば「府中市」を表すノード(中間の階層のノード)について住所名の有無の指定が「有り」となっていた場合、例えば「東京都府中市」と「1830000」などとの対を表す知識レコードが生成される。
次に、出力文字列生成処理を行う出力文字列生成部14bの機能について説明する。ここで、図41は、住所名(住所文字列)を階層的に表現した態様を例示する模式図である。また、図42は、出力文字列生成処理を示すフローチャートである。出力文字列生成部14bは、ツリー構造の合成データベース18内の階層情報(ノード毎の、最初の子ノード及び次ノードの識別子、並びに住所名の有無を示す情報)に基づいて、図41に示すように、当該合成データベース18内の関連する部分住所名(部分文字列)どうしを、階層順に連結するようにして配列させた住所文字列(連結住所文字列)を住所名して生成する。
図41、図42に示すように、まず、出力文字列生成部18は、生成結果となる住所文字列Smを空に初期化(住所文字列生成用の記憶領域を確保)した後(S291)、連結(配列)対象の部分文字列の番号iを0に初期化する(S292)。さらに、出力文字列生成部18は、上記階層情報から得た連結(配列)対象の部分文字列(部分住所名)の個数がNx個である場合、番号iがNx−1になるまで(S324の真)、以下のS294、S295の処理を繰り返す。
すなわち、連結対象の部分文字列の要素の0番目〜Nx−1番目まで、順次、i番目の部分文字列Sx[i]を右端に連結し(S325)、連結後、番号iを1加算する(S326)。これにより、0番目〜Nx−1番目までの部分文字列(部分住所名)が互いに連結された住所文字列(住所名)が生成される。つまり例えば、Sx[0]の「東京都」とSx[1]の「府中市」とSx[2]の「栄町」とが階層順に配列(連結)されて「東京都府中市栄町」が住所名として生成される。
次に、番号更新部14dを有する階層出力第2処理部14cの機能について説明する。ここで、図43は、階層出力第2処理部14cが出力文字列生成部14bと協働して行う階層出力第2処理を示すフローチャートである。ここで、図41に示した階層出力第1処理のS271〜280と、図43に示す階層出力第2処理のS301〜309及びS311とは、同一の処理を行うものの、図43に示す階層出力第2処理では、S311の処理を行う前に、S310の郵便番号更新処理を行う。この郵便番号更新処理は、階層出力第2処理部14cが備える番号更新部14dにより実現される。
図44は、番号更新部14dが行う郵便番号更新処理を示すフローチャートである。番号更新部14dは、図44に示すように、まず、処理中の子ノード(図43のS306の処理を経た子ノード)に郵便番号Ccが指定されていない場合(S321の偽)、つまり、この子ノードに記憶された郵便番号の文字数として「−1」が指定されている場合、そのまま郵便番号更新処理を終了させる。
また、番号更新部14dは、子ノードに郵便番号Ccが指定されていることを検出した場合(S321の真)、その親ノードの郵便番号の有無の指定を「有り」に設定する(S322)。また、番号更新部14dは、親ノードに既に郵便番号が指定されていることを検出した場合(S323の真)、図37に例示した郵便番号合成処理と同様の処理を行うことによって、子ノードの郵便番号Ccと親ノードの郵便番号Cpとから代表郵便番号Cp1を生成する(S324)。さらに、番号更新部14dは、生成した代表郵便番号Cp1を、親ノードの郵便番号Cpで更新する(S325)。
また、番号更新部14dは、親ノードの郵便番号Cpが指定されていないことを検出した場合(S323の偽)、当該親ノードの郵便番号Cpに前記子ノードの郵便番号Ccを代入する(S326)。これにより、親ノードに郵便番号が補完される。
このようにして、出力部14は、記憶部3a内に記憶された上記合成データベース18内の階層情報に基づいて、当該合成データベース18内の関連する部分文字列データどうしを、階層順に連結するように配列させた住所文字列データ(連結所在文字列データ)と、この住所文字列データの構成要素となった部分文字列データに対応する郵便番号データ(符号文字列データ)と、を互いに関連付けて記憶させた知識データベース(再合成データベース)7を生成して出力する。ここで、図1、図20に示すように、出力部14が出力する知識データベース7を用いて、上述した知識処理装置5は、図2、図3に示した住所名及び郵便番号の文字認識結果28、29を修正(補正)する。
このように、階層出力第1(及び第2)処理部14a、14c並びに出力文字列生成部14bを備える出力部14は、住所名(住所文字列)と郵便番号と、を互いに関連付けて記憶させた図1、図4、図20に示す知識データベース(知識レコード7a、7b…7n)7を生成して出力する。さらに、上述した知識処理装置5は、出力部14が出力する知識データベース7に基づいて、図2、図3に示した住所名及び郵便番号の文字認識結果28、29を補正する。
既述したように、本実施形態の文字認識支援システム1が備えたデータベース合成装置3によれば、複数の合成元データベースから例えば別々に抽出された同一内容の複数の部分住所名(部分文字列)を表すノードを単一のノードとして統一し、この統一したノードを、下位の階層のデータ内容の異なる複数の子ノードに共有させるかたちでツリー構造の合成データベース18を構築することがきる。これにより、対で用いられる住所名並びに郵便番号(若しくは住所名のみ)が登録された複数の合成元データベースの登録内容を効率的に統合することができる。
また、本実施形態のデータベース合成装置3による郵便番号合成処理では、一致した文字の配列をそのまま新しい郵便番号の構成要素として適用し、不一致であった文字の配列を、郵便番号の構成要素として実質的には適用しないこと(文字認識の補正情報には適用しないこと)を意味付けたワイルドカード(代替文字)を設定することができる。したがって、抽出結果レコード21a、21b…21nで指定されている情報から極力、判明する範囲内で、代表郵便番号が決定される。これにより、合成部8が生成した合成データベース18を基に得られる知識データベース7の内容が、図1に示す知識処理装置5に最大限に活用されるかたちで、文字認識結果を補正することができる。
また、本実施形態のデータベース合成装置3では、図20に示す合成部8及び補完部10が上記ツリー構造の合成データベース18を一旦生成し、その後、この合成データベース18を再構築した知識データベース7を生成するので、郵便番号が対応付けられていないノードに対して、データベースがツリー構造の段階で、そのツリー構造上で近接するノードの郵便番号を補完することができる。
すなわち、データベース合成装置3は、ツリー構造の合成データベース18中の近接する部分木(部分ツリー)内での郵便番号の類似性を利用して、郵便番号が対応付けられていないノードについても郵便番号を補完することが可能である。これにより、例えば、郵便番号の登録ない住所データベースと、住所及び郵便番号が共に登録された住所データベースと、を合成した場合に、互いのデータベースの情報で互いを補い合いつつ全体として情報量の多い一つの合成データベースを得ることができる。これにより、情報量の多いこのような合成データベース18を基に知識データベース7を得ることで、知識処理装置5による文字認識結果の補正の機能を、より高めることができる。
また、本実施形態のデータベース合成装置3では、複数の異なる郵便番号の対応付けが指定される同一のノードが存在することが検出された場合、複数の異なる郵便番号どうしを一文字毎に比較し、一文字単位の一致/不一致を判別する。さらに、この判別結果に基づいて、一致した全ての文字の配列を含む代表郵便番号を新たに生成し、生成したこの代表郵便番号を上記同一のノードに対応付ける。これにより、住所合併前の比較的古いデータベースと、住所合併後の比較的新しいデータベースと、を統合(合成)する場合などにおいて生じ得る郵便番号の対応付けの矛盾などを解消することができる。
[第2の実施形態]
次に、本発明の第2の実施形態を図45〜図47に基づき説明する。ここで、図45は、この実施形態に係る文字認識支援システム51を示す機能ブロック図である。また、図46は、文字認識支援システム51の備えた知識処理装置55の検索部52の処理により得られる知識レコードの配列Kと検索結果54との対応関係を示す概念図である。さらに、図47は、上記検索部52が行う階層検索処理を示すフローチャートである。なお、図45において、図1に示した第1の実施形態の文字認識支援システム1に設けられていたものと同一の構成要素については、同一の符号を付与しその説明を省略する。
本実施形態の文字認識支援システム51は、図45に示すように、第1の実施形態の文字認識支援システム1に設けられていたデータベース合成装置3及び知識処理装置5に代えて、データベース合成装置53及び知識処理装置55を備えて構成される。データベース合成装置53は、出力部14に代えて、出力部54を備えている。一方、知識処理装置55は、検索部12及び知識データベース7に代えて、レコード配列生成部としての機能を有する検索部52及び知識データベース57を備えている。
すなわち、出力部54は、第1の実施形態で述べたツリー構造(ノード形式)の合成データベース18を、そのままのデータ形式で(知識処理装置55側に)出力する。検索部52は、出力文字列生成部14bと同様の機能を有する出力文字列生成部52bと、階層検索処理部52aと、を有する。階層検索処理部52aは、出力文字列生成部52bと協働することにより、実質的に、第1の実施形態の出力部14の図20に示した階層出力第1処理部54aの機能と、第1の実施形態の検索部12による(検索結果第1列挙条件を満たしているか否かを判定する)図6〜図8、図10、図11に例示した検索用第1比較処理の実行機能と、を併せ持つかたちで実現されている。ここで、検索部52aは、例えば図20に示した階層出力第2処理部54aの機能と、図9などに例示した(検索結果第2列挙条件を満たしているか否かを判定する)検索用第2比較処理の実行機能と、を併せ持つかたちで構成されていてもよい。つまり、このような階層検索処理部52a及び出力文字列生成部52bを備えた検索部52は、階層検索処理を行う。
したがって、このような階層検索処理部52a及び出力文字列生成部52bを備えた検索部52は、図46に示すように、第1の実施形態の図4に示した知識レコードの繰り返しとして構成される知識レコードの配列Kを生成すると共に、検索結果として知識レコードの識別子の配列r、及び列挙された検索結果の数を表す変数nrを記憶する階層検索処理を実現する。この階層検索処理において、検索部52は、知識データベース(合成データベース18)57中のノードの個数分の領域を確保する。
つまり、検索部52は、列挙される検索結果54の個数を示す変数nrを0で初期化し、知識レコードの配列Kの要素数Nkを0で初期化した後、図47に示すように、ツリー構造の知識データベース(合成データベース18)57内の階層毎のノード番号が格納される配列Nvを、階層検索処理の再帰的呼び出しにより更新して行く。この検索処理は、配列Nvの第v番目の要素に対応する階層の番号vとして0を指定しかつ親ノードの識別子pとしてルートノード(先頭ノード)の識別子を指定することで開始され、さらに以下のS331〜S344の処理を繰り返すことによって実現される。
1.検索部52は、配列Nvの第v要素に、親ノードの識別子pを代入する(S331)。
2.検索部52は、識別子pが示す親ノードから、最初の子ノードの識別子c0を取得する(S332)。
3.検索部52は、参照中の子ノードを示す識別子cをc0で初期化して(S333)、cが−1になる(最初の子ノード、次ノードに該当するノードが存在しなくなる)まで(S334の真)、以下の処理S335〜S344を繰り返す。
[1]すなわち(S334の偽の場合)、検索部52は、階層検索処理を再帰的に呼び出す(S335)。詳細には、検索部52は、再帰呼び出しでの階層の番号v1としては「v+1」を、親ノードの識別子p1としては、処理中(参照中)の子ノードの識別子cを指定する。
[2]さらに、検索部52は、識別子cが示す子ノードに記憶されている住所名の有無の指定が「有り」となっている場合(S336の真)、以下のS337〜343の処理を行う。なお、住所名の有無の指定が「有り」となっていない場合(S336の偽)、S344の処理に進む。
<1>(上記S336の真の場合)検索部52は、出力文字列生成部52b通じての出力文字列生成処理によって、配列Nvを参照しながら住所文字列(連結住所文字列)Tを生成する(S337)。
<2>検索部52は、識別子cが示す子ノードに格納されている郵便番号Cを取得する(S338)。
<3>図2、3に示した文字認識結果を基に、住所文字列Tと郵便番号Cとの対が、検索結果第1列挙条件を満たしているか否かを検索用第1比較処理により判定する(S339)。
<4>検索結果第1列挙条件を満たしている場合(S340の真)、検索部52は、以下のS341〜S343の処理を行う。
・検索部52は、知識レコードの配列Kの要素数Nkを1増加させる(S341)。
・検索部52は、検索結果第1列挙条件を満たした住所文字列T及び郵便番号Cを格納させた知識レコードを、知識レコードの配列Kの末尾、すなわちK[o]に生成する(S342)。ここで、「o」は、生成した知識レコードの位置を示す変数であり、o=Nk−1である。
・検索部52は、生成した知識レコードの位置を示す変数oの現在の値を、検索結果の識別子として列挙する(S343)。ここで、検索部52は、新しい検索結果を列挙する場合、第1の実施形態の検索用第1比較処理と同様、配列rのnr番目のエントリに、検索結果の識別子を記憶し、nrを1増加させることによって、新しい検索結果の列挙を行う。
[3]検索部52は、識別子cが指す子ノードから、次ノード(兄弟ノード)の識別子を取得し、取得した値でcを更新する(S344)。
また、図45、図46に示すように、選択部15と上述した検索部52とは、互いに協働しつつ、文字認識結果(住所名及び郵便番号を文字認識した結果)として表される文字列の対と、知識レコードの配列K内で対応付けられた全ての住所名(連結所在文字列データ)及び郵便番号(符号文字列データ)の対が各々表す文字列の対と、を一文字単位で照合し、一文字単位の一致/不一致の結果を含む文字列の対どうしの照合結果を得る照合部として機能する。さらに、補正部として機能する適用部16は、上記照合結果に基づいて、文字認識結果を補正する。
ここで、S339の検索用第1比較処理の際、図10のS42や図11のS62に例示したように、知識データベース57(合成データベース18)から得た郵便番号(符号文字列データ)中に、ワイルドカードが含まれていた場合、当該ワイルドカードとの照合による文字単位の一致/不一致の結果を強制的に一致とする(不適合文字数として計数しない)。
したがって、第2の実施形態の文字認識支援システム51によれば、データベース合成装置53の構成の簡略化、及び実質的に知識データベース57のデータ量の軽減を図ることができる。
以上、本発明を第1、第2の実施の形態により具体的に説明したが、本発明はこれらの実施形態にのみ限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。例えば、上述した実施形態では、所在名としての住所名(住所文字列)と、符号文字列としての郵便番号と、を対で処理する装置及びシステムについて例示したが、これに代えて、インターネット上で特定される所在名としてのドメイン名と、そのドメイン名に対応するIP(Internet Protocol)アドレスと、の対を処理する場合についても、本発明のデータべース合成装置及び文字認識結果修正装置(知識処理装置)並びにこれらを備える文字認識支援システムを適用することができる。
図48は、インターネット上のドメイン名を階層的に表現した態様を例示する模式図である。また、図49は、ドメイン名の処理に対応した第2の出力文字列生成処理を示すフローチャートである。図49に示す第2の出力文字列生成処理は、図20示した出力文字列生成部14bに代えて、例えば第2の出力文字列生成部により行われる。図48に示すように、ドメイン名を階層的に区分したトップレベルドメイン、セカンドレベルドメイン、サードレベルドメインで所在文字列階層データ(連結所在文字列データ)が構成される。ここで、ドメイン名を構成するトップレベルドメイン(国別コードjpなど)、セカンドレベルドメイン(組織種別コードcoなど)、サードレベルドメイン(組織名コードtoshiba-solなど)は、名称の概念の大小関係の並びが、住所名の並びと左右逆であると共に、「.(ピリオド)」なども介在されている。
このため、第2の出力文字列生成部は、図48、図49に示すように、まず、生成結果となるドメイン名を表す文字列Smを空に初期化(文字列生成用の記憶領域を確保)した後(S341)、連結対象の部分文字列を表すノードの階層の番号iをNx−1に初期化する(S342)。ここで、図48では、例えば「jp」、「co」、「toshiba-sol」の順に階層の番号iは、「0」、「1」、「2」となる。つまり、Sx[0]は「jp」、Sx[1]は「co」、Sx[2]は「toshiba-sol」となる。さらに、第2の出力文字列生成部は、既述した階層情報から得られる連結対象の部分文字列(部分住所名)の個数がNx個である場合、番号iが0になるまで(S343の真)、以下のS344〜S347の処理を繰り返す。
すなわち、連結対象の部分文字列の要素のNx−1番目〜0番目まで、順次、「.」及びi番目の部分文字列Sx[i]を右端に連結し(S345,S346)、連結後、番号iを1減算する(S347)。但し、番号iがNx−1の場合(「toshiba-sol」や「toshiba」などの部分文字列の左には)、「.」を連結しない(S344)。
一方、ドメイン名と対のIPアドレスは、3桁の十進数で表現されたオクテット4つを、ピリオド「.」で連結した形式で符号文字列データを構成する。各オクテットが、3桁に満たない場合は左から0を詰める。この形式の符号文字列データとしては、例えば「123.045.067.089」などが挙げられる。
さらに、これに代えて、所在名である住所名と対応付けられる符号列(数字列)として5桁の番号の全国地方公共団体コード(市町村コード)を含み、さらに、いわゆるチェックディジット(文字認識結果検証用の値を有する桁)を1桁加えた6桁の番号で表現される符号文字列データを適用することも可能である。
また、住所名と対で用いる、緯度と経度とで示される地球上の位置座標で符号文字列データを構成し、これを本発明に適用することも可能である。すなわち、この形式の符号文字列データは、以下の文字列を左から順に並べた27文字で構成される。
「東経」あるいは「西経」の2文字
経度の度数3桁(3桁に満たない場合は左から0を詰める。)
「度」の1文字
経度の分数2桁(2桁に満たない場合は左から0を詰める。)
「分」の1文字
経度の秒数の整数部分2桁(2桁に満たない場合は左から0を詰める。)
「秒」の1文字
経度の秒数の小数部分上位2桁(2桁に満たない場合は左から0を詰める。)
「北緯」あるいは「南緯」の2文字
緯度の度数2桁(2桁に満たない場合は左から0を詰める。)
「度」の1文字
緯度の分数2桁(2桁に満たない場合は左から0を詰める。)
「分」の1文字
緯度の秒数の整数部分2桁(2桁に満たない場合は左から0を詰める。)
「秒」の1文字
緯度の秒数の小数部分上位2桁を(2桁に満たない場合は左から0を詰める。)
すなわち、このデータ形式では、例えば「東経135度12分34秒59北緯34度59分12秒34」などが、(住所名に対応する符号列を含む)符号文字列データを構成する。
1,51…文字認識支援システム、2…データベース取得部、3,53…データベース合成装置、3a…記憶部、5,55…知識処理装置、6…抽出部、7,57…知識データベース、7a,7b〜7n…知識レコード、8…合成部、8a…第1登録処理部、8b…第2登録処理部、9…文字認識結果入力部、10…補完部、10a…代表番号合成部、12,52…検索部、14,54…出力部、14a…階層出力第1処理部、14b,52b…出力文字列生成部、14c…階層出力第2処理部、14d…番号更新部、15…選択部、16…適用部、17…修正結果出力部、18…合成データベース、21a,21b〜21n…抽出結果レコード、22,23,24,25…合成元データベース、22a〜22f…ノード、28…住所名の文字認識結果、29…郵便番号の文字認識結果、31,54…検索結果、32…選択結果、52b…階層検索処理部。