(57)【要約】【課題】視覚的に表形式として構造化されていない文字列から表構造を特定する【解決手段】領域１４０１は領域３０２の行間を埋めたものであり、この文字集合に対して、行畳み込み処理を実施し、文字情報１４０２として、文字が存在する列と存在しない列を得て、領域１４０１の１行目にある文字列「Ｓｅｔ  １」及び文字列「Ｓｅｔ  ２」にある空白文字は、空白リストには存在しないので、その列が非空白文字となり、文字情報１４０３を得る。同様に領域３０３に対する領域１４０５から文字情報１４０７を得る。これらの文字情報から一致する箇所を推定することで、何れの列が境界であるかが判明するため、当該列に罫線を引くことで表を特定する。【選択図】  図１４
2020060832.tif 000002
【特許請求の範囲】
【請求項１】
文書の分析処理を行う情報処理装置であって、
分析対象となる文書から行における文字列を検出する検出手段と、
前記検出手段により検出した行における文字列が存在する列に関する情報に基づき文字列間の区切れ位置を特定する第一の特定手段と、
前記第一の特定手段により特定された行における区切れ位置に関する情報と他の行における区切れ位置に関する情報とを用いて、表を構成する項目間の境界を特定する第二の特定手段と、
を備えたことを特徴とする情報処理装置。
【請求項２】
前記第一の特定手段は、それぞれの列から所定の列数に存在する文字の数に基づき文字列間の区切れ位置を特定することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第二の特定手段は、前記第一の特定手段により特定された行における区切れ位置と同じ他の行における区切れ位置を、表を構成する項目間の境界として特定することを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記第一の特定手段は、前記区切れ位置を特定した文字列が所定の文字列である場合、当該位置を区切れ位置としないことを特徴とする請求項１乃至３の何れか１項に記載の情報処理装置。
【請求項５】
列における項目名と当該項目名に対する要素からなる表において、
第１の特定手段により項目名が存在する行の区切れ位置間の列における文字位置と項目名に対する要素の区切れ位置間に位置する列における文字位置とに基づいて、項目名と当該項目名に対応する要素を特定する第三の特定手段を備えたことを特徴とする請求項１乃至４の何れか１項に記載の情報処理装置。
【請求項６】
前記第一の特定手段は、文字列間に所定数以上、文字列が存在しない場合、当該文字列間に対して区切れ位置を特定することを特徴とする請求項１乃至５の何れか１項に記載の情報処理装置。
【請求項７】
前記境界により特定される表を構成する項目の文字列を有効グラフとして出力する出力手段を備えたことを特徴とする請求項１乃至６の何れか１項に記載の情報処理装置。
【請求項８】
文書の分析処理を行う情報処理装置の制御方法であって、
前記情報処理装置は、
分析対象となる文書から行における文字列を検出する検出ステップと、
前記検出ステップにより検出した行における文字列が存在する列に関する情報に基づき文字列間の区切れ位置を特定する第一の特定ステップと、
前記第一の特定手段により特定された行における区切れ位置に関する情報と他の行における区切れ位置に関する情報とを用いて、表を構成する項目間の境界を特定する第二の特定ステップと、
を実行することを特徴とする情報処理装置の制御方法。
【請求項９】
コンピュータを、
分析対象となる文書から行における文字列を検出する検出手段と、
前記検出手段により検出した行における文字列が存在する列に関する情報に基づき文字列間の区切れ位置を特定する第一の特定手段と、
前記第一の特定手段により特定された行における区切れ位置に関する情報と他の行における区切れ位置に関する情報とを用いて、表を構成する項目間の境界を特定する第二の特定手段と、
して機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文書の分析処理において文書から情報を抽出するための分析技術に関するものであり、特に電子化された文書データから表データを抽出する技術及びその管理技術に関する。
【背景技術】
【０００２】
様々な組織で日々膨大な量の文書が作成されており、これらの文書の内容が正しいかどうかの検証作業について、多くの人的コストをかけて実施しているのが現状である。
【０００３】
例えば、実験データや統計処理されたデータを表として記載し、その説明文を記述する場合、文章中に記述された数値や表の項目名等に食い違いがないかどうか、あるいは文書中のどこに説明文が記述されているのか、あるいは記述の見落としがないか等、目視で検査を行っている現状がある。
【０００４】
特に申請文書のような文書に関しては、高度で且つ精密な検証作業が求められており、このような検証作業を効率的に実施したり、人的コストを削減したりすることは重要な課題である。
【０００５】
このとき、表計算ソフト等のように構造化された形式で提供されているデータは、機械的な読み取りが容易なため、検証作業の一部を自動化する等して作業コストを削減することが可能だが、データが単純なテキストファイルとして提供されている場合（ＣＳＶ形式等ではない）や、書式が定型化していない自由な書式で記載されている場合等では、表データ内の項目名や数値を機械的に読み取ることが困難となり、検証作業にかかるコストを低減させることが難しい。
【０００６】
このような課題に対して、特許文献１には、帳票書式を自動的に定義するために画像データを用いて文字が書かれている領域を特定する手法について開示しており、また、特許文献２では、ＨＴＭＬ形式等で記述されたデータからタグ情報を用いて抽象化したデータ構造に変換することで、文書の構造を読み取る手法について開示している。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−１７８８０２号公報
【特許文献２】特開２００７−２８６８６１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
前述のようなテキストで記述された表データの場合、特許文献１の手法ではテキストデータを一度画像データに変換する必要があり、また、特許文献２の手法では、テキスト内にタグが存在しないため、抽象化したデータ構造に変換できない。
【０００９】
また、図３に示すような垂直方向に罫線がない表の場合、いずれの手法でも表内の項目や数値を認識してデータとして抽出することが困難である。
【００１０】
そのため、このような文字情報で記述された表データに対しても、正しく項目名や数値を読み取り、構造化されたデータとして扱えるようにすることが望まれる。
【００１１】
本発明は、上記課題を解決するためになされたものであり、視覚的に表形式として構造化されていない文字列から表構造を特定することが可能な情報処理装置、制御方法、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成するための本発明は、文書の分析処理を行う情報処理装置であって、分析対象となる文書から行における文字列を検出する検出手段と、前記検出手段により検出した行における文字列が存在する列に関する情報に基づき文字列間の区切れ位置を特定する第一の特定手段と、前記第一の特定手段により特定された行における区切れ位置に関する情報と他の行における区切れ位置に関する情報とを用いて、表を構成する項目間の境界を特定する第二の特定手段と、を備えたことを特徴とする。
【発明の効果】
【００１３】
本発明によれば、視覚的に表形式として構造化されていない文字列から表構造を特定することが可能となり、表を用いて行う作業を効率的に実施することができる、という効果を奏する。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施形態における文書分析装置の構成例を示す図である。
【図２】本発明の実施形態における文書分析装置のハードウェア構成の一例を示す図である。
【図３】本発明の実施形態における文字表の一例を説明するための説明図である。
【図４】本発明の実施形態における表の罫線付与の一例を説明するための説明図である。
【図５】本発明の実施形態における表のグラフ化の実施例を説明するための説明図である。
【図６】本発明の実施形態における文書分析処理のフローチャートである。
【図７】本発明の実施形態におけるテキスト抽出処理のフローチャートである。
【図８】本発明の実施形態における文字表解析処理のフローチャートである。
【図９】本発明の実施形態における表解析処理のフローチャートである。
【図１０】本発明の実施形態における文字密度算出処理のフローチャートである。
【図１１】本発明の実施形態における列解析処理のフローチャートである。
【図１２】本発明の実施形態における構文解析の一例を説明するための説明図である。
【図１３】本発明の実施形態における文字密度の一例を説明するための説明図である。
【図１４】本発明の実施形態における行畳み込み及び空白リストマージの実施例を説明するための説明図である。
【図１５】本発明の実施形態におけるグラフ化処理のフローチャートである。
【図１６】本発明の実施形態における列推定処理のフローチャートである。
【発明を実施するための形態】
【００１５】
以下、図面を参照して、本発明の実施形態を詳細に説明する。
【００１６】
図１は、本発明の実施形態における文書分析装置（情報処理装置）の構成を示す図である。
【００１７】
文書分析装置１００は、解析部１０１と、解析データ１０２と、出力部１０３を備える。なお、解析データ１０２は後述する外部メモリ２１１等の記憶装置に記憶されている。
【００１８】
文書分析装置１００は、解析部１０１において文書１０４を解析して表データを取り出し、構造化されたデータに再構築して解析データ１０２に記憶する。出力部１０３は、外部プログラム等の要求に応じて、解析データ１０２から当該データを取り出し、任意の書式で出力する。これら一連の文書分析手法については、詳しく後述する。
【００１９】
図２は、本発明の実施形態におけるハードウェア構成の一例を示すブロック図である。
【００２０】
図２に示すように、情報処理装置は、システムバス２０４を介してＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３、入力コントローラ２０５、ビデオコントローラ２０６、メモリコントローラ２０７、よび通信Ｉ／Ｆコントローラ２０８が接続される。
【００２１】
ＣＰＵ２０１は、システムバス２０４に接続される各デバイスやコントローラを統括的に制御する。
【００２２】
ＲＯＭ２０２あるいは外部メモリ２１１は、ＣＰＵ２０１が実行する制御プログラムであるＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）やＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）や、本情報処理方法を実現するためのコンピュータ読み取り実行可能なプログラムおよび必要な各種データ（データテーブルを含む）を保持している。
【００２３】
ＲＡＭ２０３は、ＣＰＵ２０１の主メモリ、ワークエリア等として機能する。ＣＰＵ２０１は、処理の実行に際して必要なプログラム等をＲＯＭ２０２あるいは外部メモリ２１１からＲＡＭ２０３にロードし、ロードしたプログラムを実行することで各種動作を実現する。
【００２４】
入力コントローラ２０５は、キーボードやマウス等のポインティングデバイス等の入力装置２０９からの入力を制御する。入力装置２０９がタッチパネルの場合、ユーザがタッチパネルに表示されたアイコンやカーソルやボタンに合わせて押下（指等でタッチ）することにより、各種の指示を行うことができることとする。
【００２５】
また、タッチパネルは、マルチタッチスクリーンなどの、複数の指でタッチされた位置を検出することが可能なタッチパネルであってもよい。
【００２６】
ビデオコントローラ２０６は、表示装置２１０などの外部出力装置への表示を制御する。表示装置２１０は本体と一体になったノート型パソコンのディスプレイも含まれるものとする。なお、表示装置２１０はディスプレイに限ったものははく、例えばプロジェクタであってもよい。また、前述のタッチ操作を受け付け可能な装置については、入力装置も提供する。
【００２７】
なおビデオコントローラ２０６は、表示制御を行うためのビデオメモリ（ＶＲＡＭ）を制御することが可能で、ビデオメモリ領域としてＲＡＭ２０３の一部を利用することもできるし、別途専用のビデオメモリを設けることも可能である。
【００２８】
メモリコントローラ２０７は、外部メモリ２１１へのアクセスを制御する。外部メモリとしては、ブートプログラム、各種アプリケーション、フォントデータ、ユーザファイル、編集ファイル、および各種データ等を記憶する外部記憶装置（ハードディスク）、フレキシブルディスク（ＦＤ）、或いはＰＣＭＣＩＡカードスロットにアダプタを介して接続されるコンパクトフラッシュ（登録商標）メモリ等を利用可能である。
【００２９】
通信Ｉ／Ｆコントローラ２０８は、ネットワークを介して外部機器と接続・通信するものであり、ネットワークでの通信制御処理を実行する。例えば、ＴＣＰ／ＩＰを用いた通信やＩＳＤＮなどの電話回線、および携帯電話の３Ｇ回線を用いた通信が可能である。
【００３０】
なお、ＣＰＵ２０１は、例えばＲＡＭ２０３内の表示情報用領域へアウトラインフォントの展開（ラスタライズ）処理を実行することにより、表示装置２１０上での表示を可能としている。また、ＣＰＵ２０１は、表示装置２１０上の不図示のマウスカーソル等でのユーザ指示を可能とする。
【００３１】
以上が文書分析装置１００のハードウェア構成の説明であるが、後述する各種の処理を実行可能であれば、必ずしも図２に記載のハードウェア構成を有していなくとも構わないことは言うまでもない。
【００３２】
次に、文書分析装置１００における文書分析処理について、図３〜図１５を用いて、詳しく説明する。
【００３３】
図６は文書分析処理のフローチャートを示す図である。文書分析処理では、何らかの論理構造を持つ単数あるいは複数の文書ファイルを分析対象としており、例えば、ＯｐｅｎＸＭＬで記述された文書ファイルやＲＴＦ（Ｒｉｃｈ  Ｔｅｘｔ  Ｆｏｒｍａｔ）で記述された文書ファイルである。
【００３４】
ステップＳ６０１において、解析対象となる文書群を指定する。解析対象となる文書群は単一の文書ファイルでもよいし、複数の文書ファイルから構成されるフォルダ名を指定する形式でもよい。
【００３５】
続くステップＳ６０２において、ステップＳ６０１で指定した文書群を展開する。フォルダ名を指定する複数の文書ファイルから構成される形式では、指定したフォルダ名以下に格納されたすべてのファイルがファイル名リストとして得られるものとする。
【００３６】
続くステップＳ６０３において、当該文書ファイルからテキスト抽出を実施する。
【００３７】
図７はテキスト抽出処理のフローチャートを示す図である。テキスト抽出処理では、何らかの論理構造を持つ文書ファイルを解析してテキスト情報を抽出する処理である。
【００３８】
例えば、ＯｐｅnＸＭＬ形式の場合、「＜ｗ：ｔ＞」タグが付与されているか、等でテキスト情報を抽出できる。
【００３９】
また、ＲＴＦ形式の場合は制御タグの部分を読み飛ばすことでテキスト情報を抽出できる。
【００４０】
このようなテキスト抽出の手法は、それぞれの形式ごとに公開されているため、ここで詳細な説明は行わない。
【００４１】
ステップＳ７０１において、当該文書ファイルから前述したようにテキスト情報を抽出する。
【００４２】
続くステップＳ７０２において、抽出したテキストが文字表であるかどうかを調べる。文字表であるかどうかの判断は、例えば、抽出したテキストの１行目や２行目等に特定の文字列が存在するか、或いは解析対象となっている文書ファイル名に特定の文字列が存在するか（例えば、ＴＡＢＬＥ００１．ＲＴＦというような「ＴＡＢＬＥ」文字列を含むファイル名になっている）、等から判断する。
【００４３】
これらの判断情報は予めルールとして登録しておき、システム管理者が修正できるものとする。
【００４４】
ステップＳ７０２において文字表と判断した場合、ステップＳ７０３に進み、文字表解析を実施する。図８〜図１１に文字表解析のフローチャートを示す。
【００４５】
図８に文字表解析処理のフローチャートを示す。文字表解析処理では、ページ単位で行解析を行い、文字密度を算出した後、その結果から列境界を推定する処理となる。
【００４６】
ステップＳ８０１において、リストバッファの初期化を行う。リストバッファは、解析すべき行の情報をページ単位で保持しておくためのバッファである。
【００４７】
続くステップS８０２より、文字表を構成するすべての行について、以下の処理を実施する。
【００４８】
ステップＳ８０３において、改ページが当該行にあるかどうかを判定する。ページの区切りとなるものは、例えば、ＲＴＦ形式であれば、ＦＦ（ＦｏｒｍＦｅｅｄ）を示す文字である。
【００４９】
改ページがなければ（ステップＳ８０３で「いいえ」の場合）、ステップＳ８０８に進み、当該行をステップＳ８０１で初期化したリストバッファに追加する。
【００５０】
その後、ステップＳ８０７に進み、すべての行に対して処理が終わっていなければ、ステップＳ８０２に戻る。
【００５１】
ステップＳ８０３で「はい」の場合、即ち当該行の改ページがある場合、ステップＳ８０４に進み、それまで蓄えたリストバッファの情報を用いて、文字密度算出処理を実施する。
【００５２】
文字密度算出処理のフローチャートを図１０に示す。ステップＳ１００１において、文字密度リストを作成する。
【００５３】
文字密度リストとは、任意の文字数を基準にして、行を構成する空白文字以外の文字の密度を算出したリストである。
【００５４】
図１３に文字密度の一例を示す。図１３において文字数３に対する文字密度を算出すると、文字列１３０１はすべて空白以外の文字であるので密度１である。
【００５５】
同様に文字列１３０２では1文字の空白文字を含むため密度０．６、文字列１３０３では２文字の空白文字を含むので密度０．３、文字列１３０４はすべて空白文字であるので密度０となる。
【００５６】
このような文字密度をすべての文字位置について算出し、リストにして保持する。尚、この文字数３というのは、任意に変更することが可能であり、例えば、対象とする文書の種類によって数値を変えても良い。
【００５７】
図１０に戻って、続くステップＳ１００２からステップＳ１００７において、文字列開始位置検出処理を実施する。
【００５８】
前述した文字密度リストの結果から、ステップＳ１００３において、密度０である部分を文字列の区切りとみなす（ステップＳ１００３において「はい」の場合）。
【００５９】
文字列の区切りでない場合（ステップＳ１００３において「いいえ」の場合）、ステップＳ１００７に進み、次の文字列の処理に進む。
【００６０】
なお、密度０であっても文字の組み合わせによっては当該部分を文字列の区切りとみなさない処理を行うことが必要である。
【００６１】
例えば、図１３において文字列１３０９と文字列１３１０は密度０の部分で分割されているが、開括弧と数値の間を分割すると意味のない２つの文字列になってしまい、後段の解析に失敗する可能性がある。
【００６２】
従って、このような場合、例えば、開括弧文字と数字の組み合わせが存在する場合、この部分を密度０とみなさないようにして、文字列１３０８を得る。
【００６３】
図１０に戻って、ステップＳ１００４において前述したような有効な区切り状態であるかを判断する。
【００６４】
有効な区切りでない場合（ステップＳ１００４において「いいえ」の場合）、ステップＳ１００７に進み、次の文字列の処理に進む。
【００６５】
有効な区切りであれば（ステップＳ１００４において「はい」の場合）、続くステップＳ１００５に進み、文字列の開始位置を算出する。
【００６６】
図１３の例では、開始位置１３０５、開始位置１３０６を検出することができる。続くステップＳ１００６において文字列生成処理を実施する。
【００６７】
ステップＳ１００５で検出した文字列開始位置を参照して、行を構成する文字列とその開始位置を登録する。
【００６８】
図１３の例では、開始位置０に文字列“Ａｎａｌｙｓｉｓ  Ｓｅｔ”、及び開始位置１８に文字列“ｎ  （％）”が生成される。
【００６９】
このような開始位置と文字列の組み合わせは、前述したリストバッファに蓄えられたすべての行の情報について実施されることで獲得される。
【００７０】
続くステップＳ１００８において、空白リスト生成処理を実施する。空白リストは前述の文字列生成処理で文字列としてみなした部分以外を空白文字として扱うためのリストである。
【００７１】
図１３の例では、空白領域１３０７を構成する位置「１２、１３、１４、１５、１６、１７」を空白リストとして登録する。
【００７２】
空白リスト生成処理も、前述の文字列生成処理と同様に、前述したリストバッファに蓄えられたすべての行の情報について実施されることで獲得される。
【００７３】
以上の処理を実施することで、文字表を構成する行の情報について、文字の密度と文字の組み合わせを基準とした文字列と空白位置の情報を得ることができる。
【００７４】
図８に戻って、続くステップＳ８０５において、表解析を行う。表解析では算出した文字密度情報を用いて、表全体の解析処理を実施する。
【００７５】
図９に表解析処理のフローチャートを示す。表の構造を「タイトル部」「ヘッダ部」「データ部」「フッタ部」から構成されているものとする。
【００７６】
図３の例で言えば、領域３０１がタイトル部、領域３０２がヘッダ部、領域３０３がデータ部、領域３０４がフッタ部となる。これら各部の区切りとなるのが横罫線となる。
【００７７】
表解析処理では、前述した文字密度情報に対して、横罫線を検出しながら各領域に対して行単位で処理を実施していく。
【００７８】
横罫線は行を構成する文字の種類を確認し、空白文字以外の文字が1種類で且つ行全体の文字数に対して空白文字以外の文字が半分以上を占めている状態である場合、横罫線と見なす。
【００７９】
図３の例で示すと、領域３０１と領域３０２の間の半角ハイフン文字で構成された行、及び領域３０２と領域３０３の間の半角ハイフン文字で構成された行、及び領域３０３と領域３０４の間の半角ハイフン文字で構成された行が横罫線である。
【００８０】
図９に戻って、ステップＳ９０１において、前述した文字密度情報から行情報を取り出す。続くステップＳ９０２において、当該行情報が横罫線かどうかを調べる。
【００８１】
横罫線でない場合（ステップＳ９０２において「いいえ」の場合）、ステップＳ９０３に進み、獲得した当該行情報を一時的に保持しておき、ステップＳ９０１に戻って次の行情報を取り出す。
【００８２】
横罫線である場合（ステップＳ９０２において「はい」の場合）、ステップＳ９０４に進み、それまで一時的に保持しておいた行情報に対して、タイトル部抽出処理を実施する。
【００８３】
タイトル部抽出処理では、表のタイトルに相当する文字列及び表番号を抽出する等の抽出処理を、前述した文字密度情報に対して行単位で正規表現等を用いて実施する。
【００８４】
図３の例では、領域３０１に含まれる文字密度情報は、「Ｔａｂｌｅ  １：  Ｓｕｍｍａｒｙ  ｏｆ  Ａｎａｌｙｓｉｓ  Ｓｅｔｓ  ｏｆ  Ｄａｔａ  Ａ−１」がひとつ含まれていることがわかる。
【００８５】
この場合、例えば、「：」文字を区切りとし、その前に表番号が記述されている、という表記が文書群の中で定められているならば、正規表現を用いて表番号と表題を自動的に検出することが可能となる。
【００８６】
前述の例では表番号「１」、表題「Ｓｕｍｍａｒｙ  ｏｆ  Ａｎａｌｙｓｉｓ  Ｓｅｔｓ  ｏｆ  Ｄａｔａ  Ａ−１」と抽出できる。
【００８７】
図９に戻って、続くステップＳ９０５からの処理によって、ヘッダ部抽出処理に進む。ステップＳ９０１、ステップＳ９０２、ステップＳ９０３と同様に、ステップＳ９０５、ステップＳ９０６、ステップＳ９０７において、行情報を一時的に保持し、横罫線を検出した場合（ステップＳ９０６で「はい」の場合）、ステップＳ９０８に進む。
【００８８】
ステップＳ９０８においてヘッダ部の列解析処理を行う。ヘッダ部の列解析処理では、ヘッダ部のみで行の畳み込みを行い、列境界の候補を得る。図３の例では、領域３０２に対して列解析処理を実施する。
【００８９】
図１１に列解析処理のフローチャートを示す。図１１のステップＳ１１０１において、前述した一時的に保持された行情報を用いて、当該領域のすべての行データについて、１行に畳み込む。その結果、文字が存在する列とそうでない列に分別される。
【００９０】
続くステップＳ１１０２において、空白リストマージ処理を実施する。空白リストマージ処理は、図１０のステップＳ１００８で生成した空白リストについて、すべての行において空白と登録されている列及びそうでない列の情報を、図１１のステップ１１０１で得られた畳み込み情報にマージする。
【００９１】
図１４に行畳み込み処理及び空白リストマージ処理の実施例を示す。領域１４０１は図３における領域３０２である。
【００９２】
この文字集合に対して、行畳み込み処理を実施すると、図１４の文字情報１４０２として、文字が存在する列と存在しない列が得られる。
【００９３】
文字情報１４０２では、文字が存在する列を「Ｘ」で、文字が存在しない列を空白文字で表している。
【００９４】
続く空白リストマージ処理では、領域１４０１の１行目にある文字列「Ｓｅｔ  １」及び文字列「Ｓｅｔ  ２」にある空白文字、及び２行目にある文字列「Ａｎａｌｙｓｉｓ  Ｓｅｔ」にある空白文字は、空白リストには存在しないので、その列が非空白文字となり、文字情報１４０３を得る。
【００９５】
図１１に戻り、ステップＳ１１０２で得られた文字情報から文字列としての開始位置を、ステップＳ１１０３において列境界として登録する。
【００９６】
図１４における文字列開始位置１４０４の上向きの矢印で示される位置が列境界となる。
【００９７】
図１１に戻り、続くステップＳ１１０４以降において、任意の分割パターンが各列に存在するかを調べる処理を実施する。
【００９８】
任意の分割パターンとは、例えば、図３における「ｎ  （％）」である。列境界の特定が困難な場合や、明確に列境界として分割したい場合、システムに予め分割パターンを登録しておくことで、列境界の検出精度を上げる目的で利用する。
【００９９】
対象となるのはステップＳ１１０１で畳み込みを実施した行であり、ステップＳ１１０４において当該行を選択し、続くステップＳ１１０５において、ステップＳ１１０３で登録した列境界情報に基づいて当該行を列分割する。
【０１００】
ここで得られた列データについて、続くステップＳ１１０６以降で分割パターンが存在するかどうかを調べる。
【０１０１】
後述する分割列として登録されている列であれば（ステップＳ１１０７において「はい」の場合）、ステップＳ１１１２に進み、分割列として指定された項目に列データを分割するための列境界情報を追加する。
【０１０２】
分割列として登録されていない列である場合（ステップＳ１１０７において「いいえ」の場合）、ステップＳ１１０８に進む。
【０１０３】
ステップＳ１１０８において、任意の分割パターンと列データが一致するかどうかを調べる。
【０１０４】
一致する場合（ステップＳ１１０８において「はい」の場合）、ステップＳ１１０９に進み、当該列が分割対象列であることを登録する。
【０１０５】
登録された列情報は前述したステップＳ１１０７において参照される。分割パターンと一致しない場合（ステップＳ１１０８で「いいえ」の場合）、ステップＳ１１１０に進み、次の列データの処理を実施する。
【０１０６】
すべての列データの確認を終了すると、ステップＳ１１１１に進み、すべての畳み込み行に対して列分割を実施すれば、列解析処理を終了する。
【０１０７】
図９に戻って、続くステップＳ９０９からの処理によって、データ部抽出処理に進む。ステップＳ９０１、ステップＳ９０２、ステップＳ９０３と同様に、ステップＳ９０９、ステップＳ９１０、ステップＳ９１１において、行情報を一時的に保持し、横罫線を検出した場合（ステップＳ９１０で「はい」の場合）、ステップＳ９１２に進む。
【０１０８】
ステップＳ９１２においてデータ部の列解析処理を行う。データ部の列解析処理では、データ部のみで行の畳み込みを行い、列境界を得る。
【０１０９】
図１４の例では、領域１４０５から文字情報１４０６を獲得した後、文字情報１４０７を得る。
【０１１０】
最終的に文字列開始位置１４０８の上向き矢印で示される位置を獲得して、列境界が登録される。
【０１１１】
図９におけるステップＳ９１２における列解析処理はステップＳ９０８の列解析処理と同等なため、説明は省略する。
【０１１２】
続くステップＳ９１３からの処理によって、フッタ部抽出処理に進む。ステップＳ９０１、ステップＳ９０２、ステップＳ９０３と同様に、ステップＳ９１３、ステップＳ９１４、ステップＳ９１５において、行情報を一時的に保持し、横罫線を検出した場合（ステップＳ９１４で「はい」の場合）、ステップＳ９１６に進む。
【０１１３】
ステップＳ９１６において、フッタ抽出処理を実施する。図３の例の場合、領域３０４が該当する。
【０１１４】
ヘッダ領域と同様に「：」文字を区切りとして、正規表現を用いて、項目名「Ｎｏｔｅ」、項目内容「ｘｘｘｘｘ」を自動的に検出することが可能となる。
【０１１５】
続くステップＳ９１７において、列推定処理を実施する。列推定処理では、ステップＳ９０８で獲得したヘッダ部における列境界と、ステップＳ９１２で獲得したデータ部における列境界に対して、一致する列境界を推定する処理となる。
【０１１６】
図１６に列推定処理のフローチャートを示す。まず、ステップＳ１６０１において、変換テーブルを生成する。
【０１１７】
変換テーブルは、文字表を構成する文字がどの列に属しているかを獲得するためのテーブルである。
【０１１８】
具体的には、図９のステップＳ９１２において実施した列解析（データ部）で得られた列境界情報、及びデータ部を畳み込んだ文字の位置情報から生成する。
【０１１９】
図１４の例では、文字情報１４０７を見ると、文字位置０から文字位置９までは、文字開始位置１４０９の区間に属している。
【０１２０】
ここで文字開始位置１４０９の区間に相当する表セルの索引番号を０とした場合、前記変換テーブルでは、文字位置として０から９までの数値を与えたとき、索引番号０を返す構造を持つテーブルであればよい。
【０１２１】
このような変換テーブルは、例えば、文字表の横幅に相当する文字列長と、列解析で得られた列数に応じた区間数の２次元の行列式で表現することが可能である。
【０１２２】
続くステップＳ１６０２でヘッダ部推定処理を実施する。ヘッダ部推定処理は、図９のステップＳ９０８において実施した列解析（ヘッダ部）で得られた列境界情報と、前記変換テーブルから、ヘッダ部のどの列がデータ部のどの列と一致しているかを推定する処理である。
【０１２３】
図１４の例では、文字情報１４０３を見ると、文字位置０から文字位置１１までは、文字開始位置１４１０の区間に属している。
【０１２４】
従って、前記変換テーブルの例と合わせると、最も文字位置が重複している区間が重複文字位置０から文字位置９までの文字開始位置１４０９であるため、ヘッダ部の文字開始位置１４１０とデータ部の文字開始位置１４０９が同じ列であると推定できる。
【０１２５】
このような推定処理は、例えば、ヘッダ部の文字位置情報を１次元配列に表現して（即ち、文字開始位置１４１０の区間に属している文字位置を１、それ以外を０に設定する）、２次元の行列式として表現した前記変換テーブルをとの内積を算出することで、最も重複した索引番号を最大値に持つ１次元行列式を得ることができる。
【０１２６】
このような処理を実施することで、ヘッダ部とデータ部で列情報がずれていても、最大値を持つ索引番号を見れば、機械的にはずれた文字表であっても、そのずれを許容して正しく列情報を一致させることが可能となる。
【０１２７】
また、表の一部にデータがないような文字表でも、同様に正しく列情報を一致させることも可能である。
【０１２８】
続くステップＳ１６０３からＳ１６０５において、データ部のすべてのセルに対して、前記ステップＳ１６０２で得られたヘッダ部へのリンク情報を登録していく。
【０１２９】
各セルは前記ヘッダ部推定処理と同様の処理を実施することで、当該セルに対応する索引番号を獲得することができる。
【０１３０】
前記ステップＳ１６０２で得られたヘッダ部の索引番号の中に、獲得した索引番号と一致するものを当該セルに対するヘッダ部としてリンク情報を登録する。
【０１３１】
以上の列推定処理を実施することで、ヘッダ部とデータ部の列情報の一致を推定し、データ部の各セルに対して、正しくヘッダ部情報を登録することが可能となる。
【０１３２】
図９に戻って、表解析処理を終了する。なお、ステップＳ９０４及びステップＳ９１６における正規表現等の指定は、システム管理者によって任意に指定できるものである。
【０１３３】
図８に戻って、ステップＳ８０６において、表解析が終了したので、当該表データを一時的に保持していたリストバッファを初期化する。
【０１３４】
続くステップＳ８０７において、まだ処理すべき行情報があれば、ステップＳ８０２へ戻って、文字表解析処理を継続する。
【０１３５】
処理すべき行情報がなければ、ステップＳ８０９に進み、リストバッファにデータが残っていれば（ステップＳ８０９で「いいえ」の場合）、ステップＳ８０４に戻り、文字表解析を続ける。
【０１３６】
リストバッファにデータがなければ（ステップＳ８０９で「はい」の場合）、文字表解析処理を終了する。
【０１３７】
この時点で、例えば、図３の例を解析したことで、図４に示すような縦罫線情報を得ていることを意味している。
【０１３８】
図７に戻って、続くステップＳ７０４に進み、表のグラフ化を実施する。
【０１３９】
図１５に文字表のグラフ化についてのフローチャートを、図５に図３の文字表をグラフ化した実施例を示す。
【０１４０】
文字表のグラフ化は領域ごとに順に実施することができる。ステップＳ１５０１において、ヘッダ領域から表題を登録する。
【０１４１】
表題は前述したように図８におけるステップＳ８０２で抽出したものである。図５において、ノード５０１からアーク「ｔｉｔｌｅ」が定義され、その先にノード５０２が設定される。
【０１４２】
続くステップＳ１５０２において、各列の形式を取得する。例えば、図４において、セル４０１の下にセル４０２とセル４０３があることがわかるので、この場合ひとつのアークを２つに分割した構造を持つグラフとして定義できる。即ち、図５におけるノード５０３の構造として定義される。
【０１４３】
続くステップＳ１５０３からステップＳ１５０６にかけて、各行のデータを登録する。図４における行４０４を例に説明する。
【０１４４】
ステップＳ１５０４において当該行データを登録する。図５において、ノード５０４が作成され、アーク「Ａｎａｌｙｓｉｓ  Ｓｅｔ」を通じてノード５０５が作成される。
【０１４５】
数値と割合については前述したノード５０３の構造を用いて、ノード５０８及びノード５０９及びノード５１０が作成される。
【０１４６】
続くステップＳ１５０５において、付属情報をノードに付与する。行４０４は表内において５行目であるので、アーク「ｒｏｗ」を通じてノード５０７が作成される。
【０１４７】
また、ノード５０５内の文字「ｍｏｄｅｌ Ａ」は字下げされているのでノード５０５からアーク「ｉｎｄｅｎｔ」を通じてノード５０６が作成される。
【０１４８】
さらに、ノード５０８及びノード５０９及びノード５１０の各末端ノードに対して、表の列番号を表すアーク「ｃｏｌ」を通じて列番号を登録するノードが生成される。
【０１４９】
すべての行データが登録されると、ステップＳ１５０７に進み、フッタ部を登録する。アーク「ｆｏｏｔｅｒ」を通じてノード５１１を作成される。
【０１５０】
また前述した付属情報と同等なノードを作成し、さらに列連結を表すアーク「ｃｏｌｓｐａｎ」を通じてノード５１２を作成して、列連結数７を格納する。
【０１５１】
なお、各ノードに付与される付属情報については、図５に示したもの以外にも必要に応じて自由に定義及び作成できることは言うまでもない。
【０１５２】
図７に戻って、グラフ化を行った後、テキスト抽出処理を終了する。
【０１５３】
ステップＳ７０２において文字表と判断しない場合、ステップＳ７０５に進み、テキスト解析を実施する。
【０１５４】
テキスト解析では、形態素解析や構文解析を行い、文章をマッチング可能な構造化された状態にしておく。
【０１５５】
図１２は文章「Ｍｏｄｅｌ  ＡはＳｅｔ  １を用いたとき、５５件（２３．９％）になった。」を構文解析した結果を示したものである。
【０１５６】
ここで簡単な文章と表のマッチングの実施例を示しておく。各ノードから名詞句及び数値を取り出すと、ノード１２０１からは「Ｍｏｄｅｌ  Ａ」、ノード１２０２からは「Ｓｅｔ  １」、ノード１２０３からは「５５」及び「２３．９」が抽出できる。
【０１５７】
このとき、得られたキー「Ｍｏｄｅｌ  Ａ」について、図５の有向グラフ上を探索すると、ノード５０４以下にあるノード上にあることがわかる。
【０１５８】
ここからアーク「Ｓｅｔ  １」をたどると、ノード５０８に到達し、そこに格納されている数値「５５」及び「２３．９」を得ることができる。
【０１５９】
前記文章から得られた数値も「５５」及び「２３．９」であるので、前記文章の記述に誤りがないことがわかる。
【０１６０】
図７に戻り、ステップＳ７０５でテキスト解析を行った後、テキスト抽出処理を終了する。
【０１６１】
図６に戻り、テキスト抽出処理が終了すると、ステップＳ６０４に進み、ステップＳ６０３で得られた表及び文章の解析データを登録する。
【０１６２】
続くステップＳ６０５に進み、次の文書があればステップＳ６０２に進み、文書がなければ文書解析処理を終了する。
【０１６３】
なお、図６のステップＳ６０１の文書群の指定方法について、複数の文書ファイルから構成される場合、前述したようにフォルダを指定する形式を基本とするが、圧縮ファイルで指定する形式やファイル名リストで指定する等、いずれの形式においてもステップＳ６０２以降で示したような同等の展開ができる形式であれば、その指定形式はどのような形式でもよいことは言うまでもない。
【０１６４】
以上、本発明によれば、文字情報で記述された表データから正しく項目名や数値を読み取って構造化されたデータに再構築することが可能となり、文書とのマッチング等の検証作業を効率的に実施することが可能となる。
【０１６５】
以上、実施形態例を詳述したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記録媒体等としての実施態様をとることが可能であり、具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【０１６６】
なお、上述した各種データの構成及び表示の構成及びその内容はこれに限定されるものではなく、用途や目的に応じて、様々な内容で構成されることは言うまでもない。
【０１６７】
また、本発明は、複数の機器から構成されるシステムに適用しても、ひとつの機器から成る装置に適用しても良い。
【０１６８】
また、本発明は、システムあるいは装置にプログラムを供給することによって達成される場合にも適用できることは言うまでもない。
【０１６９】
この場合、本発明を達成するためのプログラムを格納した記録媒体を該システムあるいは装置に読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
【０１７０】
さらに、本発明を達成するためのプログラムをネットワーク上のサーバ、データベース等から通信プログラムによりダウンロードして読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
【０１７１】
なお、上述した各実施形態およびその変形例を組み合わせた構成も全て本発明に含まれるものである。
【符号の説明】
【０１７２】
１００  文書分析装置
１０１  解析部
１０２  解析データ
１０３  出力部
１０４  文書
２０１  ＣＰＵ
２０２  ＲＡＭ
２０３  ＲＯＭ
２０４  システムバス
２０５  入力コントローラ
２０６  ビデオコントローラ
２０７  メモリコントローラ
２０８  通信Ｉ／Ｆ（インターフェース）コントローラ
２０９  入力装置
２１０  表示装置
２１１  外部メモリ
【図１】
2020060832.tif 000003
【図２】
2020060832.tif 000004
【図３】
2020060832.tif 000005
【図４】
2020060832.tif 000006
【図５】
2020060832.tif 000007
【図６】
2020060832.tif 000008
【図７】
2020060832.tif 000009
【図８】
2020060832.tif 000010
【図９】
2020060832.tif 000011
【図１０】
2020060832.tif 000012
【図１１】
2020060832.tif 000013
【図１２】
2020060832.tif 000014
【図１３】
2020060832.tif 000015
【図１４】
2020060832.tif 000016
【図１５】
2020060832.tif 000017
【図１６】
2020060832.tif 000018