以下に添付図面を参照して、この発明にかかる帳票処理プログラム、該プログラムを記録した記録媒体、帳票処理装置、および帳票処理方法の好適な実施の形態を詳細に説明する。
(帳票処理装置のハードウェア構成)
まず、この発明の実施の形態にかかる帳票処理装置のハードウェア構成について説明する。図1は、この発明の実施の形態にかかる帳票処理装置のハードウェア構成を示すブロック図である。
図1において、帳票処理装置は、CPU101と、ROM102と、RAM103と、HDD(ハードディスクドライブ)104と、HD(ハードディスク)105と、FDD(フレキシブルディスクドライブ)106と、着脱可能な記録媒体の一例としてのFD(フレキシブルディスク)107と、ディスプレイ108と、I/F(インターフェース)109と、キーボード110と、マウス111と、スキャナ112と、プリンタ113と、を備えている。また、各構成部はバス100によってそれぞれ接続されている。
ここで、CPU101は、帳票処理装置の全体の制御を司る。ROM102は、ブートプログラムなどのプログラムを記憶している。RAM103は、CPU101のワークエリアとして使用される。HDD104は、CPU101の制御にしたがってHD105に対するデータのリード/ライトを制御する。HD105は、HDD104の制御で書き込まれたデータを記憶する。
FDD106は、CPU101の制御にしたがってFD107に対するデータのリード/ライトを制御する。FD107は、FDD106の制御で書き込まれたデータを記憶したり、FD107に記憶されたデータを帳票処理装置に読み取らせたりする。
また、着脱可能な記録媒体として、FD107のほか、CD−ROM(CD−R、CD−RW)、MO、DVD(Digital Versatile Disk)、メモリーカードなどであってもよい。ディスプレイ108は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ108は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
I/F109は、通信回線を通じてインターネットなどのネットワーク114に接続され、このネットワーク114を介して他の装置に接続される。そして、I/F109は、ネットワーク114と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F109には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード110は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス111は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
スキャナ112は、画像を光学的に読み取り、帳票処理装置内に画像データを取り込む。なお、スキャナ112は、OCR機能を持たせてもよい。また、プリンタ113は、画像データや文書データを印刷する。プリンタ113には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
(対象となる帳票の一例)
つぎに、この発明の実施の形態にかかる帳票処理装置の処理対象となる帳票の一例について説明する。図2は、この発明の実施の形態にかかる帳票処理装置の処理対象となる帳票の一例を示す説明図である。図2において、帳票200は、複数(図2では3つ)のセルC1〜C3から構成されている。セルC1には『氏名』、セルC2には『フリガナ』、『フジ』、『タロウ』、セルC3には『(姓)』、『(名)』、『富士』、『太郎』の文字情報が表示されている。
この帳票200が紙帳票を読み込んだイメージデータである場合には、イメージデータとして取り込む際に、セルC1〜C3内の文字情報やセルC1〜C3のレイアウト情報を認識することができる。また、帳票200が、ワープロソフトや表計算ソフトなどで作成された非構造化電子文書(電子帳票)である場合、セルC1〜C3内の文字情報やセルC1〜C3のレイアウト情報を、電子帳票から抽出することができる。これらの手法としては様々な方法が知られており、ここでは任意の手法を用いるとする。
図3は、図2に示した帳票200のマスを示す説明図である。各セルC1〜C3は、マスに分割される。各マスは、縦方向にはa〜fのアルファベットが割り振られ、横方向には1〜4の数字が割り振られている。この組合せをマス番号と称す。たとえば、マス番号a2には、『フリガナ』という文字情報が位置する。また、図2に示した帳票200内の文字列の各文字には固有の文字番号が割り振られる。
図4は、図2に示した帳票200内の各文字に割り振られた文字番号を示す説明図である。図4において、文字番号0〜20は一文字ごとに割り振られている。
図5は、図2に示した帳票200のレイアウト情報を示す説明図である。図5において、レイアウト情報500は、線や多角形によってあらわされる帳票200のレイアウトを特定する情報であり、図3に示したマスを用いて特定される。具体的には、たとえば、レイアウト情報500は、セルごとに、当該セルを構成するマスのマス番号、当該セルの頂点数、その頂点座標を含む情報である。たとえば、セルC1は、マスa1,b1,c1,d1,e1,f1によって構成される。また、セルC1の頂点数は4である。
図6は、図2に示した帳票200の文字情報を示す説明図である。図6において、文字情報600は、帳票200内の文字を特定する情報であり、図4に示した文字番号を用いて特定される。具体的には、たとえば、文字情報600は、文字ごとに、当該文字を特定する文字コード、当該文字が含まれるセルのセル番号、当該文字自身の座標、フォント、サイズを含む情報である。たとえば、文字番号0の文字の文字コードは『氏』であり、セルC1内に位置しており、フォントはゴシック、サイズは11である。
(共通論理構造データベースの説明)
つぎに、この発明の実施の形態にかかる帳票処理装置における共通論理構造データベース(DB)について説明する。共通論理構造DBには、論理的な構造化処理がおこなわれる帳票200に一般的な共通論理構造が格納される。具体的には、帳票を階層構造化する際の論理要素(タグともいう。以下、単に「要素」と称す。)とその意味、それら要素が具体的に帳票上で表現される文字列、および要素間の関係が記述される。より具体的には、共通論理構造テーブルと、文字列情報テーブルと、接続情報テーブルとを有する。
図7は、共通論理構造テーブルを示す説明図である。図7において、共通論理構造テーブル700は、要素ごとに、要素番号、代表文字列、属性、対応文字列、親要素番号とから構成される。要素番号とは、代表文字列を特定する固有の番号である。以下、「要素番号i(iは数字)の要素」を、「要素Ei」と称す。代表文字列とは、帳票200内の文字列の中でよく用いられる代表的な文字列である。
属性とは、代表文字列の帳票200内の性質または特徴をあらわしており、見出し要素とデータ要素を有する。見出し要素とは、セルの意味を特定する固定の文字列(たとえば、図2では『フリガナ』など)である。データ要素とは、セルに書き込まれる文字列(たとえば、図2では、『太郎』など)である。
また、対応文字列とは、要素の文字列として扱うことができる文字列であり、具体的には、代表文字列と同一文字列、または代表文字列と意味が類似する文字列である。同一の意味であっても帳票によっては表現が異なる文字列を代表文字列に類似する文字列として保持している。
逆に、対応文字列の中から選ばれた代表的な文字列が、代表文字列と言える。また、要素「姓データ」のように文字列が限定できない場合には、ワイルドカード「*」による文字種限定によって文字列を与えてもよい。また、親要素番号とは、当該要素の上位に位置する要素の要素番号である。最上位の要素0については、その上位に位置する要素はないため、「NULL」となる。
図8は、文字列情報テーブルを示す説明図である。図8において、文字列情報テーブル800は、各要素の対応文字列の出現頻度p1(i,j)を保持するテーブルである。文字列番号jとは、要素Ei内の各対応文字列に与えられる番号であり、ここでは0から始まる通番である。なお、要素Ei内の文字列番号jの対応文字列を便宜上、「対応文字列Mij」と表記する。
出現頻度p1(i,j)とは、要素Eiとして出現する対応文字列Mijの出現割合を示したものである。たとえば、要素E0の代表文字列「氏名」に対しては文字列番号0の対応文字列「お名前」と文字列番号1の「氏名」が存在し、学習による出現頻度p1(i,j)が「お名前」がp1(0,0)=30%、「氏名」がp1(0,1)=70%であれば、「0.3」,「0.7」と記述する。これは、真の要素の出現頻度そのものであり、文字列の出易さを示す。なお、すべてを等確率で与えたい場合には同じ数値を格納する。
また、文字列が省略される場合があれば、対応文字列Mijとして「NULL」およびその出現頻度を規定しておく。要素E0の代表文字列「氏名」に対しては文字列番号2が付与されている「NULL」の出現頻度p1(0,2)は、p1(0,2)=0%である。このように省略された対応文字列Mijを便宜上、「NULL文字列」と称す。
図9は、接続情報テーブルを示す説明図である。図9において、接続情報テーブル900とは、一対の要素間の相対位置関係を示す情報テーブルである。要素番号対とは、セルが隣接しあう2つの要素をあらわす要素番号の組合せである。
相対位置情報は、要素間の左右距離および上下距離であらわされる。左右距離とは、要素番号対の一方の要素により特定される文字列を含むセルを基準とした場合、当該セルから他方の要素により特定される文字列を含むセルまでの横方向のセル数である。たとえば、要素番号対の左側の要素を基準となる一方の要素とした場合、右方向が正、左方向が負となる。
同様に、上下距離とは、要素番号対の一方の要素により特定される文字列を含むセルを基準とした場合、当該セルから他方の要素により特定される文字列を含むセルまでの縦方向のセル数である。たとえば、要素番号対の左側の要素を基準となる一方の要素とした場合、上方向が負、下方向が正となる。
また、頻度は、要素番号対ごとに、左右距離および上下距離の組合せが発生する割合を示している。なお、要素E1には0.4(40%)のNULL文字列が存在するため、図9において、(a)〜(f)の頻度の合計は0.6(60%)となっている。このように、接続情報テーブル900は、親要素から見た場合の子要素の存在位置に関する分布を示すものである。
図10は、接続情報テーブル900の展開例を示す説明図である。図10において、親要素をE0、子要素をE1とする。頻度(b)で示したセルに親である要素E0が含まれているとすると、子の要素E1は、それぞれ頻度(a)〜(f)で示したセルに当該頻度で含まれることとなる。このように、要素対により両要素の相対位置が特定される。この相対位置により、子の要素の位置を限定することができる。また、上述した左右距離および上下距離におけるセル数の計数では、その経路によって計数されるセル数が異なることがある。
図11は、セル数の計算例を示す説明図である。図11中、矩形はセルである。また、要素ExのセルCxから要素EyのセルCyまでの経路を点線矢印であらわしている。計数されるセル数は、セルの越境回数の最小値とする。図11では、太線矢印で示した経路が最も越境回数が小さい(2回)ため、(左右距離,上下距離)=(1,1)として接続情報テーブル900に書き込まれる。
図12は、共通論理構造の要素間の関係を示した木構造を示す説明図である。この木構造1200は、図7に示した共通論理構造テーブル700における要素番号と親要素番号との関連付けをもとにして構成されている。木構造1200において上位階層は大見出しに相当し、下位階層に行くに従い小見出しとなり、最終的にデータに対応する要素となる。また、図12中、矢印は、図9の要素番号対をあらわしている。
(帳票処理装置の機能的構成)
つぎに、この発明の実施の形態にかかる帳票処理装置の機能的構成について説明する。図13は、この発明の実施の形態にかかる帳票処理装置の機能的構成を示すブロック図である。
図13において、帳票処理装置1300は、共通論理構造テーブル700(図7参照)、文字列情報テーブル800(図8参照)、接続情報テーブル900(図9参照)を含む共通論理構造DB1310と、単語候補抽出部1301と、単語出現数値化部1302と、単語関係数値化部1303と、単語評価部1304と、単語決定部1305と、から構成されている。
まず簡単に説明すると、帳票処理装置1300では、あらかじめ帳票200からレイアウト情報500と文字情報600とを抽出しておく。単語候補抽出部1301は、文字情報600から単語候補を抽出する機能を有する。単語出現数値化部1302は、単語候補の各要素から出現する割合(出現確率)を算出する機能を有する。単語関係数値化部1303は、各単語候補間の関係が成り立つ割合(遷移確率)を与える機能を有する。
単語評価部1304は、各単語候補がそれぞれの論理要素から出現する割合(評価値、具体的には事後確率)を算出する機能を有する。単語決定部1305は、評価値に基づいて、要素およびその単語候補を、帳票200における要素およびその文字列に決定する機能を有する。
共通論理構造DB1310は、具体的には、たとえば、図1に示したROM102,RAM103,HD105などの記録媒体によって、その機能を実現する。また、単語候補抽出部1301、単語出現数値化部1302、単語関係数値化部1303、単語評価部1304、および単語決定部1305は、具体的には、たとえば、図1に示したROM102,RAM103,HD105などの記録媒体に記録されているプログラムを、CPU101に実行させることによって、またはI/F109によって、その機能を実現する。
つぎに、この発明の実施の形態にかかる帳票処理装置1300による帳票処理手順について説明する。図14は、この発明の実施の形態にかかる帳票処理装置1300による帳票処理手順を示すフローチャートである。図14において、まず、処理対象となる帳票200を取得する(ステップS1401)。たとえば、紙帳票を画像入力してもよく、また、表計算ソフトで作成された非構造化電子文書を入力することとしてもよい。そして、取得された帳票200から上述したレイアウト情報および文字情報600を取得する(ステップS1402)。
このあと、単語候補抽出部1301による単語候補抽出処理(ステップS1403)、単語出現数値化部1302による単語出現数値化処理(ステップS1404)、単語関係数値化部1303による単語関係数値化処理(ステップS1405)、単語評価部1304による単語評価処理(ステップS1406)、単語決定部1305による単語決定処理(ステップS1407)を順次実行する。
そして、反復処理終了フラグ=1であるか否かを判断し(ステップS1408)、反復処理終了フラグ=1でない場合(ステップS1408:No)、ステップS1406に戻る。一方、反復処理終了フラグ=1である場合(ステップS1408:Yes)、一連の処理を終了する。以下、図13に示した帳票処理装置1300の各機能構成および図14に示した各機能構成の処理について具体的に説明する。
[単語候補抽出部1301の詳細説明]
まず、単語候補抽出部1301について説明する。単語候補抽出部1301では、各要素Eiに該当すると思われるすべての文字列を、共通論理構造データベースの文字列情報テーブル800に基づき単語候補として抽出し、単語候補テーブルを出力する。
具体的には、文字列は、文字情報600における各文字の座標を参照することにより抽出される。たとえば、帳票200の『フリガナ』という文字列は、「フ」と「リ」と「ガ」と「ナ」の組合せであるが、縦方向の座標値がほぼ同一で、横方向の座標値がほぼ一定間隔で揃っている場合、『フリガナ』という一つの単語として抽出される。このように文字情報600から抽出された文字列を「抽出文字列」と称す。
図15は、単語候補テーブルを示す説明図である。単語候補テーブル1500は、要素と抽出文字列との関係をあらわしている。具体的には、単語候補テーブル1500は、要素番号iと、文字列番号jと、単語候補番号kと、抽出文字列と、文字数と、文字番号と、から構成されている。単語候補番号kとは、要素番号iの文字列番号jの対応文字列との対比において、単語候補となった抽出文字列に与えられる番号であり、ここでは0から始まる通番である。また、文字数とは、抽出文字列の文字数である。
単語候補抽出部1301は、要素番号iおよび文字列番号jにより、文字列情報テーブル800(図8参照)から対応文字列Mijを読み出す。たとえば、単語候補テーブル1500の1行目では、要素番号0、文字列番号1であるため、要素E0の対応文字列M01(『氏名』)が読み出されることとなる。そして、抽出文字列『氏名』は、読み出された対応文字列M01(『氏名』)と完全一致するため、要素E0の単語候補となる。ここでは、単語候補番号kとしてk=0を割り振る。
また、対応文字列『氏名』と一部一致する抽出文字列も、要素E0の単語候補となる。たとえば、単語候補テーブル1500の2行目において、抽出文字列『(名)』は要素E0の対応文字列M01(『氏名』)と文字「名」が一致するため、要素E0の単語候補となる。ここでは、単語候補番号kとしてk=1を割り振る。
すなわち、単語候補テーブル1500において、抽出文字列『氏名』,『(名)』が要素E0の対応文字列M01(『氏名』)の単語候補として抽出され、抽出文字列『(姓)』が要素E1の対応文字列M10(『姓』)の単語候補として抽出され、抽出文字列『氏名』,『(名)』が要素E2の対応文字列M20の単語候補として抽出され、抽出文字列『氏名』,『フジ』,『タロウ』,『富士』,『太郎』が要素E3の対応文字列M30の単語候補として抽出される。以降、要素Ei内の単語候補として抽出された単語候補番号kの抽出文字列を、「単語候補Wk」と称す。
[単語候補抽出処理手順]
つぎに、図14に示した単語候補抽出部1301による単語候補抽出処理手順について具体的に説明する。図16は、図14に示した単語候補抽出部1301による単語候補抽出処理手順を示すフローチャートである。
図16において、文字情報600の座標値などを用いて、帳票200に存在するすべての文字列を抽出する(ステップS1601)。ここで、抽出された文字列を抽出文字列Stと表記する。抽出文字列Stはt番目の文字列である。tをテキスト番号と称す。テキスト番号tはt=1〜tmaxである。tmaxは抽出文字列Stの最大数である。
つぎに、要素番号i=0、文字列番号j=0とし(ステップS1602)、対応文字列Mijを読み出す(ステップS1603)。そして、t=1とする(ステップS1604)。そして、対応文字列Mij内の文字と一致する文字が抽出文字列Stに存在するか否かを判断する(ステップS1605)。
存在しない場合(ステップS1605:No)、ステップS1607に移行する。一方、存在する場合(ステップS1605:Yes)、抽出文字列Stを単語候補Wkに決定して(ステップS1606)、ステップS1607に移行する。
ステップS1607では、抽出文字列数tをインクリメントし、t>tmaxであるか否かを判断する(ステップS1608)。t>tmaxでない場合(ステップS1608:No)、ステップS1605に戻る。一方、t>tmaxである場合(ステップS1608:Yes)、文字列番号jをインクリメントする(ステップS1609)。
そして、j>Jiか否かを判断する(ステップS1610)。ここで、Jiとは、要素Eiにおける対応文字列数である。j>Jiでない場合(ステップS1610:No)、ステップS1603に戻る。一方、j>Jiである場合(ステップS1610:Yes)、要素番号iをインクリメントする(ステップS1611)。
そして、i>Iであるか否かを判断する(ステップS1612)。ここで、Iとは要素Eiの要素数である。i>Iでない場合(ステップS1612:No)、ステップS1603に戻る。一方、i>Iである場合(ステップS1612:Yes)、単語出現数値化処理(ステップS1404)に移行する。これにより、一連の単語候補抽出処理を終了する。このように、単語候補抽出部1301によれば、処理対象となる帳票200内の文字列を単語候補として自動抽出することができる。
[単語出現数値化部1302の詳細説明]
つぎに、単語出現数値化部1302について説明する。単語出現数値化部1302では、要素Ei、文字列番号j、単語候補Wkのすべてに対して、各単語候補Wkの出現確率p3(i,j,k)を算出する。具体的には、まず、単語候補テーブル1500から要素番号iおよび文字列番号jの組合せを読み込み、その要素番号iおよび文字列番号jの組合せを手掛かりとして、その対応文字列の出現頻度p1(i,j)を文字列情報テーブル800から抽出する。
そして、要素番号iおよび文字列番号jにより特定される対応文字列とその単語候補Wkとのマッチングの度合い(一致度)によって、単語候補Wkの確からしさを算出する。すなわち、対応文字列の文字数をm0、対応文字列および抽出文字列の一致文字数をm1とすると、マッチングの度合いをあらわす観測確率p2(i,j,k)は、下記式(1)であらわされる。
p2(i,j,k)=m1/m0・・・(1)
たとえば、単語候補テーブル1500の1行目において、要素番号0、文字列番号1により特定される要素E0の対応文字列『氏名』(図8参照)および抽出文字列『氏名』では、対応文字列M01のすべて(2文字)の文字「氏」,「名」が一致するため、2文字中2文字が一致することとなり、p2(0,1,0)=100%となる。また、単語候補テーブル1500の2行目において、抽出文字列『(名)』は要素E0の対応文字列『氏名』の文字「名」が一致するため、2文字中1文字が一致することとなり、p2(0,1,1)=50%となる。
そして、出現頻度p1(i,j)と観測確率p2(i,j,k)を用いて、各単語候補Wkの出現確率p3(i,j,k)を下記式(2)により算出する。
p3(i,j,k)=p1(i,j)×p2(i,j,k)・・・(2)
また、単語出現数値化部1302では、すべての要素EiにNULL文字列の出現確率p3(i,j,k)を単語候補テーブル1500に追加する。この場合、各要素Eiにおいて、出現確率p3(i,j,k)の総計が1(100%)とならないため、出現確率p3(i,j,k)の総計が1となるように規格化する。規格化された出現確率p3(i,j,k)を規格化出現確率p3’(i,j,k)と表記する。このように、単語出現数値化部1302では、単語候補テーブル1500にあらたな情報(出現確率p3(i,j,k)、規格化出現確率p3’(i,j,k)など)が追加されて出力される。
図17は、単語出現数値化部1302から出力される単語候補テーブルを示す説明図である。以降、図15に示した単語候補抽出部1301から得られる単語候補テーブルを「第1の単語候補テーブル1500」と表記し、図17に示した単語出現数値化部1302から得られる単語候補テーブルを「第2の単語候補テーブル1700」と表記する。
また、図18は、要素Eiごとの単語候補Wkの規格化出現確率p3’(i,j,k)を模式化した説明図である。単語候補Wkとなる各抽出文字列を囲む矩形の枠の太さは、規格化出現確率p3’(i,j,k)の高さをあらわしている。
なお、単語出現数値化部1302のより具体的な算出方法を説明する。算出方法として、要素番号iの文字列番号jの対応文字列Mijには出現頻度p1(i,j)が共通論理
構造DB1310に格納されており、出現頻度p1(i,j)を下記式(3)で表現する。
式(3)において、Cは論理要素の数を次元数としたベクトルである。また、Tは対応文字列Mijの数を次元数としたベクトルである。eは正規直交基底を示し、eiはi番
目の要素が1でそれ以外が0の要素を示す正規直交基底であり、要素iを表現するものとする。
また、Mijを各単語候補の正しい文字列を示す隠れ変数としたときにそれぞれの単語候補がこの文字列を使用したときに帳票上で表現される単語候補である確率を下記式(4)で定義する。
これらはすべての単語候補Wkに対して確率1とみなす。なお、ここでの記法としてP(X|Y)は「Yで条件付けたときのXの確率」をあらわす。
また、上述した観測確率p2(i,j,k)は、式(4)を掛け合わせた下記式(5)により算出する。
この式(3)と式(5)とを掛け合わせることで、出現確率p3(i,j,k)を算出する。出現確率p3(i,j,k)は、下記式(6)で表現される。
ここで、式(6)において、Oは観測変数ベクトルで抽出した単語候補それ自身を示す。なお、NULL文字列の出現確率については、p3null(i)として、文字列情報
テーブル800から読み込み、直接、規格化出現確率p3’(i,j,k)とする。そして、上述したように、NULL文字列以外の単語候補Wkについても規格化すればよい。
[単語出現数値化処理手順]
つぎに、図14に示した単語出現数値化部1302による単語出現数値化処理手順について具体的に説明する。図19は、図14に示した単語出現数値化部1302による単語出現数値化処理手順を示すフローチャートである。
図19において、まず、要素番号i=0とし(ステップS1901)、文字列番号j=0とする(ステップS1902)。そして、要素番号i,文字列番号jに対する出現頻度p1(i,j)を文字列情報テーブル800から読み込む(ステップS1903)。
そして、単語候補番号k=0とし(ステップS1904)、要素番号i、文字列番号jの単語候補Wkにおける観測確率p2(i,j,k)を上記式(1)を用いて算出する(ステップS1905)。
このあと、出現頻度p1(i,j)と観測確率p2(i,j,k)とを掛け合わせることにより、要素番号i、文字列番号jの単語候補Wkにおける出現確率p3(i,j,k)を算出する(ステップS1906)。そして、単語候補番号kをインクリメントし(ステップS1907)、単語候補番号kがk>Kijか否かを判断する(ステップS1908)。ここで、Kijとは、要素番号i、文字列番号jの単語候補数である。
k>Kijでない場合(ステップS1908:No)、ステップS1905に戻る。一方、k>Kijである場合(ステップS1908:Yes)、文字列番号jをインクリメントする(ステップS1909)。
そして、j>Jiであるか否かを判断する(ステップS1910)。ここで、Jiとは、要素Eiにおける対応文字列数である。j>Jiでない場合(ステップS1910:No)、ステップS1903に戻る。一方、j>Jiである場合(ステップS1910:Yes)、要素EiがNULLとなる出現頻度p3null(i)を文字列情報テーブル800から読み込む(ステップS1911)。
このあと、要素番号iをインクリメントして(ステップS1912)、i>Iであるか否かを判断する(ステップS1913)。ここで、Iとは要素Eiの要素数である。i>Iでない場合(ステップS1913:No)、ステップS1902に戻る。一方、i>Iである場合(ステップS1913:Yes)、単語関係数値化処理(ステップS1405)に移行する。これにより、一連の単語出現数値化処理を終了する。このように、単語出現数値化部1302によれば、単語候補Wkがその要素Ei内において出現する頻度を数値化することができる。
[単語関係数値化部1303の詳細説明]
つぎに、単語関係数値化部1303について説明する。単語関係数値化部1303では、図9に示した接続情報テーブル900を用いて、各要素Eiで任意に選択した単語候補どうしの組み合わせの出現確率または親要素の単語候補が確定した場合の子要素の単語候補の出現確率(条件付確率)を算出する。
具体的には、接続関係のある上位の要素を親要素Ei1(i1は数字)、下位の要素を子要素Ei2(i2は数字で、i2≠i1)とすると、親子関係となる接続された2つの要素Ei1,Ei2から、親要素Ei1の単語候補Wk(以下、「単語候補Wki1」と称す。)が存在した場合の子要素Ei2の単語候補Wk(以下、「単語候補Wki2」と称す。)の出現確率を算出する。この出現確率は、図11に示したセルの計数値に基づいて算出することができる。
具体的には、2つの単語候補Wki1,Wki2が属するセルの相対位置関係をあらわす遷移確率をp4{x,y}(または単にp4)と表記する。xは親要素Ei1が属するセルの位置を基準とした場合に子要素Ei2が属するセルの上下方向における相対位置(下が正、上が負)であり、yは親要素Ei1が属するセルの位置を基準とした場合に子要素Ei2が属するセルの左右方向における相対位置(右が正、左が負)である。
たとえば、2つの単語候補Wki1,Wki2が同じ高さのセルに存在し、親要素Ei1の単語候補Wki1が属するセルの1つ右側のセルに子要素Ei2の単語候補Wki2が属するとすると、遷移確率はp4{0,1}と表現され、同じセル内に存在する場合の遷移確率はp4{0,0}と表現される。この遷移確率p4{x,y}は接続情報テーブル900に記述された頻度から算出することができる。ここで、単語関係数値化部1303による処理結果をまとめた接続候補テーブルについて説明する。
図20は、親要素Ei1=E0と子要素Ei2=E1との接続関係を示す接続候補テーブルを示す説明図である。図20において、接続候補テーブル2000では、親要素番号i1、文字列番号j1、単語候補番号k1により、単語候補Wk1として選ばれた抽出文字列が特定される。また、図20において、子要素番号i2、文字列番号j2、単語候補番号k2により、単語候補Wk2として選ばれた抽出文字列が特定される。
つぎに、接続候補テーブル2000において特定された親要素Ei1の単語候補Wk1と子要素Ei2の単語候補Wk2との相対位置情報に合致する相対位置情報を接続情報テーブル900から特定し、その相対位置情報の接続頻度を、接続情報テーブル900から読み出す。
接続候補テーブル2000の1行目に着目すると、たとえば、{Ei1,j1,k1}={E0,1,0}の場合、単語候補Wk1として選ばれた抽出文字列は『氏名』となる(図15または図17を参照。)。また、{Ei2,j2,k2}={E0,0,0}の場合、単語候補Wk2として選ばれた抽出文字列は『(姓)』となる(図15または図17を参照。)。
一方、親要素E0と子要素E1との組み合わせの場合、図9に示した接続情報テーブル900では6通りの相対位置情報が保持されている。図2の帳票200では、単語候補Wk1の抽出文字列『氏名』はセルC1に属しており、単語候補Wk2の抽出文字列『(姓)』はセルC3に属している。
したがって、セルC3はセルC1から右から1つ目のセルであるため左右距離hはh=1、縦方向は同一であるため上下距離vはv=0となり、{h,v}={1,0}となる接続頻度0.30を読み出す。この接続頻度が遷移確率p4(i1,j1,k1,i2,
j2,k2)である。単に、遷移確率p4と表記することもある。
遷移確率p4は、下記式(7)で与えることが可能である。なお、i’はiの親要素を
示すものとする。
図21は、親要素E0の単語候補と子要素E1となりうる単語候補との遷移確率p4の高さを模式的に示した説明図である。親要素E0の単語候補として選ばれた抽出文字列は『氏名』,『(名)』,NULLであり、子要素E1の単語候補として選ばれた抽出文字列は『(姓)』,NULLである。矢印は親子関係をあらわしており、始点側が親要素E0の単語候補であり、終点側が子要素E1の単語候補である。また、矢印の太さが接続頻度(遷移確率p4)の高さをあらわしている。
また同様に、図22は、親要素Ei1=E1と子要素Ei2=E2との接続関係を示す接続候補テーブルを示す説明図である。また、図23は、親要素E1の単語候補と子要素E2となりうる単語候補との遷移確率p4の高さを模式的に示した説明図である。
また、セルの内部で複数の単語候補が生じた場合には、重みを加えて規格化する。たとえば、親要素Ei1から見て対象領域に存在する子要素Ei2となりうる単語候補Wk2に対して、親要素Ei1の単語候補Wk1の外接矩形との距離を測り、その距離に応じて重み付けをおこなう。
図24は、遷移頻度の重み付けを示す説明図である。図24において、白色領域については、重み付けはされない。一方、灰色領域が重み付けの対象領域として設定される。ここでは、重み付けの関数は、指数関数を用いている。姓データ『富士』と『太郎』が存在した場合、このセルC3に対するある親要素Ei1の単語候補からの遷移頻度を遷移確率p4=0.3とし、『(姓)』からの距離をそれぞれd1,d2とする。
セルC3に対するある親要素Ei1の単語候補と姓データ『富士』との重み付け後の遷移確率p4’は下記式(8)によってあらわされる。
p4’=p4×w1/(w1+w2)=0.3×w1/(w1+w2)・・・(8)
同様に、セルC3に対するある親要素Ei1の単語候補と姓データ『太郎』との重み付け後の遷移確率p4’は下記式(9)によってあらわされる。
p4’=p4×w2/(w1+w2)=0.3×w2/(w1+w2)・・・(9)
この重み付け後の遷移確率p4’を規格化遷移確率p4’と称す。なお、上記式(8),(9)において、w1は距離d1に関する重み、w2は距離d2に関する重みであり、下記式(10),(11)によってあらわされる。
また、NULL文字列が親要素Ei1である場合には、その要素の親要素の遷移確率p4を用いる。たとえば、図20に示した例では、親要素E0から子要素E1の場合には、親要素E0のNULL文字列からの遷移確率p4はすべての子要素Ei2の単語候補Wk2に対してp4=0である。
一方、図22に示した親要素E1から子要素E3の例では、親要素E1のNULL文字列からの遷移確率p4が存在する。この場合、親要素E1の親要素である要素E0から子要素E3までの遷移確率p4を、接続情報テーブル900を用いて求める。子要素E3の単語候補Wk2として選ばれた抽出文字列(『氏名』,『フジ』,『タロウ』,『富士』,『太郎』)は,親要素E0の単語候補として選ばれた抽出文字列『氏名』から見ると、遷移確率p4={0.1、0.3、0.3、0.3、0.3}の位置に存在する。
ただし、このうち『氏名』は図24の対象領域から除外できるので、『氏名』に関する遷移確率p4=0.1をp4=0とする。残りの抽出文字列(『フジ』,『タロウ』,『富士』,『太郎』)については、セルは違うけれども『氏名』が属するセルC1からみて右に1進んだセルC3内の位置に存在するので、この4つで遷移確率p4=0.3を規格化する。
図24に示した重み付けの操作で、各遷移確率p4はそれぞれ、p4={0.0、0.1、0.05、0.1、0.05}にそれぞれなったとする。同様の操作を要素E0の単語候補の抽出文字列『名』に対しておこなうと、p4={0.0、0.0、0.1、0.15、0.15}であり、規格化して、p4’={0.0、0.0、0.1、0.05、0.1}となる。この2つの数値に対して、親要素E0の各要素から要素E1のNULL文字列への遷移確率の比で和をとればp4’={0、0.08、0.06、0.09、0.06}となる。
[単語関係数値化処理手順]
つぎに、図14に示した単語関係数値化部1303による単語関係数値化処理手順について具体的に説明する。図25は、図14に示した単語関係数値化部1303による単語関係数値化処理手順を示すフローチャートである。
図25において、まず、親要素番号i1をi1=0とし(ステップS2501)、その文字列番号j1をj1=0とし(ステップS2502)、単語候補番号k1=0とする(ステップS2503)。そして、親要素Ei1の子要素Ei2の子要素番号i2を読み込む(ステップS2504)。そして、この子要素Ei2の文字列番号j2をj2=0とし(ステップS2505)、子要素Ei2の単語候補番号k2をk2=0とする(ステップS2506)。
そして、親要素Ei1から子要素Ei2までの上下距離cxを計数する(ステップS2507)。同様に、親要素Ei1から子要素Ei2までの左右距離cyを計数する(ステップS2508)。そして、距離(cx,cy)で親要素Ei1および子要素Ei2が存在する遷移確率p4を接続情報テーブル900から読み出す(ステップS2509)。
そして、読み出された遷移確率p4を規格化して(ステップS2510)、規格化遷移確率p4’を得る。このあと、子要素Ei2の単語候補番号k2をインクリメントし(ステップS2511)、単語候補番号k2がk2>K2であるか否かを判断する(ステップS2512)。ここで、K2とは、子要素Ei2の文字列番号j2の単語候補数である。
k2>K2でない場合(ステップS2512:No)、ステップS2507に戻る。一方、k2>K2である場合(ステップS2512:Yes)、子要素Ei2の文字列番号j2をインクリメントする(ステップS2513)。そして、子要素Ei2の文字列番号j2がj2>J2であるか否かを判断する(ステップS2514)。ここで、J2とは、子要素Ei2の対応文字列数である。
j2>J2でない場合(ステップS2514:No)、ステップS2506に戻る。一方、j2>J2である場合(ステップS2514:Yes)、子要素番号i2をインクリメントし(ステップS2515)、i2>I2であるか否かを判断する(ステップS2516)。ここで、I2とは、子要素Ei2の要素数である。
i2>I2でない場合(ステップS2516:No)、ステップS2505に戻る。一方、i2>I2である場合(ステップS2516:Yes)、親要素Ei1の単語候補番号k1をインクリメントし(ステップS2517)、単語候補番号k1がk1>K1であるか否かを判断する(ステップS2518)。ここで、K1とは、親要素Ei1の文字列番号j1の単語候補数である。
k1>K1でない場合(ステップS2518:No)、ステップS2504に戻る。一方、k1>K1である場合(ステップS2518:Yes)、親要素Ei1の文字列番号j1をインクリメントし(ステップS2519)、文字列番号j1がj1>J1であるか否かを判断する(ステップS2520)。ここで、J1とは、親要素Ei1の対応文字列数である。
j1>J1でない場合(ステップS2520:No)、ステップS2503に戻る。一方、j1>J1である場合(ステップS2520:Yes)、親要素Ei1の要素番号i1をインクリメントし(ステップS2521)、親要素番号i1がi1>I1であるか否かを判断する(ステップS2522)。ここで、I1とは、親要素Ei1の要素数である
。
i1>I1でない場合(ステップS2522:No)、ステップS2502に戻る。一方、i1>I1である場合(ステップS2522:Yes)、単語評価処理(ステップS1406)に移行する。これにより、一連の単語関係数値化処理を終了する。このように、単語関係数値化部1303によれば、親要素Ei1の単語候補と子要素Ei2の単語候補とが配置において関連しあう頻度を数値化することができる。
[単語評価部1304の詳細説明]
つぎに、単語評価部1304について説明する。単語評価部1304では、単語の出現確率と、単語関係に関する候補間の関係とが考慮され、各要素Eiにおける単語候補の確率が算出される。具体的には、たとえば、確率伝搬法(Belief propagation)を適用することができる。
単語候補については、単語関係数値化部1303によって得られた規格化遷移確率p4’に従い、階層構造に妥当な組み合わせを構成できる配置にある単語候補どうしであれば、高い確率が与えられ、そうでなければ低い確率が与えられる。
類似手法として、隠れマルコフモデル(Hidden Markov model)が存在する。なお、計算方法については多くの例が存在し、任意の方法によって計算することができる。
ここで、単語評価部1304について具体的に説明する。単語評価部1304では、単語出現数値化部1302によって得られた規格化出現確率p3’と単語関係数値化部1303によって得られた規格化遷移確率p4’に従って、各要素Eiのそれぞれの単語候補Wkがこの要素Eiを示す帳票200上の文字列である事後確率pp1を算出する。
図26は、単語評価部1304によって得られる第3の単語候補テーブルを示す説明図である。第3の単語候補テーブル2600は、第2の単語候補テーブル1700にさらに要素Eiごとに事後確率pp1を追加した単語候補テーブルである。
事後確率pp1の算出手法として、木構造1200の共通論理構造を確率ネットワークとみなして計算をおこなう。ここでの例として、有向グラフの場合の計算方法を提示するが、無向グラフによる場合の計算方法もすでに確立されており、これらは片側マルコフと両側マルコフの等価性から、与える確率表現が異なるに過ぎないので割愛する。具体的には、上述した要素間の規格化遷移確率p4’がポテンシャル関数に変化したものによって与えることができる。
すなわち、単語評価部1304では、共通論理構造の要素と接続の関係に従い生成されたグラフに対して、文字列間の関係性を考慮した数値化をおこなう。これは、上記で与えられたグラフに対して、確率的な伝搬を施すことによって実施することができる。
木構造1200の有向グラフの計算方法として、3つのプロセスが必要となる。上位階層である親要素Ei1から計算をおこなうフォワードプロセス(forward process)、下位階層から親要素Ei1への計算をおこなうバックワードプロセス(backward process)、そして、最後に事後確率の算出プロセスである。
ここで、まず、フォワードプロセスについて説明する。フォワードプロセスでは、下位(子)の要素Ei2の単語候補Wi2とした場合、当該下位の要素Ei2に対するすべて
の上位(親)の要素Ei1の単語候補の確からしさをあらわす確率pf(i,j,k)を
算出する。確率pf(i,j,k)は下記式(12)であらわされる。以後、単に確率p
fと表記する場合もある。
ただし、式(12)中、i’は要素Eiの親要素を示し、j’は親要素i’の文字列番
号を示し、k’は文字列番号j’によって抽出された単語候補番号を示す。また、{Oi}-は文字列iから見た場合の上位階層でのすべての単語候補をあらわす。
つぎに、バックワードプロセスについて説明する。バックワードプロセスでは、上位(親)の要素Ei1の単語候補Wi1とした場合、当該上位の要素Ei2に対するすべての
下位(子)の要素Ei2の単語候補の確からしさをあらわす確率pb(i,j,k)を算
出する。確率pb(i,j,k)は下記式(13)であらわされる。以後、単に確率pb
と表記する場合もある。
ここで、式(13)中、i’は要素Eiの子要素を示し、j’は子要素i’の文字列番
号を示し、k’は文字列番号j’によって抽出された単語候補番号を示す。
つぎに、事後確率算出プロセスについて説明する。事後確率算出プロセスでは、要素Eiの対応文字列Mijの単語候補Wkに対する事後確率pp1(i,j,k)を算出する
。以後、単にpp1と表記する場合もある。事後確率pp1(i,j,k)は下記式(14)〜(17)であらわされる。
式(14)〜(17)中、i’は要素Eiの親要素を示し、j’は親要素i’の文字列
番号を示し、k’は文字列番号j’によって抽出された単語候補番号を示す。{Oi}を
すべての論理要素に対する観測であるとする。これらのすべてのプロセスが、すべての要素Eiの対応文字列Mijの単語候補Wkに対して実行される。
事後確率算出プロセスにより事後確率pp1を算出するということは、ある親要素Ei1が存在し、その子要素Ei2に複数の単語候補Wk2が存在した場合、これらの中から確からしい単語候補Wk2を求める作業に相当する。
上述した3つのプロセスのうち、フォワードプロセスは上位の階層から計算が実行され、上位の階層で得られた確率pfを用いて現階層の確率pfが算出される。この処理は、再帰処理によって実現することができる。逆に、バックワードプロセスでは、下位の階層で求められた確率pbを用いて現階層の確率pbを算出する。この処理も同様に再帰処理によって実現することができる。以下に具体例を示す。
図27は、フォワードプロセスの計算例を示す説明図である。図27において、親要素E0のある単語候補が出現した場合に子要素E1のある単語候補が出現する確率pfxを、下記式(18)に示す。
pfx=(親要素E0のp3’)×(親要素E0の子要素E1に対するp4’)×(親要素E0のp3’)・・・(18)
図27中、一つ例を挙げる。親要素E0の単語候補が『氏名』であり、子要素E1の単語候補が『(姓)』である場合、式(18)に代入すると、
pf1=0.67×0.3×0.6=0.12
となる。
また、親要素E0の単語候補が『(名)』であり、子要素E1の単語候補が『(姓)』である場合、式(18)に代入すると、
pf2=0.33×0.0×0.6=0
となる。
また、親要素E0の単語候補がNULLであり、子要素E1の単語候補が『(姓)』である場合、式(18)に代入すると、
pf3=0.0×0.8×0.6=0
となる。
これら親要素E0の単語候補『氏名』、『(名)』、NULLから子要素E1の単語候補『(姓)』へ伝搬する確率pf1〜pf3の合計が確率pf(=0.12+0+0=0.12)となる。
つぎに、親要素E0との関係で子要素であった要素E1は、要素E3との関係では親要素となる。ここで、親要素E1のある単語候補から子要素E3のある単語候補へ伝搬する確率pfyを、下記式(19)に示す。
pfy=(親要素E1のpf)×(子親要素E3のp3’)×(子要素E3の親要素E1に対するp4’)・・・(19)
となる。
図27中、一つ例を挙げる。親要素E1の単語候補が『(姓)』であり、子要素E3の単語候補が『富士』である場合、式(19)に代入すると、
pf1=0.12×0.2×0.18=0.00432
となる。
また、親要素E1の単語候補がNULLであり、子要素E3の単語候補が『富士』である場合、式(19)に代入すると、
pf2=0.1204×0.09×0.18=0.00195
となる。
これら親要素E1の単語候補『(姓)』、NULLから子要素E1の単語候補『富士』へ伝搬する確率pf1,pf2の合計が確率pf(=0.00432+0.00195=0.00627)となる。
図28は、バックワードプロセスの計算例を示す説明図である。図28において、子要素E3のある単語候補から親要素E1のある単語候補へ伝搬する確率pbxを、下記式(20)に示す。
pbx=(子要素E3の親要素E1に対するp4’)×(子要素E3のp3’)×(親要素E1のp3’)・・・(20)
図28中、一つ例を挙げる。子要素E3の単語候補が『氏名』であり、親要素E1の単語候補が『(姓)』である場合、式(20)に代入すると、
pb1=0.18×0.0×0.6=0
となる。
また、子要素E3の単語候補が『フジ』であり、親要素E1の単語候補が『(姓)』である場合、式(20)に代入すると、
pb2=0.18×0.0×0.6=0
となる。
また、子要素E3の単語候補が『タロウ』であり、親要素E1の単語候補が『(姓)』である場合、式(20)に代入すると、
pb3=0.18×0.0×0.6=0
となる。
また、子要素E3の単語候補が『富士』であり、親要素E1の単語候補が『(姓)』である場合、式(20)に代入すると、
pb4=0.18×0.2×0.6=0.0216
となる。
また、子要素E3の単語候補が『太郎』であり、親要素E1の単語候補が『(姓)』である場合、式(20)に代入すると、
pb5=0.18×0.1×0.6=0.0108
となる。
また、子要素E3の単語候補がNULLであり、親要素E1の単語候補が『(姓)』である場合、式(20)に代入すると、
pb6=0.1×0.1×0.6=0.006
となる。
これら子要素E3の単語候補『氏名』〜NULLから親要素E1の単語候補『(姓)』へ伝搬する確率pb1〜pb6の合計が確率pb(=0+0+0+0.0216+0.0108+0.006=0.0384)となる。
つぎに、子要素E3との関係で親要素であった要素E1は、要素E0との関係では子要素となる。ここで、子要素E1のある単語候補から親要素E0のある単語候補へ伝搬する確率pbyを、下記式(21)に示す。
pby=(子要素E1のpb)×(親要素E0の子要素E1に対するp4’)×(親要素E0のp3’)・・・(21)
図28中、一つ例を挙げる。子要素E1の単語候補が『(姓)』であり、親要素E0の単語候補が『氏名』である場合、式(21)に代入すると、
pb1=0.0384×0.3×0.67=0.00771
となる。
また、子要素E1の単語候補がNULLであり、親要素E0の単語候補が『氏名』である場合、式(21)に代入すると、
pb2=0.0249×0.4×0.67=0.00667
となる。
これら子要素E1の単語候補『(姓)』、NULLから親要素E0の単語候補『氏名』へ伝搬する確率pb1、pb2の合計が確率pb(=0.00771+0.00667=0.0144)となる。
図29は、事後確率算出プロセスの計算例を示す説明図である。図29において、上段の文字列『氏名』,『(名)』,NULLが要素E0の単語候補であり、中段の文字列『(姓)』,NULLが要素E1の単語候補であり、下段の文字列『氏名』〜NULLが要素E3の単語候補である。
要素E0の事後確率は、図28に示したバックワードプロセスで得られた確率pbを規格化した確率である。要素E0の各単語候補『氏名』,『(名)』,NULLの確率pbは、それぞれ0.0144、0.000822、0.0であり、その合計は0.015222である。したがって、単語候補『氏名』の事後確率pp1は、要素E0の各単語候補『氏名』,『(名)』,NULLの確率pbで規格化すると、
pp1=0.0144/0.015222=94.6%
となる。
同様に、要素E0の単語候補『(名)』の事後確率pp1は、要素E0の各単語候補『氏名』,『(名)』,NULLの確率pbで規格化すると、
pp1=0.000822/(0.0144+0.000822+0.0)=5.4%
となる。
同様に、要素E0のNULL文字列の事後確率pp1は、要素E0の各単語候補『氏名』,『(名)』,NULLの確率pbで規格化すると、
pp1=0.0/(0.0144+0.00822+0.0)=0%
となる。
要素E1の事後確率も、図28に示したバックワードプロセスで得られた確率pbを規格化した確率である。子要素E1の単語候補が『(姓)』であり、親要素E0の単語候補が『氏名』である場合、式(21)に代入すると、
pb1=0.0384×0.3×0.67=0.00771
となる。
また、子要素E1の単語候補がNULLであり、親要素E0の単語候補が『氏名』である場合、式(21)に代入すると、
pb2=0.0249×0.4×0.67=0.00667
となる。
子要素E1の単語候補が『(姓)』であり、親要素E0の単語候補が『(名)』である場合、式(21)に代入すると、
pb3=0.0384×0.0×0.33=0
となる。
また、子要素E1の単語候補がNULLであり、親要素E0の単語候補が『(名)』である場合、式(21)に代入すると、
pb4=0.0249×0.1×0.33=0.00082
となる。
子要素E1の単語候補が『(姓)』であり、親要素E0の単語候補がNULLである場合、式(21)に代入すると、
pb5=0.0384×0.8×0.0=0
となる。
また、子要素E1の単語候補がNULLであり、親要素E0の単語候補がNULLである場合、式(21)に代入すると、
pb6=0.0249×0.2×0.0=0
となる。
要素E1の単語候補『(姓)』の事後確率pp1は、その確率pb1を確率pb1〜pb6で規格化すると、
pp1
=(pb1+pb3+pb5)/(pb1+pb2+pb3+pb4+pb5+pb6)
=0.00771/0.00771+0.00667+0+0.00082+0+0)
=0.00771/0.0152
=51%
となる。
同様に、要素E0の単語候補『氏名』に対する要素E1のNULL文字列の事後確率pp1は、その確率pb1を確率pb1〜pb6で規格化すると、
pp1
=(pb2+pb4+pb6)/(pb1+pb2+pb3+pb4+pb5+pb6)
=(0.00667+0.00082)/0.00771+0.00667+0+0.00082+0+0)
=0.00749/0.0152
=49%
となる。
要素E3の事後確率は、図27に示したフォワードプロセスで得られた確率pfを規格化した確率である。要素E3の各単語候補『氏名』〜NULLの確率pfは、それぞれ0.0、0.00173、0.00130、0.00627、0.00346、0.00240であり、その合計は0.01516である。したがって、要素E3の単語候補『氏名』の事後確率pp1は、要素E3の各単語候補『氏名』〜NULLの確率pfで規格化すると、
pp1=0.0/0.01516=0%
となる。
同様に、要素E3の単語候補『フジ』の事後確率pp1は、要素E3の各単語候補『氏名』〜NULLの確率pfで規格化すると、
pp1=0.00173/0.01516=12%
となる。
同様に、要素E3の単語候補『タロウ』の事後確率pp1は、要素E3の各単語候補『氏名』〜NULLの確率pfで規格化すると、
pp1=0.00130/0.01516=9.1%
となる。
同様に、要素E3の単語候補『富士』の事後確率pp1は、要素E3の各単語候補『氏名』〜NULLの確率pfで規格化すると、
pp1=0.00627/0.01516=41.2%
となる。
同様に、要素E3の単語候補『太郎』の事後確率pp1は、要素E3の各単語候補『氏名』〜NULLの確率pfで規格化すると、
pp1=0.00346/0.01516=22.4%
となる。
同様に、要素E3のNULL文字列の事後確率pp1は、要素E3の各単語候補『氏名』〜NULLの確率pfで規格化すると、
pp1=0.00240/0.01516=15.3%
となる。
この結果、要素E0では、単語候補『氏名』は事後確率pp1=94.6%で存在し、単語候補『(名)』は事後確率pp1=5.4%で存在する。また、要素E1では、単語候補『(姓)』は事後確率pp1=51%で存在し、NULL文字列は事後確率pp1=49%で存在する。これは、単語候補『(姓)』が出現している確率が、出現していない確率を上回っていることを示す。また、要素E3では、単語候補となる姓データは、『富士』、『太郎』、NULL文字列、『フジ』、『タロウ』の順に確率が高い。
[単語評価処理手順]
つぎに、図14に示した単語評価部1304による単語評価処理手順について具体的に説明する。図30は、図14に示した単語評価部1304による単語評価処理手順を示すフローチャートである。
図30において、まず、確定テーブル番号qをq=0とする(ステップS3001)。確定テーブル番号qについては後述する。つぎに、フォワードプロセス(ステップS3002)、バックワードプロセス(ステップS3003)、事後確率算出プロセス(ステップS3004)を実行して単語決定処理(ステップS1407)に移行することで、一連の単語評価処理を終了する。
[フォワードプロセスの処理手順]
つぎに、図30に示したフォワードプロセスの具体的な処理手順について説明する。図31は、フォワードプロセスの具体的な処理手順を示すフローチャートである。図31において、確率pf(i,j,k)=0とする(ステップS3101)。そして、親要素の要素番号i1をi1=0とする(ステップS3102)。
つぎに、この親要素Ei1に対し子要素が存在するか否かを判断する(ステップS3103)。子要素が存在しない場合(ステップS3103:No)、バックワードプロセス(ステップS3003)に移行する。一方、ステップS3103において、子要素が存在する場合(ステップS3103:Yes)、子要素の要素番号i2をi2=0とし(ステップS3104)、フォワード計算処理を実行する(ステップS3105)。フォワード計算処理のあと、バックワードプロセス(ステップS3003)に移行する。
[フォワード計算処理手順]
つぎに、図31に示したフォワード計算処理の具体的な処理手順について説明する。図32は、図31に示したフォワード計算処理の具体的な処理手順を示すフローチャートである。図32において、子要素Ei2の文字列番号j2をj2=0とし(ステップS3201)、文字列番号j2の単語候補番号k2をk2=0とする(ステップS3202)。また、親要素Ei1の文字列番号j1をj1=0とし(ステップS3203)、文字列番号j1の単語候補番号k1をk1=0とする(ステップS3204)。
つぎに、子要素Ei2の親要素Ei1の単語が単語候補Wkである確率pf(i2,j2,k2)を算出する(ステップS3205)。確率pf(i2,j2,k2)は下記式(22)で算出される。
pf(i2,j2,k2)
=p4’(i1,i2,j1,j2,k1,k2)×pf(i1,j1,k1)×p3’(i2,j2,k2)・・・(22)
なお、子要素Ei2の親要素Ei1が存在しない場合(たとえば、子要素Ei2=要素E0)、pf(i1,j1,k1)の替わりに、当該子要素Ei2の規格化出現確率p3’(i2,j2,k2)を代入する。
このあと、親要素Ei1の単語候補番号k1をインクリメントし(ステップS3206)、単語候補番号k1がk1>K1であるか否かを判断する(ステップS3207)。ここで、K1とは、親要素Ei1の文字列番号j1の単語候補数である。
k1>K1でない場合(ステップS3207:No)、ステップS3205に戻り、確率pf(i2,j2,k2)を算出する。一方、k1>K1である場合(ステップS3207:Yes)、親要素Ei1の文字列番号j1をインクリメントし(ステップS3208)、文字列番号j1がj1>J1であるか否かを判断する(ステップS3209)。ここで、J1とは、親要素Ei1の対応文字列数である。
j1>J1でない場合(ステップS3209:No)、ステップS3204に戻る。一方、j1>J1である場合(ステップS3209:Yes)、子要素Ei2の単語候補番号k2をインクリメントし(ステップS3210)、単語候補番号k2がk2>K2であるか否かを判断する(ステップS3211)。ここで、K2とは、子要素Ei2の文字列番号j2の単語候補数である。
k2>K2(i2,j2)でない場合(ステップS3211:No)、ステップS3203に戻る。一方、k2>K2である場合(ステップS3211:Yes)、親要素Ei2の文字列番号j2をインクリメントし(ステップS3212)、文字列番号j2がj2>J2であるか否かを判断する(ステップS3213)。ここで、J2とは、子要素Ei2の対応文字列数である。
j2>J2でない場合(ステップS3213:No)、ステップS3202に戻る。一方、j2>J2である場合(ステップS3213:Yes)、さらに子要素が存在するか否かを判断する(ステップS3214)。子要素が存在しない場合(ステップS3214:No)、フォワード計算処理を終了し、ステップS3003へ移行する。
一方、子要素Ei2に対してさらに子要素が存在する場合(ステップS3214:Yes)、親要素番号i1をi1=i2とする(ステップS3215)。すなわち、子要素Ei2を親要素Ei2にする。そして、子要素番号i2をi2=0として(ステップS3216)、ステップS3201に戻る。これにより、子要素が存在しなくなるまで、フォワード計算処理が実行される。
[バックワードプロセスの処理手順]
つぎに、図30に示したバックワードプロセスの具体的な処理手順について説明する。図33は、バックワードプロセスの具体的な処理手順を示すフローチャートである。図33において、確率pb(i,j,k)=0とする(ステップS3301)。そして、親要素の要素番号i1をi1=0とする(ステップS3302)。
つぎに、この親要素Ei1に対し子要素が存在するか否かを判断する(ステップS3303)。子要素が存在しない場合(ステップS3303:No)、事後確率算出プロセス(ステップS3004)に移行する。一方、ステップS3303において、子要素が存在する場合(ステップS3303:Yes)、子要素の要素番号i2をi2=0とし(ステップS3304)、バックワード計算処理を実行する(ステップS3305)。バックワード計算処理のあと、事後確率算出プロセス(ステップS3004)に移行する。
[バックワード計算処理手順]
つぎに、図33に示したバックワード計算処理の具体的な処理手順について説明する。図34は、図33に示したバックワード計算処理の具体的な処理手順を示すフローチャートである。
図34において、まず、子要素Ei2に対してさらに子要素が存在するか否かを判断する(ステップS3401)。子要素が存在する場合(ステップS3401:Yes)、親要素番号i1をi1=i2とする(ステップS3402)。すなわち、子要素Ei2を親要素Ei2にする。そして、子要素番号i2をi2=0として(ステップS3403)、ステップS3401に戻る。これにより、最下位の子要素を検出することができる。
一方、子要素が存在しない場合(ステップS3401:No)、子要素Ei2の文字列番号j2をj2=0にし(ステップS3404)、文字列番号j2の単語候補番号k2をk2=0とする(ステップS3405)。また、親要素Ei1の文字列番号j1をj1=0とし(ステップS3406)、文字列番号j1の単語候補番号k1をk1=0とする(ステップS3407)。
つぎに、確率pb(i1,j1,k1)を算出する(ステップS3408)。確率pb(i1,j1,k1)は下記式(23)で算出される。
pb(i1,j1,k1)
=p4’(i1,i2,j1,j2,k1,k2)×pb(i2,j2,k2)×p3’(i1,j1,k1)・・・(23)
なお、子要素Ei2が最下位の子要素である場合、pb(i2,j2,k2)の替わりに、当該子要素Ei2の規格化遷移確率p4’(i2,j2,k2)を代入する。
このあと、親要素Ei1の単語候補番号k1をインクリメントし(ステップS3409)、単語候補番号k1がk1>K1であるか否かを判断する(ステップS3410)。ここで、K1とは、親要素Ei1の文字列番号j1の単語候補数である。
k1>K1でない場合(ステップS3410:No)、ステップS3408に戻り、確率pb(i1,j1,k1)を算出する。一方、k1>K1である場合(ステップS3410:Yes)、親要素Ei1の文字列番号j1をインクリメントし(ステップS3411)、文字列番号j1がj1>J1であるか否かを判断する(ステップS3412)。ここで、J1とは、親要素Ei1の対応文字列数である。
j1>J1でない場合(ステップS3412:No)、ステップS3407に戻る。一方、j1>J1である場合(ステップS3412:Yes)、子要素Ei2の単語候補番号k2をインクリメントし(ステップS3413)、単語候補番号k2がk2>K2であるか否かを判断する(ステップS3414)。ここで、K2とは、子要素Ei2の文字列番号j2の単語候補数である。
k2>K2(i2,j2)でない場合(ステップS3414:No)、ステップS3406に戻る。一方、k2>K2である場合(ステップS3414:Yes)、親要素Ei2の文字列番号j2をインクリメントし(ステップS3415)、文字列番号j2がj2>J2であるか否かを判断する(ステップS3416)。ここで、J2とは、子要素Ei2の対応文字列数である。
j2>J2でない場合(ステップS3416:No)、ステップS3405に戻る。一方、j2>J2である場合(ステップS3416:Yes)、バックワード計算処理を終了し、ステップS3004に移行する。これにより、最上位の親要素にたどり着くまでバックワード計算処理が実行される。
[事後確率算出プロセスの処理手順]
つぎに、図30に示した事後確率算出プロセスの具体的な処理手順について説明する。図35は、事後確率算出プロセスの具体的な処理手順を示すフローチャートである。
図35において、まず、親要素番号i1をi1=0とし(ステップS3501)、その文字列番号j1をj1=0とし(ステップS3502)、単語候補番号k1=0とする(ステップS3503)。そして、親要素Ei1の子要素Ei2の子要素番号i2を読み込む(ステップS3504)。つぎに、この子要素Ei2の文字列番号j2をj2=0とし(ステップS3505)、子要素Ei2の単語候補番号k2をk2=0とする(ステップS3506)。
そして、上述した式(14)〜(17)を用いて、親要素番号i1、文字列番号j1、単語候補番号k1に関する事後確率pp1(i1,j1,k1)を算出する(ステップS3507)。
このあと、子要素Ei2の単語候補番号k2をインクリメントし(ステップS3508)、単語候補番号k2がk2>K2であるか否かを判断する(ステップS3509)。ここで、K2とは、子要素Ei2の文字列番号j2の単語候補数である。
k2>K2でない場合(ステップS3509:No)、ステップS3507に戻る。一方、k2>K2である場合(ステップS3509:Yes)、子要素Ei2の文字列番号j2をインクリメントする(ステップS3510)。そして、子要素Ei2の文字列番号j2がj2>J2であるか否かを判断する(ステップS3511)。ここで、J2とは、子要素Ei2の対応文字列数である。
j2>J2でない場合(ステップS3511:No)、ステップS3506に戻る。一方、j2>J2である場合(ステップS3511:Yes)、子要素番号i2をインクリメントし(ステップS3512)、i2>I2であるか否かを判断する(ステップS3513)。ここで、I2とは、子要素Ei2の要素数である。
i2>I2でない場合(ステップS3513:No)、ステップS3505に戻る。一方、i2>I2である場合(ステップS3513:Yes)、親要素Ei1の単語候補番号k1をインクリメントし(ステップS3514)、単語候補番号k1がk1>K1であるか否かを判断する(ステップS3515)。ここで、K1とは、親要素Ei1の文字列番号j1の単語候補数である。
k1>K1でない場合(ステップS3515:No)、ステップS3504に戻る。一方、k1>K1である場合(ステップS3515:Yes)、親要素Ei1の文字列番号j1をインクリメントし(ステップS3516)、文字列番号j1がj1>J1であるか否かを判断する(ステップS3517)。ここで、J1とは、親要素Ei1の対応文字列数である。
j1>J1でない場合(ステップS3517:No)、ステップS3503に戻る。一方、j1>J1である場合(ステップS3517:Yes)、事後確率規格化処理を実行する(ステップS3518)。この処理については後述する。
そして、親要素Ei1の要素番号i1をインクリメントし(ステップS3519)、親要素番号i1がi1>I1であるか否かを判断する(ステップS3520)。ここで、I1とは、親要素Ei1の要素数である。
i1>I1でない場合(ステップS3520:No)、ステップS3502に戻る。一方、i1>I1である場合(ステップS3520:Yes)、事後確率算出プロセスを終了し、単語決定処理(ステップS1407)に移行する。
[事後確率規格化処理の手順]
つぎに、図35に示した事後確率規格化処理の手順について説明する。図36は、事後確率規格化処理の手順を示すフローチャートである。図36において、まず、親要素Ei1の文字列番号j1をj1=0とし(ステップS3601)、その単語候補番号k1をk1=0とする(ステップS3602)。
そして、ステップS3507で算出された事後確率pp1(i1,j1,k1)を読み出して、規格化する(ステップS3603)。規格化は、読み出された事後確率pp1(i1,j1,k1)を要素Ei1内のすべての事後確率pp1の合計で除算することによりおこなう。以降、規格化された事後確率pp1を事後確率ppn1と称す。
つぎに、親要素Ei1の単語候補番号k1をインクリメントし(ステップS3604)、単語候補番号k1がk1>K1であるか否かを判断する(ステップS3605)。ここで、K1とは、親要素Ei1の文字列番号j1の単語候補数である。
k1>K1でない場合(ステップS3605:No)、ステップS3603に戻る。一方、k1>K1である場合(ステップS3605:Yes)、親要素Ei1の文字列番号j1をインクリメントし(ステップS3606)、文字列番号j1がj1>J1であるか否かを判断する(ステップS3607)。ここで、J1とは、親要素Ei1の対応文字列数である。
j1>J1でない場合(ステップS3607:No)、ステップS3602に戻る。一方、j1>J1である場合(ステップS3607:Yes)、事後確率規格化処理を終了し、ステップS3519に移行する。
[単語決定部1305の詳細説明]
つぎに、単語決定部1305について説明する。単語決定部1305では、単語評価部1304によって得られた確率に応じて単語の確定をおこなう。すべての要素の中で最も高い確率を与える単語候補を持つ要素に対して、最も高い確率を与える単語候補を確定単語として出力する。または、ある一定のしきい値以上の確率を有した単語候補に対して確定を与えることとしてもよい。
さらに、同じ要素の中で同時に複数の単語候補を格納することもできる。その際、確定した要素を持つ他の単語候補については、同一の要素として存在しないため、出現確率を0または非常に小さな確率値とする。加えて、その文字列に重複する単語候補を持つ要素の該当する単語候補の出現確率を0または非常に小さな確率値にする。
つぎに、単語決定部1305の比較プロセスについて説明する。ここでは簡単のため、支払期日の見出しとデータとに関する共通論理構造をもち、見出しの要素の単語候補として『支払期日』が単語候補抽出部1301によって抽出され、その出現確率をaとする。また、データの単語候補として『2006,8,1』および『2006,10,1』が同様に抽出され、その出現確率をbとする。
また、単語候補『支払期日』から単語候補『2006,8,1』への遷移確率を0.4とし、単語候補『2006,10,1』への遷移確率を0.2とする。このとき、それぞれの文字列のこのデータの要素に対する確からしさとして事後確率pp1が算出される。単語候補『2006,8,1』の事後確率は66%となり、単語候補『2006,10,1』の事後確率は33%となる。したがって、選択すべき単語候補は『2006,8,1』となる。
また、単語候補の決定で用いる量として、一つは上述した事後確率pp1を用い、もう一つはそれぞれの単語候補として与えられた文字列がどの要素に属するかを示す事後確率pp2を用いる。この2つの量のうち少なくともいずれか一方を参照して単語候補を決定する。
事後確率pp2の算出では各要素での最大の事後確率を与える単語候補のみを抽出し、それらの重複関係を確認する。重複している文字列は、単語候補を囲む最小矩形を基本とし、これらの矩形が重複するものを重複単語として順番を割り振る。この重複単語番号をsとしたとき、各文字列に対する事後確率pp2を算出する。事後確率pp2は、下記式(24)〜(26)によりあらわされる。
重複要素の中で事後確率pp2を最大にする要素が、該当する文字列の単語候補として最もふさわしい要素であるから、上述した事後確率pp1に加え事後確率pp2を最大にする単語候補が一致したときに文字列が確定される。
ここで、事後確率pp2について具体的に説明する。事後確率pp2の算出に先立って、単語候補ごとに、事後確率が最大となる要素を検出する。たとえば、図29にも示したように、単語候補『氏名』は、要素E0の単語候補であると同時に、要素E3の単語候補でもある。要素E0では事後確率pp1=0.946であるのに対し、要素E3では事後確率pp1=0.0である。
このように、要素E0と要素E3とで単語候補『氏名』が重複しており、いずれの要素がふさわしいかを確かめるため、事後確率pp2を算出する。図29を参照すると、単語候補『氏名』の要素E0における確率pbはpb=0.0144であり、要素E3における確率pfはpf=0.0である。
この場合、要素E0についての事後確率pp2は、
pp2=pb/(pf+pb)=0.0144/(0.0144+0.0)=100%
となる。
一方、要素E3についての事後確率pp2は、
pp2=pf/(pf+pb)=0.0/(0.0144+0.0)=0%
となる。両事後確率pp2を比較すると、要素E0の事後確率pp2のほうが大きいため、単語候補『氏名』は要素E0の文字列であると確定する。
比較プロセスでは、同じ操作をすべての要素番号i、文字列番号j、単語候補番号kに対しておこない、最も高い事後確率pp1,pp2により単語候補を確定させ、反復処理フラグを1にセットする。またはすべての単語候補を確定させ、反復処理フラグを1にセットする。反復処理フラグが0であれば、このまま終了し、確定フラグに存在する単語候補を確定文字列として使用する。それ以外の場合には、以下の出現確率書換プロセスをおこなう。
出現確率書換プロセスでは、最大の事後確率pp2となった要素以外の残余の要素については、その事後確率pp1を強制的に事後確率pp1=0にする。上述した例では、単語候補『氏名』は要素E0以外の他のどの要素の単語候補としてもはやふさわしくないので、他の単語候補になっていればその出現確率p3’をp3’=0にする。書き換えられる値は0に限らず、単語決定に支障がきたさない程度の比較的小さな値であればよい。
同様に、最大の事後確率pp2となった要素の単語候補以外の同一要素内における他の単語候補の出現確率p3’も強制的にp3’=0にする。上述した例では、最大の事後確率pp2となった要素E0の単語候補『氏名』以外の要素E0内の単語候補『(名)』は、要素E0の単語候補としてもはやふさわしくないので、出現確率p3’=0.33を強制的にp3’=0.0にする。
書き換えられる値は0に限らず、単語決定に支障がきたさない程度の比較的小さな値であればよい。出現確率p3’の強制変換後の単語候補テーブルを図37に示す。図37は、出現確率p3’の強制変換後の第4の単語候補テーブルを示す説明図である。
このように、要素Eiの階層に依存せずに、確定された単語候補以外の単語候補の出現確率p3’を強制的に0にすることにより、単語候補の絞込みの効率化を図ることができる。そして、単語決定部1305による処理を反復的に繰り返し実行することにより、一部の単語候補に文字認識誤りが存在し、出現確率がその単語に関して低くなった場合には、逐次的に決定していくことができる。これにより、誤りのあるあいまいな文字列は後の反復によって決定することができる。したがって、少ない単語候補の中からの単語候補の決定を効率的かつ高精度に実行することができる。
[単語決定処理手順]
つぎに、図14に示した単語決定部1305による単語決定処理手順について具体的に説明する。図38は、図14に示した単語決定部1305による単語決定処理手順を示すフローチャートである。
図38において、まず、比較プロセスを実行する(ステップS3801)。比較プロセスについては後述する。つぎに、反復処理終了フラグ=1であるか否かを判断する(ステップS3802)。反復処理終了フラグ=1でない場合(ステップS3802:No)、出現確率書換プロセスを実行する(ステップS3803)。出現確率書換プロセスについては後述する。一方、反復処理終了フラグ=1である場合(ステップS3802:Yes)、単語決定処理を終了する。
[比較プロセスの処理手順]
つぎに、図38に示した比較プロセス(ステップS3801)の具体的な処理手順について説明する。図39は、図38に示した比較プロセス(ステップS3801)の具体的な処理手順を示すフローチャートである。
図39において、まず、反復処理終了フラグ=1にセットし(ステップS3901)、親要素番号i1をi1=0とする(ステップS3902)。親要素Ei1内の最大事後確率pp1をpmax(i1)とした場合、最大事後確率pmax(i1)=0にする(ステップS3903)。
また、親要素Eiの文字列番号j1をj1=0とし(ステップS3904)、その単語候補番号k1をk1=0とする(ステップS3905)。そして、規格化された事後確率ppn1(i1,j1,k1)がppn1(i1,j1,k1)≧pmax(i1)であるか否かを判断する(ステップS3906)。
そして、ppn1(i1,j1,k1)≧pmax(i1)である場合(ステップS3906:Yes)、最大文字列番号jmaxをそのときの文字列番号j1(jmax=j1)とし(ステップS3907)、最大単語候補番号kmaxをそのときの単語候補番号k1(kmax=k1)とし(ステップS3908)、最大テキスト番号tmaxをそのときの単語候補番号k1に付与されているテキスト番号tとして(ステップS3909)、ステップS3910に移行する。
一方、ステップS3906において、ppn1(i1,j1,k1)≧pmax(i1)でない場合(ステップS3906:No)、ステップS3910に移行する。そして、ステップS3910では、単語候補番号k1をインクリメントし(ステップS3910)、単語候補番号k1がk1>K1であるか否かを判断する(ステップS3911)。ここで、K1とは、親要素Ei1の文字列番号j1の単語候補数である。
k1>K1でない場合(ステップS3911:No)、ステップS3906に戻る。一方、k1>K1である場合(ステップS3911:Yes)、親要素Ei1の文字列番号j1をインクリメントし(ステップS3912)、文字列番号j1がj1>J1であるか否かを判断する(ステップS3913)。ここで、J1とは、親要素Ei1の対応文字列数である。
j1>J1でない場合(ステップS3913:No)、ステップS3905に戻る。一方、j1>J1である場合(ステップS3913:Yes)、比較計算処理を実行する(ステップS3914)。この処理については後述する。
そして、親要素Ei1の要素番号i1をインクリメントし(ステップS3915)、親要素番号i1がi1>I1であるか否かを判断する(ステップS3916)。ここで、I1とは、親要素Ei1の要素数である。i1>I1でない場合(ステップS3916:No)、ステップS3903に戻る。一方、i1>I1である場合(ステップS3916:Yes)、ステップS3802に移行する。
[比較計算処理の手順]
つぎに、図39に示した比較計算処理(ステップS3914)の手順について説明する。図40は、図39に示した比較計算処理(ステップS3914)の手順を示すフローチャートである。このフローチャートは、図39のステップS3909のテキスト番号tを最大テキスト番号tmaxとする親要素Ei1の単語候補Wk1とその重複候補とを比較計算する処理手順である。
図40において、まず重複する子要素の重複候補番号sをs=0とする(ステップS4001)。そして、重複候補番号sが与えられる子要素Ei2の要素番号をi2(s)とする(ステップS4002)。重複する子要素Ei2を重複要素Ei2(s)と表記する。
また、重複要素Ei2(s)の重複文字列番号をj2(s)とし(ステップS4003)、その重複単語候補番号をk2(s)とする(ステップS4004)。そして、このときの規格化された事後確率ppn1(i2(s),j2(s),k2(s))を読み出す(ステップS4005)。
このあと、重複候補番号sをインクリメントし(ステップS4006)、重複候補番号sがs>Sであるか否かを判断する(ステップS4007)。ここで、Sは重複要素数である。s>Sでない場合(ステップS4007:No)、ステップS4002に戻る。一方、s>Sである場合(ステップS4007:Yes)、重複候補番号sをs=0にする(ステップS4008)。
このステップS4001〜ステップS4007までの一連の処理手順により、重複要素Ei2(s)の事後確率ppn1(i2(s),j2(s),k2(s))をすべて読み出すことができる。
ステップS4008のあと、事後確率ppn1(i2(s),j2(s),k2(s))に対して事後確率pp2(s)を算出する(ステップS4009)。このあと、重複候補番号sをインクリメントし(ステップS4010)、重複候補番号sがs>Sであるか否かを判断する(ステップS4011)。s>Sでない場合(ステップS4011:No)、ステップS4009に戻る。
一方、s>Sである場合(ステップS4011:Yes)、ステップS4012に移行する。このステップS4008〜ステップS4011までの一連の処理によりすべての重複要素Ei2(s)の事後確率ppn1(i2(s),j2(s),k2(s))に対して、事後確率pp2(s)を算出することができる。
このあと、事後確率pp2(s)の最大値が、図39のステップS3909のテキスト番号tを最大テキスト番号tmaxとする親要素Ei1の単語候補Wk1の事後確率pp2(i1,j1,k1)であるか否かを判断する(ステップS4012)。
単語候補Wk1の事後確率pp2(i1,j1,k1)でない場合(ステップS4012:No)、比較計算処理を終了する。一方、単語候補Wk1の事後確率pp2(i1,j1,k1)である場合(ステップS4012:Yes)、反復処理フラグ=0にセットし(ステップS4013)、確定テーブルqに(i1,j1,k1,t)を記憶する(ステップS4014)。
そして、確定テーブル番号qをインクリメントして(ステップS4015)、比較計算処理を終了し、ステップS3915に移行する。これにより、単語候補が重複した場合、優先すべき単語候補を特定する情報(i1,j1,k1,t)を確定テーブルqに記憶しておくことができる。
[出現確率書換プロセスの手順]
つぎに、図38のステップS3803で示した出現確率書換プロセスの具体的な処理手順について説明する。図41は、図38のステップS3803で示した出現確率書換プロセスの具体的な処理手順を示すフローチャートである。
図41において、まず確定テーブル番号qをq=0にする(ステップS4101)。そして、確定テーブル番号qの要素番号i1、文字列番号j1、単語候補番号k1を読み込む(ステップS4102〜ステップS4104)。
そして、子要素Ei2の要素番号i2をi2=i1とし(ステップS4105)、その文字列番号j2をj2=0とし(ステップS4106)、単語候補番号k2をk2=0とする(ステップS4107)。そして、親要素Ei1の文字列番号j1がj1=j2でかつ単語候補番号k1がk1=k2であるか否かを判断する(ステップS4108)。
j1=j2でかつk1=k2である場合(ステップS4108:Yes)、子要素Ei2の文字列番号j2の単語候補Wk2の出現確率p3(i2,j2,k2)を強制的にp3(i2,j2,k2)=0に書き換えて(ステップS4109)、ステップS4110に移行する。一方、j1=j2でかつk1=k2でない場合(ステップS4108:No)、出現確率p3(i2,j2,k2)の書換はおこなわずに、ステップS4110に移行する。
ステップS4110では、子要素Ei2の単語候補番号k2をインクリメントし、k2>K2であるか否かを判断する(ステップS4111)。ここで、K2とは、子要素Ei2の文字列番号j2の単語候補数である。
k2>K2でない場合(ステップS4111:No)、ステップS4107に戻る。一方、k2>K2である場合(ステップS4111:Yes)、親要素Ei2の文字列番号j2をインクリメントし(ステップS4112)、文字列番号j2がj2>J2であるか否かを判断する(ステップS4113)。ここで、J2とは、子要素Ei2の対応文字列数である。そして、j2>J2でない場合(ステップS4113:No)、ステップS4106に戻る。
このステップS4102〜ステップS4113までの一連の処理により、同一要素内の出現確率p3が低い他の単語候補の出現確率p3を強制的にp3=0に書き換えることができる。
一方、j2>J2である場合(ステップS4113:Yes)、このときの単語候補Wk1のテキスト番号tを読み込む(ステップS4114)。つぎに、重複する子要素Ei2の重複候補番号sをs=0とする(ステップS4115)。そして、重複候補番号sが与えられる子要素Ei2の要素番号をi2(s)とする(ステップS4116)。重複する子要素Ei2を重複要素Ei2(s)と表記する。
また、重複要素Ei2(s)の重複文字列番号をj2(s)とし(ステップS4117)、その重複単語候補番号をk2(s)とする(ステップS4118)。そして、この単語候補Wk2(s)の出現確率p3(i2(s),j2(s),k2(s))を強制的にp3(i2(s),j2(s),k2(s))=0に書き換える(ステップS4119)。
このあと、重複候補番号sをインクリメントし(ステップS4120)、重複候補番号sがs>Sであるか否かを判断する(ステップS4121)。ここで、Sは重複要素数である。s>Sでない場合(ステップS4121:No)、ステップS4116に戻る。
一方、s>Sである場合(ステップS4121:Yes)、確定テーブル番号qをインクリメントし(ステップS4122)、q>Qであるか否かを判断する(ステップS4123)。ここでQとは、確定テーブル数である。q>Qでない場合(ステップS4123:No)、ステップS4102に戻る。一方、q>Qである場合(ステップS4123:Yes)、出現確率書換プロセスを終了する。
このように、上述した実施の形態によれば、階層を有する共通論理構造を用い、複数の同一文字列や類似文字列を含む非構造化文書や帳票画像から認識・抽出した文字列情報に対して、見出しやデータを自動で認識し、論理構造の各要素に文字列を対応させることができる。
また、表内部の計量をセルに基づいて数値化することによって、安定した表内部での単語間の関係を数値化することができる。さらに、NULL文字列を導入することによって、論理要素の抜けに対応した論理構造認識をおこなうことができる。
また、大見出しの決定の際には小見出しやデータの確からしさに関する情報を、また小見出しを決定するには大見出しとともにデータの確からしさに関する情報を利用することによって、安定した認識を実現することができる。さらに、その評価値に応じて、論理要素の上位下位に関わらず、対応付けをおこなうことができる。これにより、あいまいな文字列が上位要素に存在したとしても、妥当な確率を与えることによって下位の要素として認識することができる。
さらに、複数の見出しで同じ文字列が使用されても、各論理要素に対応する子要素として存在するデータ(文字列)の論理要素に対する適合度合いを参照することで、見出しがどの論理要素に対応するかを決定することができる。
また、複数の論理要素が一つの文字列を単語候補として獲得されている場合に、一方の論理要素にその文字列が確定することによって、もう一方の文字列の候補から除外する。これにより、徐々に単語候補の絞込みをおこなうことができる。
以上説明したように、この発明の実施の形態にかかる帳票処理プログラム、該プログラムを記録した記録媒体、帳票処理装置、および帳票処理方法によれば、論理要素間の整合性のとれた帳票の構造に関する自動認識を高精度におこなうことができる。
なお、本実施の形態で説明した帳票処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
(付記1)帳票を論理的に構成する階層構造化された論理要素からなる論理構造を、当該各論理要素となる文字列の出現頻度および前記論理要素間の前記帳票上の相対位置に関する頻度とともに記憶するデータベースを用いて、処理対象となる紙帳票または電子帳票の論理構造をコンピュータに認識させる帳票処理プログラムであって、
前記処理対象から抽出された文字列と前記論理要素となる文字列との一致度に基づいて、前記処理対象から抽出された文字列の中から単語候補となる文字列を前記論理要素となる文字列ごとに抽出させる単語候補抽出工程と、
前記論理要素となる文字列の出現頻度に基づいて、前記単語候補抽出工程によって抽出された単語候補が前記論理要素において出現する出現確率を算出させる単語出現数値化工程と、
前記論理要素間の前記帳票上の相対位置に関する頻度に基づいて、前記論理要素間での単語候補どうしが組み合わせとして出現する遷移確率を算出させる単語関係数値化工程と、
前記単語出現数値化工程によって算出された出現確率と、前記単語関係数値化工程によって算出された遷移確率とに基づいて、前記各論理要素の単語候補が当該論理要素に該当する前記処理対象上の文字列であることの確からしさをあらわす評価値を算出させる単語評価工程と、
を前記コンピュータに実行させることを特徴とする帳票処理プログラム。
(付記2)前記単語出現数値化工程は、
さらに、前記処理対象から抽出された文字列と前記論理要素となる文字列との一致度をあらわす確率に基づいて、前記単語候補抽出工程によって抽出された単語候補が前記論理要素において出現する出現確率を算出させることを特徴とする付記1に記載の帳票処理プログラム。
(付記3)前記単語出現数値化工程は、
さらに、前記論理要素となる文字列が前記電子帳票に存在しないことを前記単語候補の一つとして定義して、前記単語候補抽出工程によって抽出された単語候補がその論理要素において出現する出現確率を算出させることを特徴とする付記2に記載の帳票処理プログラム。
(付記4)前記単語関係数値化工程は、
前記処理対象のレイアウトにおける前記論理要素間の相対距離から得られる前記帳票上の相対位置に関する頻度に基づいて、前記論理要素間での単語候補どうしが組み合わせとして出現する遷移確率を算出させることを特徴とする付記1〜3のいずれか一つに記載の帳票処理プログラム。
(付記5)前記単語評価工程は、
さらに、前記論理要素間での単語候補どうしが組み合わせのうち下位階層の論理要素の文字列が前記下位階層の論理要素の単語候補である場合に、その上位階層の論理要素の文字列が前記上位階層の論理要素の単語候補である確率に基づいて、前記評価値を算出させることを特徴とする付記1〜4のいずれか一つに記載の帳票処理プログラム。
(付記6)前記単語評価工程は、
さらに、前記論理要素間での単語候補どうしが組み合わせのうち上位階層の論理要素の文字列が前記上位階層の論理要素の単語候補である場合に、その下位階層の論理要素の文字列が前記下位階層の論理要素の単語候補である確率に基づいて、前記評価値を算出させることを特徴とする付記1〜4のいずれか一つに記載の帳票処理プログラム。
(付記7)前記単語評価工程によって算出された前記各論理要素の単語候補の評価値に基づいて、前記論理要素およびその単語候補を、前記電子帳票における論理要素およびその文字列に決定させる単語決定工程を、前記コンピュータに実行させることを特徴とする付記1〜6のいずれか一つに記載の帳票処理プログラム。
(付記8)前記単語決定工程は、
前記複数の論理要素において同一の単語候補が重複する場合、当該論理要素ごとの評価値に基づいて選ばれた一の論理要素およびその単語候補を、前記処理対象における論理要素およびその文字列に決定させることを特徴とする付記7に記載の帳票処理プログラム。
(付記9)前記単語決定工程は、
前記複数の単語候補が前記論理要素において重複する場合、当該論理要素および当該単語候補ごとの評価値に基づいて選ばれた一の単語候補を、前記処理対象における論理要素およびその文字列に決定させることを特徴とする付記7に記載の帳票処理プログラム。
(付記10)前記単語決定工程は、
前記評価値に基づいて選ばれなかった単語候補の出現確率を、現在の値よりも低い値に変換させる出現確率変換工程を含み、
前記出現確率変換工程によって変換された変換結果に基づいて、前記論理要素およびその単語候補を、前記処理対象における論理要素およびその文字列に決定させることを特徴とする付記7〜9のいずれか一つに記載の帳票処理プログラム。
(付記11)付記1〜10のいずれか一つに記載の帳票処理プログラムを格納する前記コンピュータに読み取り可能な記録媒体。
(付記12)帳票を論理的に構成する階層構造化された論理要素からなる論理構造を、当該各論理要素となる文字列の出現頻度および前記論理要素間の前記帳票上の相対位置に関する頻度とともに記憶するデータベースを用いて、処理対象となる紙帳票または電子帳票の論理構造を認識する帳票処理装置であって、
前記処理対象から抽出された文字列と前記論理要素となる文字列との一致度に基づいて、前記処理対象から抽出された文字列の中から単語候補となる文字列を前記論理要素となる文字列ごとに抽出する単語候補抽出手段と、
前記論理要素となる文字列の出現頻度に基づいて、前記単語候補抽出手段によって抽出された単語候補が前記論理要素において出現する出現確率を算出する単語出現数値化手段と、
前記論理要素間の前記帳票上の相対位置に関する頻度に基づいて、前記論理要素間での単語候補どうしが組み合わせとして出現する遷移確率を算出する単語関係数値化手段と、
前記単語出現数値化手段によって算出された出現確率と、前記単語関係数値化手段によって算出された遷移確率とに基づいて、前記各論理要素の単語候補が当該論理要素に該当する前記処理対象上の文字列であることの確からしさをあらわす評価値を算出する単語評価手段と、
を備えることを特徴とする帳票処理装置。
(付記13)帳票を論理的に構成する階層構造化された論理要素からなる論理構造を、当該各論理要素となる文字列の出現頻度および前記論理要素間の前記帳票上の相対位置に関する頻度とともに記憶するデータベースを用いて、処理対象となる紙帳票または電子帳票の論理構造を認識する帳票処理方法であって、
前記処理対象から抽出された文字列と前記論理要素となる文字列との一致度に基づいて、前記処理対象から抽出された文字列の中から単語候補となる文字列を前記論理要素となる文字列ごとに抽出する単語候補抽出工程と、
前記論理要素となる文字列の出現頻度に基づいて、前記単語候補抽出工程によって抽出された単語候補が前記論理要素において出現する出現確率を算出する単語出現数値化工程と、
前記論理要素間の前記帳票上の相対位置に関する頻度に基づいて、前記論理要素間での単語候補どうしが組み合わせとして出現する遷移確率を算出する単語関係数値化工程と、
前記単語出現数値化工程によって算出された出現確率と、前記単語関係数値化工程によって算出された遷移確率とに基づいて、前記各論理要素の単語候補が当該論理要素に該当する前記処理対象上の文字列であることの確からしさをあらわす評価値を算出する単語評価工程と、
を含んだことを特徴とする帳票処理方法。