(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-30
(45)【発行日】2024-10-08
(54)【発明の名称】表認識装置及び方法
(51)【国際特許分類】
G06V 30/412 20220101AFI20241001BHJP
G06V 30/00 20220101ALI20241001BHJP
【FI】
G06V30/412
G06V30/00 P
(21)【出願番号】P 2024523957
(86)(22)【出願日】2022-10-17
(86)【国際出願番号】 JP2022038526
(87)【国際公開番号】W WO2024084539
(87)【国際公開日】2024-04-25
【審査請求日】2024-04-22
【早期審査対象出願】
(73)【特許権者】
【識別番号】000006013
【氏名又は名称】三菱電機株式会社
(74)【代理人】
【識別番号】100109612
【氏名又は名称】倉谷 泰孝
(74)【代理人】
【識別番号】100116643
【氏名又は名称】伊達 研郎
(74)【代理人】
【識別番号】100184022
【氏名又は名称】前田 美保
(72)【発明者】
【氏名】金井 美岬
【審査官】小池 正彦
(56)【参考文献】
【文献】国際公開第2014/068770(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06V 30/412
G06V 30/00
(57)【特許請求の範囲】
【請求項1】
表形式文書の画像情報から当該表形式文書に記述された文字列を認識する表認識装置であって、
前記表形式文書に設けられた複数の罫線枠内にそれぞれ記述された文字列を認識する文字認識部と、
前記複数の罫線枠のうちの対象となる罫線枠である対象罫線枠について認識された文字列である単独文字列と、前記対象罫線枠とは異なる前記罫線枠について認識された文字列と前記単独文字列とを連結した連結文字列のうち、
前記表形式文書に記述されるべき適合文字列との一致度が高い方の前記単独文字列もしくは前記連結文字列を、前記対象罫線枠に属する文字列である統合文字列として判別する罫線枠統合判定部と、を備えること
を特徴とする表認識装置。
【請求項2】
前記罫線枠統合判定部が、前記統合文字列とした前記単独文字列もしくは前記連結文字列の前記一致度が予め定められた閾値以上の場合、前記統合文字列を前記一致度を算出するのに用いた前記適合文字列に置換すること
を特徴とする請求項1に記載の表認識装置。
【請求項3】
前記罫線枠統合判定部が、罫線枠毎に定められた複数の適合文字列の中から、前記罫線枠内に記述可能な適合文字列を制約する情報によって限定された1以上の適合文字列について前記一致度を算出し、前記統合文字列を判別すること
を特徴とする請求項1又は2に記載の表認識装置。
【請求項4】
前記罫線枠統合判定部が、前記複数の罫線枠の罫線に近接する文字の文字変換にかかるコストの値を小さくするように重み付けして前記一致度を算出すること
を特徴とする請求項1
又は2に記載の表認識装置。
【請求項5】
表形式文書の画像情報から当該表形式文書に記述された文字列を認識する表認識方法であって、
文字認識部が、前記表形式文書に設けられた複数の罫線枠内にそれぞれ記述された文字列を認識し、
罫線枠統合判定部が、前記複数の罫線枠のうちの対象となる罫線枠である対象罫線枠について認識された文字列である単独文字列と、前記対象罫線枠とは異なる前記罫線枠について認識された文字列と前記単独文字列とを連結した連結文字列のうち、
前記表形式文書に記述されるべき適合文字列との一致度が高い方の文字列もしくは連結文字列を、前記対象罫線枠に属する文字列である統合文字列として判別すること
を特徴とする表認識方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、表形式文書の画像情報から文字認識を行うための、表認識装置及び方法に関する。
【背景技術】
【0002】
画像化した表形式文書の文字認識では、表の罫線を抽出し、表の行と列とを罫線で区切った複数の領域(複数の罫線枠)に分離する。そして、罫線枠ごとに文字認識を行い、その文字認識結果を個別に保持する。そのため、項目名又は項目値となる罫線枠内の文字列が罫線枠を超過し、隣接する罫線枠にはみ出すなど、一つの項目名又は項目値が複数の罫線枠にまたがって記載されている場合、項目名又は項目値(文字列)を認識できない場合がある。
【0003】
そこで、隣接する罫線枠の罫線枠情報が予め設定された条件を満たす場合、例えば、隣接する罫線枠が共に同じ太さの実線で描かれている場合に罫線枠を統合することで、項目名又は項目値(文字列)を認識する技術が開示されている(例えば、特許文献1)。
この従来技術によれば、複数の罫線枠にまたがって記載された文字列を認識することができる。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来技術では以下のような問題がある。例えば、隣接する罫線枠の罫線の種類が相互に異なるなど、隣接する罫線枠の罫線枠情報が異なる場合があり、このような場合、予め設定された条件を満たさない。よって、当該条件を満たさない複数の罫線枠にまたがって記載された文字列を認識することができない。
【0006】
本開示は、上記のような課題を解決するためになされたものであり、罫線枠情報に依存せずに、複数の罫線枠にまたがって記載された文字列を正確に認識できるようにすることを目的とする。
【課題を解決するための手段】
【0007】
本開示の表認識装置は、
表形式文書の画像情報から当該表形式文書に記述された文字列を認識する表認識装置であって、
前記表形式文書に設けられた複数の罫線枠内にそれぞれ記述された文字列を認識する文字認識部と、
前記複数の罫線枠のうちの対象となる罫線枠である対象罫線枠について認識された文字列である単独文字列と、前記対象罫線枠とは異なる前記罫線枠について認識された文字列と前記単独文字列とを連結した連結文字列のうち、
前記表形式文書に記述されるべき適合文字列との一致度が高い方の前記単独文字列もしくは前記連結文字列を、前記対象罫線枠に属する文字列である統合文字列として判別する罫線枠統合判定部とを備える。
【0008】
本開示の表認識方法は、
表形式文書の画像情報から当該表形式文書に記述された文字列を認識する表認識方法であって、
文字認識部が、前記表形式文書に設けられた複数の罫線枠内にそれぞれ記述された文字列を認識し、
罫線枠統合判定部が、前記複数の罫線枠のうちの対象となる罫線枠である対象罫線枠について認識された文字列である単独文字列と、前記対象罫線枠とは異なる前記罫線枠について認識された文字列と前記単独文字列とを連結した連結文字列のうち、
前記表形式文書に記述されるべき適合文字列との一致度が高い方の文字列もしくは連結文字列を、前記対象罫線枠に属する文字列である統合文字列として判別する。
【発明の効果】
【0009】
本開示によれば、罫線枠情報に依存せずに、複数の罫線枠にまたがって記載された文字列を正確に認識する効果を有する。
【図面の簡単な説明】
【0010】
【
図1】実施の形態1における表認識装置の構成を表す機能構成図である。
【
図2】実施の形態1における表認識装置の認識対象となる表形式文書の一例を表す図である。
【
図3】実施の形態1における知識データベースの一例を表す図である。
【
図4】実施の形態1における表認識装置のハードウェア構成図である。
【
図5】実施の形態1における表認識装置の動作順序を表すフローチャートである。
【
図6】実施の形態1における罫線枠統合判定部の動作順序を表すフローチャートである。
【
図7】実施の形態1における表認識装置の動作例を説明する図である。
【
図8】実施の形態2における表認識装置の構成を表す機能構成図である。
【
図9】実施の形態2における表構造知識データベースの例を表す図である。
【
図10】実施の形態2における罫線統合判定部の動作順序を表すフローチャートである。
【
図11】実施の形態3における表認識装置の動作例を説明する図である。
【発明を実施するための形態】
【0011】
実施の形態の説明及び図面において、同じ要素及び対応する要素には同じ符号を付している。同じ符号が付された要素の説明は、適宜に省略又は簡略化する。以下の実施の形態では、「部」を「回路」、「工程」、「手順」又は「処理」に適宜読み替えてもよい。
【0012】
実施の形態1.
<構成>
実施の形態1における表認識装置について、
図1~
図7を用いて説明する。
図1は、実施の形態1における表認識装置100の構成を表す機能構成図である。
図1において、表認識装置100は、表構造認識部1、文字認識部2、罫線枠総合判定部3、知識データベース4で構成されている。
【0013】
図2は、実施の形態1における、表認識装置100の認識対象である表形式文書の一例を表す図である。
図2に示される表の1行目の1列目には項目名「Item A」、2列目には「Item B」、3列目には「Item C」がそれぞれ記載されている。表の2行目以降には、それぞれの項目名に属する項目値が記載されている。
図2に示されるように、表形式文書は、印刷の影響、あるいは文字数超過等により、文字が罫線枠からはみ出る場合が生じたり、あるいは文字が罫線枠に接触したりする場合がある。具体的には、
図2に示される表の場合では、項目名「Item A」に属する項目値「Total Fat」は、文字「at」が項目名「Item B」の罫線枠にはみ出ている状態である。また、項目名「Item B」に属する項目値「Saturated Fat」は、語頭の文字「S」が罫線枠に接触している状態である。
【0014】
表構造認識部1は、表形式文書の画像情報から罫線を抽出し、表構造を認識する。表構造は、表の行と列とを罫線で区切った複数の領域(すなわち、複数の罫線枠)から構成されている。
【0015】
表構造を認識する方法は、例えば、エッジヒストグラムに基づく方法を用いることができる。具体的には、表形式文書の画像情報から、表の領域(表領域)内部の白画素塊の境界近傍において2方向のエッジを求める。ここで、白画素塊は、白色以外の他色の罫線枠で囲まれた白地の領域である。そして、得られた2方向のエッジのそれぞれから求めたエッジヒストグラムに基づいて、罫線の一部分情報を取得する。さらに取得した罫線の一部分情報に基づいて、表領域の罫線情報を取得し、表構造を認識する。なお、表構造を認識する方法はこれに限らない。例えば、表の行と列の構造の情報が得られるものであれば、様々な方法を用いることができる。
【0016】
文字認識部2は、例えば、光学文字認識(OCR:Optical Character Recognition)の技術を用いて、罫線枠内の文字列を認識する。なお、罫線枠内の文字列を認識する方法はOCRに限られず、これ以外の方法であってもよい。
【0017】
罫線枠統合判定部3は、文字認識部2が認識した文字列と、知識データベース4に登録されている適合文字列との一致度の高さに応じて、どの罫線枠を統合すべきかを判定する。言い換えれば、各罫線枠内の文字列が、隣接する左右の罫線枠内の文字列と連結されるべきか判定する。例えば、一致度として、尤度を用いることができる。尤度は、任意の文字列が、ある文字列群に属すると推定される「尤もらしさ」を表す値である。例えば、尤度は、2つの文字列の間の標準化編集距離を用いることができる。ここで、標準化編集距離は、編集距離を長い方の文字列の長さで除算した値である。ただし、編集距離は、一文字の挿入、削除、置換によって、一方の文字列を他方の文字列に変形するのに必要な操作の最小回数である。尤度は、2つの文字列の間の一致度と読み替えてもよい。
そして、判定結果に基づいて罫線枠内の文字列を連結し、連結した文字列である連結文字列、もしくは連結しない単独の文字列である単独文字列を、最終的な統合判断結果である統合文字列として出力する。
【0018】
知識データベース4は、項目名、及び項目名に属する項目値として記述されるべき文字列である適合文字列を定める。
図3に、知識データベース4の適合文字列の内容の一例を示す。知識データベース4には、項目名毎に適合文字列が一又は複数個登録されている。言い換えれば、知識データベース4に定められている項目値の適合文字列のいずれかが、表形式文書の項目名毎に項目値の罫線枠内に記述され得る。なお、適合文字列は、1つの単語に限らず、複数の単語から構成される熟語、もしくは文章であってもよい。
図3中のIDXは、適合文字列のそれぞれに対し、個別に付与されるインデックス番号である。このIDXは、知識データベース4中の適合文字列を参照する際に、適合文字列を指定するために用いられる。具体的には、
図3において、例えば、項目名「Item A」に属する項目値のそれぞれについて、順にA1、A2、・・・、A9のインデックス番号が付与されている。なお、適合文字列については、
図3に示された文字列に限らず、任意に設定できる。
また、知識データベース4の項目値に関して、任意の文字又は数値を表す、いわゆるワイルドカードを設定することができる。具体的には、
図3の項目名「Item C」に属する適合文字列において、[*NUM*]はワイルドカードを意味しており、ワイルドカードには任意の数値を当てはめることができる。知識データベース4の項目値にワイルドカードを設定することで、文字又は数値毎に適合文字列を設定する必要が無くなり、知識データベース4の記憶容量を削減することができる。また、文字又は数値毎に適合文字列を参照するための計算量も削減することができる。
また、表認識の結果、認識された文字列に誤りがあって所定の条件を満たす場合、知識データベース4に登録されている項目名、もしくは項目値の文字列へ置換されてもよい。あるいは、登録されていない項目名、もしくは項目値の文字列は、誤認識結果として認識対象から除外されてもよい。置換のための具体的な条件については、後述する。
【0019】
<ハードウェア>
次に、実施の形態1における表認識装置100が有するハードウェアを説明する。
図4は、表認識装置100のハードウェア構成図である。表認識装置100は、プロセッサ101、メモリ102、外部記憶装置103及び入出力インタフェース104を有する。
【0020】
プロセッサ101は、表認識装置100全体を制御する。例えば、プロセッサ101は、CPU(Central Processing Unit)、FPGA(Field Programmable Gate Array)などである。プロセッサ101は、マルチプロセッサでもよい。また、表認識装置100は、処理回路を有してもよい。
【0021】
メモリ102は、表認識装置100の主記憶装置である。例えば、メモリ102は、RAM(Random Access Memory)などである。外部記憶装置103は、表認識装置100の補助記憶装置である。例えば、外部記憶装置103は、HDD(Hard Disk Drive)、又はSSD(Solid State Drive)などである。入出力インタフェース104は、表認識装置100に接続される外部装置とデータの送受を行うインタフェースである。例えば、入出力インタフェース104は、NIC(Network Interface Controller)などである。例えば、外部装置は、イメージスキャナ、ディスプレイなどである。なお、外部装置の図示は省略されている。
【0022】
プロセッサ101は、外部記憶装置103に記憶されている表認識プログラムを、メモリ102に読み出し、プロセッサ101が、そのプログラムを実行することで、表認識方法の各処理を実現することができる。外部記憶装置103は、実施の形態1の表認識方法を実現するためのプログラム及びデータを保持する。なお、表認識プログラムは、ネットワークを通じて提供されてもよく、また、コンピュータで読み込み可能な記録媒体に記録されて提供されてもよい。即ち、表認識プログラムは、例えば、プログラムプロダクトとして提供されてもよい。
【0023】
入出力インタフェース104は、表形式文書の画像情報をイメージスキャナなどの外部装置より受信すると共に、表認識結果をディスプレイなどの外部装置に出力する。
【0024】
<フローチャート>
次に、実施の形態1における表認識装置100の動作について説明する。
図5は、実施の形態1の表認識装置100の動作順序を表すフローチャートである。説明を簡単にするため、表の1行目(すなわち、項目名が記載されている行)の内容は既知であるとし、2行目以降の項目値の罫線枠のみの統合方法について説明する。また、項目名の行(1行目)の処理を省略するので、項目値の先頭行である2行目を新たな1行目と見なして説明する。
【0025】
まず、ステップS1において、表構造認識部1が、表形式文書の画像情報から罫線を抽出し、複数の罫線枠から構成される表構造を認識する。更に、表構造認識部1が、認識された表構造から、表形式文書の表の行数及びそれぞれの行の列数を取得する(ステップS1)。
【0026】
ステップS2において、文字認識部2が、表構造認識部1がステップS1で認識した罫線枠内の文字を認識する(ステップS2)。
【0027】
次に、ステップS3において、罫線枠統合判定部3が、知識データベース4を参照し、ステップS2で得られた文字認識結果に基づいて、どの罫線枠を統合するか判定する。そして、判定結果に基づいて、隣接する罫線枠内の文字列を連結し、連結した文字列である連結文字列、もしくは連結しない単独の文字列である単独文字列を出力する(ステップS3)。
【0028】
図6は、ステップS3の罫線枠統合判定部3の動作順序を表すフローチャートである。図中の「←」は、右辺の数値又は要素を、左辺の変数へ代入する処理を表している。また説明を簡略化するため、変数が保持する値を変数の記号名で示す場合がある。また、左上を原点とした表についての動作である。
【0029】
まず、ステップS301において、表の行の位置を表す変数iに1を代入する(ステップS301)。
【0030】
ステップS302において、変数iが表の行数以下であるか確認する。変数iが表の行数以下の場合(ステップS302のYes)、処理をステップS303に進める。変数iが表の行数を超える場合(ステップS302のNo)、全ての行の判定が完了したため、処理を終了する(END)。
【0031】
ステップS303において、表の列の位置を表す変数jに1を代入する(ステップS303)。
【0032】
ステップS304において、変数jが、i行に属する項目値の罫線枠の合計数(以下、項目数)以下であるか確認する(ステップS304)。変数jが項目数以下の場合(ステップS304のYes)、処理をステップS305に進める。変数jが項目数を超える場合(ステップS304のNo)、処理をステップS316に進める。
【0033】
ステップS305において、i行のj列目の罫線枠内に文字認識結果があるか確認する(ステップS305)。i行のj列目の罫線枠内に文字認識結果がある場合(ステップS305のYes)、処理をステップS306に進める。i行のj列目の罫線枠内に文字認識結果がない場合(ステップS305のNo)、処理をステップS315に進める。
【0034】
ステップS306において、変数kに0を代入する(ステップS306)。kは、i行のj列目の罫線枠に対して、統合する他の罫線枠の列の個数を表す。具体的には、k=0の場合、i行のj列目の罫線枠は統合せず単独の罫線枠として取り扱われ、k=1の場合、i行のj列目の罫線枠に対して、隣接する1個の他の罫線枠が統合される。
【0035】
ステップS307において、変数kの値が、項目数から変数jの値と1とを減算した値以下であるか確認する(ステップS307)。変数kの値が、項目数から変数jの値と1とを減算した値以下である場合(ステップS307のYes)、処理をステップS308に進める。変数kの値が、項目数から変数jの値と1とを減算した値より大きい場合(ステップS307のNo)は、処理をステップS313に進める。
【0036】
ステップS308において、i行の(j+k)列目の罫線枠内に文字認識結果があるか確認する(ステップS308)。i行の(j+k)列目の罫線枠内に文字認識結果がある場合(ステップS308のYes)、処理をステップS309に進める。i行の(j+k)列目の罫線枠内に文字認識結果がない場合(ステップS308のNo)、処理をステップS313に進める。
【0037】
ステップS309において、j列目から(j+k)列目までの罫線枠を統合し、罫線枠内の文字列を連結し、連結文字列を得る。そして、知識データベース4を参照し、知識データベース4中のj番目(すなわち、j列目)の項目名に属する適合文字列を順次読み出して、連結文字列がj列目の項目名に属する尤度 [j+k,j]を算出し、尤度L[j+k,j]を変数L1に代入する(ステップS309)。本実施の形態における知識データベース4の参照方法の具体例として、例えば、j=1(すなわち、表の1列目)の場合は、知識データベース4の項目名「Item A」の項目に属する適合文字列を順次読み出し、j=2(すなわち、表の2列目)の場合は、知識データベース4の項目名「Item B」の項目に属する適合文字列を順次読み出す。なお、知識データベース4から適合文字列を読み出すため、インデックス番号IDXを検索キーとして使用することができる。具体的には、尤度 [j+k,j]は、例えば、次のように算出される。まず、j番目(すなわち、j列目)の項目名に属する項目値として、知識データベース4に登録されている一又は複数の適合文字列から、インデックス番号IDXをキーとして1つの適合文字列を読み出す。次に、j列目から(j+k)列目までの罫線枠内の文字列を連結して得られた連結文字列と、インデックス番号IDXをキーとして読み出された適合文字列との標準化編集距離NEDを算出する。標準化編集距離NEDは、知識データベース4に登録されている適合文字列毎に算出される。なお、標準化編集距離NEDは、知識データベース4に登録されている全ての適合文字列について算出されてもよいし、一部の適合文字列について算出されてもよい。続いて、算出された一又は複数の標準化編集距離NEDの中からその最小値NEDMINを求める。そして、1から最小値NEDMINを減算した値を、尤度 [j+k,j]として求めることができる。つまり、尤度は、連結文字列に対し、知識データベース4に登録されている適合文字列の中で最も類似している文字列を選択した時の、2つの文字列の間の一致度を表す。2つの文字列の間の一致度が高い場合、文字列の変形回数は少なくなるので標準化編集距離は小さくなる。よって、j列目から(j+k)列目までの罫線枠内の文字列を連結することで得られた連結文字列と、j番目(すなわち、j列目)の項目名に属する項目値として知識データベース4に登録されている適合文字列との一致度が高い場合、尤度 [j+k,j]は高い値(すなわち、1に近い値)を示し、一致度が低い場合、尤度 [j+k,j]は低い値(すなわち、0に近い値)を示す。
【0038】
また、尤度は、DNN(Deep Neural Network)など公知の機械学習方法を用いて、知識データベース4で学習した学習済みモデルの出力に基づいて算出されるものでもよい。なお、学習済みモデルは、大量の表形式文書から得られた文字列データから作成することができる。具体的には、大量の文字列データを用い、大量の文字列データから複数の文字列を無作為に抽出し、それら文字列を連結して連結文字列を生成する。次に、生成された連結文字列である入力文字列データと、知識データベース4に登録されている適合文字列との尤度(例えば、標準化編集距離)を計算する。続いて、各入力文字列データに対応する尤度を、正解ラベル(又はランキング)として付与し教師データとする。そして、入力文字列データと、教師データを用いて、学習済みモデルの出力である推定尤度が正解ラベルに一致するように機械学習することで、学習済みモデルを作成することができる。連結文字列を学習済みモデルに入力することで推定尤度が出力されるので、知識データベース4を参照すること無く、もしくは知識データベース4を用いなくとも、尤度を直接算出することができる。このことは、知識データベース4に登録されている適合文字列が大量にある場合に特に有効であり、知識データベース4を参照するための計算量と、知識データベース4の適合文字列を記憶するためのメモリ量とを削減することができる。
【0039】
ステップS310において、ステップS309で得られた連結文字列と、当該連結文字列に隣接する罫線枠内の文字列をもう1つ連結した場合の連結文字列とを比較するため、j列目から(j+k+1)列目までの罫線枠を統合し、罫線枠内の文字列を連結し、連結文字列を得る。そして、ステップS309の処理と同様に知識データベース4を参照し、連結文字列がj番目の項目名に属する尤度 [j+k+1,j]を算出し、尤度L[j+k+1,j]を変数L2に代入する(ステップS310)。
【0040】
ステップS311において、変数L1の値が変数L2の値以下であるか確認する(ステップS311)。変数L1の値が変数L2の値以下である場合(ステップS311のYes)、ステップS309で得られた連結文字列の尤度よりも、当該連結文字列にもう一つの文字列を連結する場合の尤度の方が高いため、処理をステップS312に進める。L1の値がL2の値より大きい場合(ステップS311のNo)、処理をステップS313に進める。
【0041】
ステップS312において、変数kに1を加算し(ステップS312)、処理をステップS307に進める。
【0042】
ステップS313において、ステップS309で算出された尤度L[j+k,j]が、所定の閾値T1以上であるか確認する(ステップS313)。
尤度L[j+k.j]が所定の閾値T1以上である場合(ステップS313のYes)、処理をステップS314に進める。尤度 [j+k,j]が所定の閾値T1未満の場合(ステップS313のNo)、処理をステップS315に進める。ここで、所定の閾値T1は、罫線枠の統合候補C[j]が増え過ぎるのを抑制(カットオフ)するための閾値である。例えば、所定の閾値T1は、0.5に予め設定することができるが、この値に限ることは無い。
【0043】
ステップS314において、罫線枠の統合候補C[j]として、j列目から(j+k)列目までの罫線枠内の文字列を連結して得られた連結文字列と、各罫線枠の行番号と列番号とを、例えば、図示しないメモリMEMに格納する(ステップS314)。
【0044】
ステップS315において、変数jに1を加算し(ステップS315)、処理をステップS304に進める。
【0045】
ステップS316において、メモリMEMを参照し、罫線枠の統合候補C[j]について、統合する罫線枠に重複があるか否かを確認する。例えば、j=1で1列目と2列目の罫線枠が、罫線枠の統合候補C[j]となり、かつ、j=2で2列目と3列目の罫線枠が、罫線枠の統合候補C[j]となったときは、2列目の罫線枠が重複しているため、統合する罫線枠に重複があると判定する。統合する罫線枠に重複がある場合(ステップS316のYes)、処理をステップS317に進める。統合する罫線枠に重複がない場合(ステップS316のNo)、処理をステップS318に進める。なお、ステップS316では、連結する対象となる文字列に文字認識誤りが無いかどうか判定し、文字認識誤りがあると判定された場合、連結する対象となる文字列を、表知識データベース4に登録されている項目値の中から、最も一致度が高かった適合文字列で置き換えてもよい。
【0046】
ステップS317において、罫線枠が重複した罫線枠の統合候補C[j]のうち、重複した統合候補の項目名に属する尤度が、所定の閾値T1より小さい候補をメモリMEMから棄却する(ステップS317)。棄却方法として、例えば、尤度が高い順に所定の候補数を残すことでもよい。
【0047】
ステップS318において、変数iに1を加算し(ステップS318)、処理をステップS302に進める。なお、ステップS302からステップS318までの一連の処理について、表形式文書のすべての罫線枠に対して行う必要はない。例えば、処理の途中で、以降の罫線枠の内容がすべて空欄であることが明らかな場合、ユーザが罫線枠の統合が必要ではないと判断した場合などについては、上記した一連の処理を中止してもよい。
【0048】
図7は、本実施の形態1の表認識装置の動作例を説明する図である。
図7(a)は、認識対象である表形式文書の例である。
図7(a)に示した表形式文書には、項目名「Item A」に属する項目値として「Total Fat」、項目名「Item B」に属する項目値として「Saturated Fat」、項目名「Item C」に属する項目値として「25g」と「9g」とが記載されている。
図7(b)は、
図7(a)に対する表構造認識結果の例である。
図7(c)は、
図7(b)に対する文字認識結果の例である。
図7(d)は、
図7(c)を罫線枠の統合判定により得られた文字列認識結果の例である。なお、説明を簡単にするため、項目名「Item A」、「Item B」、及び「Item C」のそれぞれの表の位置は既知とし、また、それぞれの項目名は正しく文字認識されていることとする。以下、
図7の項目名の行(1行目)に関する罫線枠統合判定部3の処理の説明は省略し、項目値の先頭行である2行目を新たな1行目と見なして説明する。
【0049】
図7の例では、まず表構造認識部1で、罫線枠501から罫線枠509がそれぞれ認識される。
【0050】
次に文字認識部2で、罫線枠501から罫線枠509までのそれぞれの領域内の文字列を認識する。そして、文字認識結果として、文字列510から文字列517が得られる。
【0051】
ここで、項目名「Item A」に属する項目値「Total Fat」は、2行1列目の罫線枠を超過し、隣接する2行2列目の罫線枠にはみ出している。そのため、この時点における文字認識結果は、文字列513(「Total F」)と、文字列514(「at」)とに分かれている。すなわち、文字列513(「Total F」)は、項目名「Item A」に属する罫線枠504の文字列として認識されている。また、文字列514(「at」)は、項目名「Item B」に属する罫線枠505の文字列として誤って認識されている。
また、項目名「Item B」に属する項目値「Saturated Fat」は、罫線枠508内ではあるが、語頭の「S」が縦の罫線に接触している。そのため、縦の罫線の影響により文字認識誤りが生じ、「S」が「6」に変化している。よって、この時点における文字認識結果は、文字列516(「6oturated Fat」)のように誤って認識されている。更に、項目名「Item C」に属する項目値「9g」が、左詰めにて記入されているため、項目値「6aturated Fat」と「9g」とを連続した文字列とするか否かの判断も必要となっている。
【0052】
続いて、罫線枠統合判定部3で、知識データベース4に登録されている適合文字列(すなわち、項目値として記述されるべき文字列)を参照し、各罫線枠内の項目値(すなわち、文字認識により得られた文字列)が、項目名に属する尤度(すなわち、標準化編集距離の最小値を1から減算した値)に基づいて、どの罫線枠を統合すべきか判定する。言い換えれば、各罫線枠内の文字列が、隣接する左右の罫線枠内の文字列と連結されるべきか判定する。そして、判定結果に基づいて罫線枠内の文字列を連結し、連結した文字列である連結文字列、もしくは連結しない単独の文字列である単独文字列を、最終的な統合判断結果であり認識結果でもある統合文字列として出力する。
【0053】
図6のフローチャートに示した処理を適宜参照しながら、罫線枠統合判定部3の具体的な動作を説明する。まず、表の項目値の1行目(i=1)において、罫線枠504(すなわち、文字列513(「Total F」))と、罫線枠505(すなわち、文字列514(「at」))と、罫線枠506(すなわち、文字列515「25g」)と、知識データベース4に登録されている適合文字列とを評価する場合を考える。
説明を簡単にするため、知識データベース4の項目名「Item A」に属する項目値「Total Fat」、項目「B」に属する項目値「Trans Fat」、及び、項目名「Item C」に属する「[*NUM*]g」の場合についてのみ述べる。
【0054】
まず、変数i=1、変数j=1のとき、jが項目数以下であるか判定する(ステップS304)。2行目の項目数は3のため、jは項目数以下であり(ステップS304のYes)、j列目の罫線枠内に文字認識結果があるか判定する(ステップS305)。変数i=1、変数j=1のとき、j列目の罫線枠(すなわち、罫線枠504)に文字列513が存在するので(ステップS305のYes)、変数kに0が代入される(ステップS306)。ステップS307において、2行目の項目数は3のため、項目数から(j+1)を減算した値はk(=0)より大きいので(ステップS307のYes)、ステップS308に進む。
次に、(j+k)列目の罫線枠内に文字認識結果があるか判定する(ステップS308)。(j+k)列目の罫線枠(k=0であり、すなわち、罫線枠504)には文字列513が存在するので(ステップS308のYes)、変数L1が計算され(ステップS309)、変数L2が計算される(ステップS310)。ここで、変数L1は、罫線枠504内の文字列513「Total F」と、知識データベース4の項目名「Item A」に属する項目値「Total Fat」との尤度であり、文字列513「Total F」と、適合文字列「Total Fat」との標準化編集距離NEDから算出することができる。また、変数L2は、罫線枠504と罫線枠505とを連結して得られた連結文字列である「Total Fat」と、知識データベース4の項目名「Item A」に属する項目値「Total Fat」との尤度であり、連結文字列「Total Fat」と、適合文字列「Total Fat」との標準化編集距離NEDから算出することができる。続いて、変数L1と変数L2とが比較される(ステップS311)。
ここで、標準化編集距離NEDの算出において、文字列「Total F」を、項目値「Total Fat」に変換する場合、2文字の置換が必要である。「Total Fat」の文字列の長さは、空白文字を含み、9となる。よって、変数L1は、1-(2/9)=0.788である。一方、連結文字列「Total Fat」を、項目値「Total Fat」に変換する場合、置換無し(すなわち、0文字の置換)である。よって、変数L2は、1-(0/9)=1.0となる。変数L1と変数L2を比較した結果、L1<L2であり(ステップS311のYes)、変数kに1が加えられる(ステップS312)。そして、ステップS307に戻る。
【0055】
ステップS307において、2行目の項目数は3のため、項目数から(j+1)を減算した値はk(=1)と等しいので(ステップS307のYes)、ステップS308に進む。
上記と同様に、(j+k)列目の罫線枠内に文字認識結果があるか判定する(ステップS308)。(j+k)列目の罫線枠(すなわち、罫線枠505)には文字列514「at」が存在するので(ステップS305のYes)、変数L1が計算され(ステップS309)、変数L2が計算される(ステップS310)。ここで、変数L1は、罫線枠504と罫線枠505とを連結して得られた連結文字列である「Total Fat」と、知識データベース4の項目名「Item A」に属する項目値「Total Fat」との尤度であり、標準化編集距離NEDから算出することができる。また、変数L2は、罫線枠504と罫線枠505、及び罫線枠506とを連結して得られた連結文字列である「Total Fat 25g」と、知識データベース4の項目名「Item B」に属する項目値「Total Fat」との尤度であり、標準化編集距離NEDから算出することができる。続いて、変数L1と変数L2とが比較される(ステップS311)。
ここで、標準化編集距離NEDの算出において、連結文字列「Total Fat」を、項目値「Total Fat」に変換する場合、置換無し(すなわち、0文字の置換)である。よって、変数L1は、1-(0/9)=1.0となる。一方、連結文字列「Total Fat 25g」を、項目値「Total Fat」に変換する場合、4文字の置換が必要である。よって、変数L2は、1-4/9=0.556となる。変数L1と変数L2を比較した結果、L1>L2であり(ステップS311のNo)、ステップS313に進む。
ステップS313において、直前で計算された変数L1は、所定の閾値T1=0.5よりも大きいので(ステップS313のYes)、罫線枠504と罫線枠505とが、罫線枠の統合候補C[j]となる(ステップS314)。そして、変数jに1が加えられ(ステップS315)、ステップS304の先頭に戻る。
【0056】
続いて、変数i=1、変数j=2のとき、jが項目数以下であるか判定する(ステップS304)。2行目の項目数は3のため、jは項目数以下であり(ステップS304のYes)、j列目の罫線枠内に文字認識結果があるか判定する(ステップS305)。変数i=1、変数j=2のとき、j列目の罫線枠(すなわち、罫線枠505)に文字列514が存在するので(ステップS305のYes)、変数kに0が代入される(ステップS306)。ステップS307において、2行目の項目数は3のため、項目数から(j+1)を減算した値はk(=0)より大きいので(ステップS307のYes)、ステップS308に進む。
次に、(j+k)列目の罫線枠内に文字認識結果があるか判定する(ステップS308)。(j+k)列目の罫線枠(k=0であり、すなわち、罫線枠505)には文字列413が存在するので(ステップS308のYes)、変数L1が計算され(ステップS309)、変数L2が計算される(ステップS310)。ここで、変数L1は、罫線枠505内の文字列514「at」と、知識データベース4の項目名「Item B」に属する「Trans Fat」との尤度であり、標準化編集距離NEDから算出することができる。また、変数L2は、罫線枠505内の文字列と罫線枠506内の文字列とを連結して得られた連結文字列である「at 25g」と、知識データベース4の項目名「Item B」に属する項目値「Trans Fat」との尤度であり、標準化編集距離NEDから算出することができる。続いて、変数L1と変数L2とが比較される(ステップS311)。
ここで、標準化編集距離NEDの算出において、文字列「at」を、項目値「Trans Fat」に変換する場合、7文字の置換が必要である。「Trans Fat」の文字列の長さは、空白文字を含み、9である。よって、変数L1は、1-(7/9)=0.222となる。一方、連結文字列「at 25g」を、項目値「Trans Fat」に変換する場合、11文字の置換が必要である。よって、変数L2は、1-11/9=0.0(0以下の場合は、0に制限する)となる。変数L1と変数L2を比較した結果、L1>L2であり(ステップS311のNo)、ステップS313に進む。
ステップS313において、直前で計算された変数L1は、所定の閾値T1=0.5よりも小さいので(ステップS313のNo)、罫線枠の統合候補C[j]とはならず、ステップS315へ進み、そして、変数jに1が加えられ(ステップS315)、ステップS304の先頭に戻る。
【0057】
最後に、変数i=1、変数j=3のとき、jが項目数以下であるか判定する(ステップS304)。2行目の項目数は3のため、jは項目数以下であり(ステップS304のYes)、j列目の罫線枠内に文字認識結果があるか判定する(ステップS305)。変数i=1、変数j=3のとき、j列目の罫線枠(すなわち、罫線枠506)に文字列514が存在するので(ステップS305のYes)、変数kに0が代入される(ステップS306)。ステップS307において、2行目の項目数は3のため、項目数から(j+1)を減算した値はk(=0)より小さいので(ステップS307のNo)、ステップS313に進む。
ステップS313において、変数L1が計算される。ここで、変数L1は、罫線枠506内の文字列515「25g」と、知識データベース4の項目名「Item C」に属する項目名「[*NUM*]g」との尤度であり、標準化編集距離NEDから算出することができる。
ここで、標準化編集距離NEDの算出において、文字列「25g」を、項目値「[*NUM*]g」に変換する場合、[*NUM*]はワイルドカードであり任意の数値が入るので、置換無しである。よって、変数L1は、1.0であり、所定の閾値T1=0.5よりも大きいので(ステップS313のYes)、統合されていない単独の罫線枠506が、罫線枠の統合候補C[j]となる(ステップS314)。
【0058】
以上、表の項目名の1行目(変数i=1)に属する全ての罫線枠を評価し、罫線枠504と罫線枠505の組と、単独の罫線枠505が罫線枠の統合候補C[j]として得られた。そして、ステップS316において、統合する罫線枠に重複が有るか否かを判定する。統合する罫線枠に重複が無いので(ステップS316のNo)、文字列513「Total F」と文字列514「at」とに分割されて認識された文字列が、連結文字列「Total Fat」として一つの文字列に連結される。
【0059】
続いて、ステップS316において、連結文字列もしくは単独文字列に文字認識誤りが無いかどうか、尤度を用いて判定する。文字列513「Total F」と文字列514「at」とを連結した連結文字列の尤度は1.0(すなわち、項目値に記載されるべき文字列と完全一致)であるので、連結文字列は正しく認識されたと判断され、文字列521(「Total Fat」)が、最終的な統合判断結果であり認識結果でもある統合文字列として出力される。また、文字列515は、連結しない単独の文字列である単独文字列として取り扱われる。この時の尤度は1.0であるので、文字列513と文字列514と同様、文字列515は正しく認識されたと判断され、文字列522(「25g」)が、最終的な統合判断結果であり認識結果でもある統合文字列として出力される。
【0060】
次に、表の項目値の2行目(i=2)において、罫線枠508(すなわち、文字列516(「6aturated Fat」))と、罫線枠509(すなわち、文字列517(「9g」))と、知識データベース4に登録されている適合文字列とを評価する場合について考える。
説明を簡単にするため、知識データベース4の項目「Item B」に属する項目値「Saturated Fat」、項目名「Item C」に属する「[*NUM*]g」の場合についてのみ述べる。
【0061】
まず、変数i=2、変数j=1のとき、jが項目数以下であるか判定する(ステップS304)。3行目の項目数は3のため、jは項目数以下であり(ステップS304のYes)、j列目の罫線枠内に文字認識結果があるか判定する(ステップS305)。変数i=2、変数j=1のとき、j列目の罫線枠(すなわち、罫線枠507)に文字列は存在しないので(ステップS305のNo)、変数jに1が加えられ(ステップS315)、ステップS304の先頭に戻る。
続いて、変数i=2、変数j=2のとき、jが項目数以下であるか判定する(ステップS304)。3行目の項目数は3のため、jは項目数以下であり(ステップS304のYes)、j列目の罫線枠内に文字認識結果があるか判定する(ステップS305)。変数i=2、変数j=2のとき、j列目の罫線枠(すなわち、罫線枠508)に文字列516が存在するので(ステップS305のYes)、変数kに0が代入される(ステップS306)。ステップS307において、3行目の項目数は3のため、項目数から(j+1)を減算した値はk(=0)と等しいので(ステップS307のYes)、ステップS308に進む。
次に、(j+k)列目の罫線枠内に文字認識結果があるか判定する(ステップS308)。(j+k)列目の罫線枠(k=0であり、すなわち、罫線枠508)には文字列516が存在するので(ステップS308のYes)、変数L1が計算され(ステップS309)、変数L2が計算される(ステップS310)。ここで、変数L1は、罫線枠508内の文字列516「6aturated Fat」と、知識データベース4の項目名「Item B」に属する項目値「Saturated Fat」との尤度であり、標準化編集距離NEDから算出することができる。また、変数L2は、罫線枠508内の文字列と罫線枠509内の文字列とを連結して得られた連結文字列である「6aturated Fat9g」と、知識データベース4の項目名「Item B」に属する項目値「Saturated Fat」との尤度であり、標準化編集距離NEDから算出することができる。続いて、変数L1と変数L2とが比較される(ステップS311)。
ここで、標準化編集距離NEDの算出において、文字列「6aturated Fat」を、項目値「Saturated Fat」に変換する場合、1文字の置換が必要である。「Saturated Fat」の文字列の長さは、空白文字を含み、13である。よって、変数L1は、1-(1/13)=0.923となる。一方、連結文字列「6aturated Fat9g」を、項目値「Saturated Fat」に変換する場合、3文字の置換が必要である。「6aturated Fat9g」の文字列の長さは、空白文字を含み、15である。よって、変数L2は、1-3/15=0.8となる。変数L1と変数L2を比較した結果、L1>L2であり(ステップS311のNo)、ステップS313に進む。
ステップS313において、直前で計算された変数L1は、所定の閾値T1=0.5よりも大きいので(ステップS313のYes)、統合されていない単独の罫線枠508が、罫線枠の統合候補C[j]となる(ステップS314)。
そして、変数jに1が加えられ(ステップS315)、ステップS304の先頭に戻る。
【0062】
最後に、変数i=2、変数j=3のとき、jが項目数以下であるか判定する(ステップS304)。3行目の項目数は3のため、jは項目数以下であり(ステップS304のYes)、j列目の罫線枠内に文字認識結果があるか判定する(ステップS305)。変数i=2、変数j=3のとき、j列目の罫線枠(すなわち、罫線枠509)に文字列517が存在するので(ステップS305のYes)、変数kに0が代入される(ステップS306)。ステップS307において、3行目の項目数は3のため、項目数から(j+1)を減算した値はk(=0)より小さいので(ステップS307のNo)、ステップS313に進む。
ステップS313において、変数L1が計算される。ここで、変数L1は、罫線枠509内の文字列517「9g」と、知識データベース4の項目名「Item C」に属する項目名「[*NUM*]g」との尤度であり、標準化編集距離NEDから算出することができる。
ここで、標準化編集距離NEDの算出において、文字列「9g」を、項目値「[*NUM*]g」に変換する場合、[*NUM*]はワイルドカードであり、任意の数値を入れることが可能なので、置換無しである。よって、変数L1は、1.0であり、所定の閾値T1=0.5よりも大きいので(ステップS313のYes)、統合されていない単独の罫線枠509が、罫線枠の統合候補C[j]となる(ステップS314)。
【0063】
以上、表の項目値の2行目(変数i=2)に属する全ての罫線枠を評価し、単独の罫線枠508と、単独の罫線枠509とが罫線枠の統合候補C[j]として得られた。そして、ステップS316において、統合する罫線枠に重複が有るか否かを判定する。統合する罫線枠に重複が無いので(ステップS316のNo)、罫線枠508内の文字列516と、罫線枠509内の文字列517とは、それぞれ連結しない単独の文字列として取り扱われる。
【0064】
続いて、ステップS313において、連結文字列もしくは単独文字列に文字認識誤りが無いかどうか、尤度を用いて判定する。文字列516の尤度は0.923、すなわち、項目値に記載されるべき文字列と完全一致ではないので、尤度の値と誤り判定のための所定の閾値T2とを比較する。このとき、誤り判定のための所定の閾値T2として、例えば0.7が好適であり予め設定することができる。文字列516の尤度(0.923)の値は、誤り判定のための所定の閾値T2(0.7)以上であるため、この文字列には誤りがあると推測される。そこで、文字列516の代わりとして、文字列523の文字列を、知識データベース4に登録されている適合文字列の中で最も尤度の高かった文字列「Saturated Fat」に置き換える。そして、文字列523は、最終的な統合判断結果であり認識結果でもある統合文字列として出力される。
一方、文字列517の尤度は1.0であるので、文字列517は正しく認識されたと判断され、文字列524(「9g」)が、最終的な統合判断結果であり認識結果でもある統合文字列として出力される。
なお、連結文字列もしくは単独文字列の尤度が1.0(すなわち、完全一致)の場合であっても、連結文字列もしくは単独文字列の代わりに、知識データベース4に登録されている適合文字列の中で最も尤度が高かった文字列に置き換えても構わない。これは、置換しても同じ文字列になるからである。つまり、尤度が、1.0の場合を含めて誤り判定のための所定の閾値T2以上の場合、知識データベース4に登録されている適合文字列の中で最も尤度の高かった文字列に置き換えてもよい。言い換えれば、尤度が、誤り判定のための所定の閾値T2以上の場合、当該尤度を算出するのに用いた知識データベース4に登録されている適合文字列に置き換えてもよい。
【0065】
なお、連結文字列の尤度が、誤り判定のための所定の閾値T2(例えば、0.7)未満の場合、例えば、文字列自体は正しく認識されているが、知識データベース4に登録されている適合文字列との一致度が低い場合が考えられる。その場合、連結文字列もしくは単独文字列を知識データベース4に登録されている適合文字列に置換せず、そのまま出力してもよい。
【0066】
以上の処理を全ての罫線枠について行い、罫線枠の最終的な統合判断から得られる統合文字列として、文字列518から文字列524がそれぞれ得られる。
【0067】
この実施の形態1では、表認識装置の具体的な動作例について、表形式文書の項目値に属する罫線枠についてのみ説明したがこれに限らない。例えば、項目名に関しても項目値と同様に認識することが可能である。この場合、例えば、知識データベース4に項目名に関する適合文字列を登録しておき、項目名に属する罫線枠に対し、項目値に属する罫線枠の場合と同様な処理を行うことができる。
【0068】
上記したように、罫線枠統合判定部3は、罫線枠の統合判定において、隣接する罫線枠の罫線枠情報を用いない。よって、罫線枠情報に依存せずに、罫線枠を正しく統合することが可能である。
【0069】
また、罫線枠統合判定部3は、知識データベース4に登録されている適合文字列を参照し、連結文字列が無意味な文字列の羅列では無く、意味を成す可能性が高い場合(すなわち、尤度が高く、項目名又は項目値に近いと判断される場合)、連結すべきと判定する。よって、項目名又は項目値の一部に間違いがある状態(例えば、文字認識誤り、誤記、記載内容の一部省略、など)でも、罫線枠を統合させることが可能である。更に、知識データベース4に登録されている適合文字列に近い文字列に置換することができるので、正しい文字列を出力することができる。
【0070】
以上、実施の形態1にて詳述した表認識装置は、各枠線内の文字認識結果の項目に属する一致度として尤度を算出し、算出された尤度に基づいてどの文字列を連結すべきか判定するようにした。
よって、罫線枠情報に依存せずに、複数の罫線枠にまたがって記載された文字列を正確に認識することができる。
【0071】
また、実施の形態1にて詳述した表認識装置は、知識データベースに登録されている適合文字列を参照し、連結文字列が意味を成す可能性が高い場合に連結すべきと判定するようにした。更に、連結文字列を、知識データベースに登録されている適合文字列に近い文字列に置換するようにした。
よって、項目名又は項目名に文字認識誤りがあっても、正確に文字列を連結させることが可能となるだけでなく、同時に文字認識結果の誤り訂正も可能となる相乗効果を得ることができる。
【0072】
実施の形態2.
上述した実施の形態1では、罫線枠の統合判定に知識データベースを用いているが、これに限らない。例えば、罫線枠の統合判定において、統合文字列として記述可能な適合文字列に制約する情報である表構造の制約の情報を利用することもできる。この構成を実施の形態2として説明する。
【0073】
図8は、実施の形態2における表認識装置100の構成を表す機能構成図である。
図1と比較して新たな構成は、表構造知識データベース5である。その他の構成と動作については
図1と同様であり、説明を省略する。
【0074】
表構造知識データベース5は、統合文字列として罫線枠内に記述可能な適合文字列を制約する情報である表構造の制約の情報を記憶する。例えば、表構造の制約の情報は、周辺の罫線枠内の文字列情報に基づき、知識データベース4内に定められている複数の適合文字列の中から、統合文字列として罫線枠内に記述可能な適合文字列を制約する情報である。より具体的に言えば、例えば、表構造の制約の情報は、表の項目が大項目、中項目、小項目のように分類を表す場合、それら項目と項目の間にある関係性を示す情報である。例えば、表構造知識データベース5は、知識データベース4と同様な方法で、項目名に属する項目値として記述可能な適合文字列が登録されていてもよい。
図9は、表構造知識データベース5の一例である。
図9に示した表構造の制約の情報として、左側の列に、項目名「Item A」に属する適合文字列(制約文字列と称する)が登録されている。また、右側の列に、項目名「Item A」の適合文字列(すなわち、制約文字列)が記述された場合に、隣接する項目名「Item B」に記述可能な適合文字列(記述可能文字列と称する)が登録されている。なお、表構造知識データベース5は、適合文字列の文字列は1つの単語に限らず、複数の単語、文節もしくは文章であってもよい。
【0075】
罫線枠統合判定部3は、知識データベース4と表構造知識データベース5と、図示しないメモリMEMに記憶されている罫線枠の統合候補C[j]とを参照して、表構造の制約の情報を用いて複数の適合文字列の中から1以上の適合文字列に限定する。そして、限定された1以上の適合文字列と文字認識部2が認識した文字列との一致度を算出し、一致度の高さに応じてどの罫線枠を統合すべきかを判定する。
本実施の形態2では、例えば、罫線枠統合判定部3は、表構造知識データベース5を参照して、罫線枠の統合候補C[j]が所定の項目名に属する項目値(制約文字列)に該当する場合、知識データベース4に対し、当該所定の項目名に隣接する他の項目名に属する項目値の候補(すなわち、統合文字列)を、記述可能文字列に制約することで1以上の適合文字列に限定する。
【0076】
図10は、実施の形態2における罫線統合判定部3の動作順序を表すフローチャートである。
図10において、
図6と比較して異なるステップは、ステップS309AとステップS310Aである。
図6と同じ番号を付与したステップは、実施の形態1にて示した処理と同様の処理を行うため、説明を省略する。
【0077】
ステップS309Aにおいて、j列目から(j+k)列目までの罫線枠を統合し、罫線枠内の文字列を連結し、連結文字列を得る。そして、表制約情報データベース5と、メモリMEM内に記憶されている罫線枠の統合候補C[j-1]とを参照し、得られた連結文字列に隣接する連結文字列である罫線枠の統合候補C[j-1]が、得られた連結文字列に対する制約文字列か否かを判定する(ステップS309A)。
罫線枠の統合候補C[j-1]が制約文字列に該当する場合、知識データベース4中のj番目(すなわち、j列目)の項目名に属する適合文字列を、表構造知識データベース5に記載された記述可能文字列に制約する。そして、連結文字列がj列目の項目名に属する尤度 [j+k,j]を算出し、尤度L[j+k,j]を変数L1に代入する。罫線枠の統合候補C[j-1]が制約文字列に該当しない場合、表構造知識データベース5による制約は行わず、連結文字列がj列目の項目名に属する尤度 [j+k,j]を算出し、尤度L[j+k,j]を変数L1に代入する(ステップS309A)。
【0078】
ステップS310Aにおいて、j列目から(j+k+1)列目までの罫線枠を統合し、罫線枠内の文字列を連結し、連結文字列を得る。そして、ステップS309Aの処理と同様に、表制約情報データベース5と、メモリMEM内に記憶されている罫線枠の統合候補C[j-1]とを参照し、得られた連結文字列に隣接する連結文字列である罫線枠の統合候補C[j-1]が、得られた連結文字列に対する制約文字列か否かを判定する(ステップS310A)。
罫線枠の統合候補C[j-1]が制約文字列に該当する場合、知識データベース4中のj番目(すなわち、j列目)の項目名に属する適合文字列を、表構造知識データベース5に記載された記述可能文字列に制約する。そして、連結文字列がj番目の項目名に属する尤度 [j+k+1,j]を算出し、尤度L[j+k+1,j]を変数L2に代入する。罫線枠の統合候補C[j-1]が制約文字列に該当しない場合、表構造知識データベース5による制約は行わず、連結文字列がj番目の項目名に属する尤度 [j+k+1,j]を算出し、尤度L[j+k+1,j]を変数L2に代入する(ステップS310A)。
【0079】
前出の
図7に示した表を対象に、
図9に示した表構造知識データベース5を用いて、本実施の形態2の表認識装置の動作の具体的な一例を説明する。
【0080】
罫線枠統合判定部3は、表構造知識データベース5を参照し、各罫線枠内の文字認識結果が項目に属する尤度を算出する際に用いる知識データベース4に制約を加える。
具体的には、
図7(d)において、項目名「Item A」に属する項目値として、文字列521(「Total Fat」)が得られると、
図9の表構造知識データベース5を参照して、隣接する項目名「Item B」に属する項目値の記述可能文字列の候補は、「Saturated Fat」又は「Trans Fat」に制約される。
【0081】
隣接する項目名に属する項目値の候補である統合文字列を、記述可能な適合文字列に制約することで、罫線枠の統合のための候補をより正確な文字列に限定することができ、罫線枠の統合判定の精度を向上させることができる。更に、罫線枠の統合のための候補数を削減することができるので、尤度計算のための処理量を少なくすることができる。
【0082】
以上、実施の形態2にて詳述した表認識装置は、罫線枠の統合判定において、統合文字列として記述可能な適合文字列に制約する情報である表構造の制約の情報を用いて1以上の適合文字列に限定しているので、罫線枠の統合判定の精度を向上させることができる。
【0083】
実施の形態3.
罫線枠の統合判定において、罫線に近接する文字が誤って認識されている可能性を考慮して判定することもできる。この構成を実施の形態3として説明する。
【0084】
罫線枠統合判定3は、認識結果の文字列がある項目に属する尤度を算出する際、文字単位で「重み付け」することで、罫線に近接する文字の誤認識の影響を小さくするようにする。
例えば、尤度として標準化編集距離を用いる場合、標準化編集距離算出時の挿入、削除、置換などの文字変換のコスト計算において、罫線に近接する文字の文字変換にかかるコストの値を小さく重み付けすることができる。コストの値の重み付けの値は、通常の1に対し、例えば、0.5が好適であるが、これに限らない。例えば、罫線の種類などに応じて、コストの値の重み付けの値は適宜変更することができる。
罫線に近接する文字の文字変換にかかるコストの値を小さくするように重み付けすることで、罫線に近接する文字の誤認識の影響を抑制することができる。言い換えれば、罫線に近接する文字の誤認識を許容することができる。
【0085】
なお、罫線に文字が近接しているか否については、例えば、罫線に文字が接触する場合、罫線に文字が近接していると判断される。また、罫線に文字が接触していない場合であっても、例えば、罫線から文字までの距離で判断されてもよい。この場合、罫線から文字までの距離が所定の閾値より近い場合、罫線に文字が近接していると判断される。なお、罫線から文字までの距離の閾値は、例えば、罫線の太さ、文字の大きさ等に応じた値を予め設定することができる。具体的には、罫線の太さの3倍の距離を、罫線から文字までの距離の閾値とすることができる。また、一つの罫線枠内の文字列において、近接と判断される文字の数は1文字に限らない。例えば、「ABC」という3文字の文字列で、「B」及び「C」の罫線から文字までの距離が所定の閾値より近い場合、文字「B」と文字「C」は、罫線と近接していると判断される。つまり、文字「B」と文字「C」は、共にコストの値の重み付けの対象とすることができる。
【0086】
図11は、本実施の形態3の表認識装置の動作の具体的な一例である。
図11(a)は、認識対象の表の例である。
図11(a)に示した表は、項目名「Item A」に属する項目値として「Total Fat」、項目名「Item C」に属する項目値として「25g」を持つ。
図11(b)は、
図11(a)に対する表構造認識結果の例である。
図11(c)は、
図11(b)に対する文字認識結果の例である。
図11(d)は、
図11(c)を罫線枠の統合判定により得られた文字列認識結果の例である。
【0087】
図11の例では、まず表構造認識部1で、罫線枠601から罫線枠606がそれぞれ認識される。
【0088】
次に、文字認識部2で、各罫線枠内の文字列607から文字列612がそれぞれ認識される。ここで、
図11(c)に示すように、文字列610は、縦の二重罫線と近接する文字「F」が、文字「P」に誤って認識されている。また、文字列611は、縦の二重罫線と近接する文字「a」が、文字「p」に誤って認識されている。
【0089】
続いて、罫線枠統合判定部3の具体的な動作を説明する。
罫線枠604(すなわち、文字列610(「Total P」))と、罫線枠605(すなわち、文字列611(「pt」))とを連結して得られた連結文字列(すなわち、「Total Ppt」)と、知識データベース4に登録されている適合文字列とを評価する場合を考える。説明を簡単にするため、知識データベース4の項目名「Item A」に属する項目値「Total Fat」の場合についてのみ述べる。
【0090】
まず、罫線枠に近接する文字のコストの値の重み付けを行わない場合について説明する。連結して得られた連結文字列「Total Ppt」を「Total Fat」に変換する場合、「Pp」の2文字の置換が必要である。また、「Total Fat」の文字列の長さは、空白文字を含み、9である。よって、尤度は、1-(2/9)=0.778となる。
【0091】
次に、尤度の計算において、罫線に近接する文字の文字変換にかかるコストの値の重みを0.5に設定する場合を説明する。この場合、文字「P」及び文字「p」が、コストの値の重み付けの対象となる。連結して得られた連結文字列「Total Ppt」を「Total Fat」に変換する場合、尤度は、1-(0.5×2/9)=0.889となる。
【0092】
上記のように、コストの値の重み付けを行わない場合の尤度0.778に対して、コストの値の重み付けを行う場合は尤度0.889となる。つまり、コストの値の重み付けを行わない場合と比較して尤度は高くなり、他の項目名の文字列が、(正しい文字列と)誤って採用される可能性を低減することができる。よって、罫線枠の統合判定の精度を更に向上させることができる。
【0093】
なお、上記した具体例では、縦の罫線に近接する文字について、コストの値を小さく重み付けしたが、これに限らない。例えば、横の罫線に近接する文字についても、同様の処理を行うことが可能であり、上記したのと同様の効果を奏功する。
【0094】
以上、実施の形態3にて詳述した表認識装置は、罫線枠統合判定部の尤度の計算において、罫線に近接する文字の文字変換にかかるコストの値を小さく重み付けした。
よって、他の文字と比較して誤認識されている可能性の高い文字の影響が抑制されるので、罫線枠統合判定の精度を更に向上させることができる。
【0095】
上述した実施の形態のそれぞれにおいて、2つの文字列の間の一致度の一例として、尤度について示したが、これに限定されるものではない。例えば、文字列をベクトル表現し、2つの文字列ベクトルの間のコサイン類似度を一致度として用いてもよい。例えば、コサイン類似度が1に近い場合は、2つの文字ベクトルは類似していることとなり、一致度が高くなる、一方、コサイン類似度が0に近い場合は、2つの文字ベクトルは類似しておらず、一致度が低くなる。
【0096】
なお、上述した実施の形態のそれぞれにおいて、罫線枠統合判定の処理は、横書き又は左横書き言語に限定されることは無い。例えば、上述した実施の形態による表認識装置は、縦書き文書のような行と列が入れ替わった表でも適用可能である。例えば、上述した実施の形態による表認識装置は、アラビア語のように右から記述が開始される言語でも適用可能である。
【0097】
上記以外にも、同様の機能・効果が得られる構成であれば、それを用いた形態としてもよい。更に、本開示はその開示の範囲内において、実施の形態の任意の構成要素の変形、もしくは実施の形態の任意の構成要素の省略が可能である。
【符号の説明】
【0098】
1 表構造認識部、2 文字認識部、3 罫線枠統合判定部、4 知識データベース、5 表構造知識データベース、
100 表認識装置、101 プロセッサ、102 メモリ、103 外部記憶装置、104 入出力インタフェース。