以下、図面を参照して本発明の実施の形態の一例について説明する。
図1は、本発明の実施形態における文書分析装置(情報処理装置)の構成を示す図である。
文書分析装置100は、解析部101と、解析データ102と、照合部103と、照合データ104と、表示部105と、を備える。なお、解析データ102及び照合データ104は後述する外部メモリ211等の記憶装置に記憶されている。
文書分析装置100は、テキスト文書106が解析部101に入力されて解析がなされると表データ及び文章データが抽出され解析データ102に記憶される。
そして、照合部103は、解析部101における解析結果を受けて、解析データ102から表データ及び文章データを取り出して照合処理を実施し、照合データ104に照合結果を記録する。
表示部105は、照合データ104から照合結果を取り出し、解析データ102に記録された解析結果と合わせて利用者に照合結果を表示する。これら一連の文書分析手法については、詳しく後述する。
次に、図1の文書分析装置100のハードウェア構成について、図2を用いて説明する。
図中、CPU201は、システムバス204に接続される後述の各デバイスやコントローラを統括的に制御する。
また、ROM203あるいは外部メモリ211には、CPU201の制御プログラムであるBIOS(Basic Input/Output System)やオペレーティングシステムプログラム(以下、OS)や、文書分析装置100に後述する各種の処理を実行させるために必要な各種プログラムやデータ等が記憶されている。RAM202は、CPU201の主メモリ、ワークエリア等として機能する。
CPU201は、処理の実行に際して必要なプログラム等をRAM202にロードして、プログラムを実行することで後述する各種処理を実現するものである。
また、入力コントローラ(入力C)205は、入力装置209からの入力を制御する。入力装置209は、例えばメカニカルキーボードやソフトウェアキーボード、タッチパネル等で構成される。
ビデオコントローラ(VC)206は、表示装置210への表示を制御する。表示装置210は、例えば液晶ディスプレイ等で構成される。
メモリコントローラ(MC)207は、ブートプログラム、ブラウザソフトウエア、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、各種データ等を記憶するハードディスク(HD)やソリッドステートディスク(SSD)或いはPCMCIAカードスロットにアダプタを介して接続されるコンパクトフラッシュメモリ等の外部メモリ211へのアクセスを制御する。
通信I/Fコントローラ(通信I/FC)208は、ネットワークを介して、外部機器と接続・通信するものであり、ネットワークでの通信制御処理を実行する。例えば、TCP/IPを用いたインターネット通信等が可能である。
なお、CPU201は、例えばRAM202内の表示情報用領域へアウトラインフォントの展開(ラスタライズ)処理を実行することにより、表示装置210上での表示を可能としている。
以上が、文書分析装置100のハードウェア構成の説明であるが、後述する各種の処理を実行可能であれば、必ずしも図2に記載のハードウェア構成を有していなくとも構わないことは言うまでもない。
次に、文書分析装置100における文書分析処理について、図3から図21を用いて、詳しく説明する。
図3は、文書分析処理のフローチャートを示す図である。文書分析処理では、何らかの論理的構造を持つ文書ファイルを分析対象としており、例えばOpenXMLで記述された文書である。
まず、ステップS301では、ページ番号を初期化する。ページ番号は後述するページ情報の管理属性のひとつとして利用する。
続くステップS302で表・文章抽出処理を行う。処理の詳細な流れについては、図4のフローチャートに示す。
図4に表・文章抽出処理のフローチャートを示す。表・文章抽出処理では、文書ファイルから表部分と文章部分を取り出す処理となる。
ステップS401において、分析対象の文書から本文を構成する要素を保持している本文要素を指定する。具体的には、例えばOpenXMLの場合、「<w:body>」タグを指定する。
本文要素は複数の子要素から構成されているので、ステップS402からステップS409において、本文要素に含まれるすべての子要素を検査して表と文章を取り出す。
ステップS403において、当該子要素が段落属性を持つかを検査する。具体的には、例えばOpenXMLの場合、「<w:p>」タグであるかを検査する。
段落属性を持つ場合(ステップS403において「はい」のとき)、ステップS404に進み、段落解析を実施する。段落解析については図5に示すフローチャートを用いて後述する。
段落属性を持たない場合(ステップS403において「いいえ」のとき)、ステップS405に進む。
ステップS405において、当該子要素が表属性を持つかを検査する。具体的には、例えばOpenXMLの場合、「<w:tbl>」タグであるかを検査する。
表属性を持つ場合(ステップS405において「はい」のとき)、ステップS406に進み、表解析を実施する。表解析については図6に示すフローチャートを用いて後述する。
表属性を持たない場合(ステップS405において「いいえ」のとき)、ステップS409に進み、次の子要素について抽出処理を実施する。すべての子要素を検査すると、表・文章抽出処理を終了する。
次に、前述した段落解析について説明する。図5は段落解析処理のフローチャートである。段落属性を持つ子要素についても、本文要素と同様に、複数の子要素から構成されているので、ステップS501からステップS509において、それぞれの子要素を検査して必要な情報を得ている。
ステップS502において、当該子要素がページ区切り属性を持つかを検査する。ページ区切り属性を持つ場合(ステップS502において「はい」のとき)、ステップS503に進み、図3における前記ステップS301で初期化したページ番号をひとつ加算する演算を実施する。
ページ区切り属性を持たない場合(ステップS502において「いいえ」のとき)、ステップS504に進む。
ステップS504では、当該子要素が文章属性を持つかを検査する。具体的には、例えばOpenXMLの場合、「<w:t>」タグであるかを検査する。
文章属性を持つ場合(ステップS504において「はい」のとき)、ステップS505に進み、当該子要素が持つ文章に対して形態素解析を実施し、続くステップS506で構文解析を実施する。
形態素解析と構文解析の実施例について、図9~図11を用いて説明する。
図9の文901「項目Aではパターン2の場合23件(67.6%)になったが、項目B-2では10件に留まった。」に対する形態素解析処理の実施例を図10に示す。
なお、本発明においては一般的な形態素解析処理で用いられる品詞に加えて、「数」+「助数詞」の形態素の組み合わせに対して、「数量表現」という名称の品詞を割り当てている。
次に、図11に文901に対する構文解析処理の実施例を示す。構文解析は文を文節単位に切り分けたとき、どの文節がどの文節に係るかを示している。
図5に戻って、ステップS507における数値情報抽出処理について説明する。数値情報抽出処理とは、文から数量表現を含むフレーズを抽出する処理であり、数量表現に関連する名詞句と合わせて抽出する処理である。図13に数値情報抽出処理のフローチャートを示す。
図13のステップS1301において、キューを初期化する。続くステップS1302で、数量表現を含む文節を前記キューに追加する。即ち、図10の形態素解析結果を参照して図11から数量表現を含む文節を前記キューに追加する。図10及び図11の実施例では、文節1104及び文節1107が該当する。
続くステップS1303からステップS1312にかけて、前記キューにあるデータを処理する。
ステップS1304で前記キューから文節データを取り出し、続くステップS1305で、ステップS1304で取り出した文節に係る文節があるかを調べる。
係る文節がある場合(ステップS1305で「はい」の場合)、ステップS1306に進み、名詞句の探索登録処理を実施する(詳細は、図14で説明)。係る文節がない場合(ステップS1305で「いいえ」の場合)、ステップS1308に進む。
図14に名詞句の探索登録処理のフローチャートを示す。名詞句の探索登録処理では、図13のステップS1305で判定した当該文節を、葉の方に向かって探索しながら(図11において矢印を逆に辿る)各文節に含まれる名詞句を登録する。
まず、ステップS1401において登録モードを通常モードに初期化する。登録モードは名詞句を登録する際の属性を示すものである。登録モードについては後述する。
続くステップS1402において、探索中の文節が連用節かどうか調べる。連用節である場合(ステップS1402で「はい」の場合)、ステップS1403に進み、登録モードを参照モードに変更する。連用節ではない場合(ステップS1402で「いいえ」の場合)、ステップS1403をスキップする。
続いてステップS1404に進み、当該文節内に名詞句があるかどうかを検査する。名詞句がある場合(ステップS1404で「はい」の場合)、ステップS1405に進み、検出した名詞句を登録する。名詞句がない場合(ステップS1404で「いいえ」の場合)、ステップS1405をスキップする。
続いてステップS1406に進み、当該文節が末端であるか、即ち係り元が存在するかしないか、を検査する。係り元がない場合(ステップS1406で「はい」の場合)、名詞句の探索登録処理を終了する。係り元がある場合(ステップS1406で「いいえ」の場合)、ステップS1407に進み、当該文節に係る文節へ遷移し、ステップS1402に戻って探索的に登録処理を継続する。
図13に戻って、ステップS1307に進み、前記名詞句の探索登録処理で何らかの名詞句が登録できたかどうかを確認する。名詞句が登録できた場合(ステップS1307で「はい」の場合)、キューに文節データが存在すればステップS1304に戻り、次の文節データの処理に移る。キューに文節データがない場合は数値情報抽出処理を終了する。
また、ステップS1307において「いいえ」の場合、即ちステップS1306の名詞句の探索登録で何も名詞句が登録されなかった場合、ステップS1308に進む。
ステップS1308では兄弟節があるかどうかを検査する。兄弟節とは当該文節が係る先の文節に係る別の文節のことである。
例えば図11において、文節1104は係り先が文節1105であるので、その兄弟節は文節1103と文節1101となる。
ステップS1305で当該文節に直接係る文節がない場合(ステップS1305で「いいえ」の場合)や当該文節に直接係る文節があるものの有効な名詞句が存在しなかった場合(ステップS1307で「いいえ」の場合)、兄弟節を名詞句の探索対象とする。
兄弟節がない場合(ステップS1308で「いいえ」の場合)、キューに文節データが存在すればステップS1304に戻り、次の文節データの処理に移る。
兄弟節がある場合(ステップS1308で「はい」の場合)、ステップS1309に進み、ステップS1306と同様に名詞句の探索処理を実施する。
図11を例に名詞句の探索処理を説明する。まず、数量表現を含む文節をキューに登録する。文節1104と文節1107が該当する。
文節1104をキューから取り出し、係り元があるかどうかを判定するが、文節1104は末端ノードなので、兄弟節を探索対象とする。
文節1104の兄弟節は、文節1103と文節1101となり、これらから名詞句を抽出すると、それぞれ「場合」「パターン2」「項目A」となる。これらの名詞句は通常モードとして登録される。
次に、文節1107をキューから取り出し、係り元を検査するが、これも末端のノードであるため、兄弟節が探索対象となる。
文節1107の兄弟節は、文節1106、文節1105である。文節1106からは名詞句「項目B-2」が抽出される。一方、文節1105は逆接の接続詞を持つため連用節と判定され、ここから抽出される名詞句「場合」「パターン2」「項目A」は参照モードとして登録される。
以上の抽出例を図12に示す。文節1104は数量表現を2種類持つため、それぞれに抽出した名詞句を登録している。登録された名詞句は組み合わせを持ち、第1項が通常モードで登録されたもの、第2項が参照モードで登録されたものとなる。
例えば図12において、数量表現1201に対して、通常モードによる登録が1202、参照モードによる登録が1203である。
なお、1203は空であるので、参照モードでの登録がなかったことを示している。これら2種類の組み合わせによる表データとのマッチング処理については後述する。
図5に戻って、ステップS508において、文章登録処理を実施する。文章登録処理は、前記段落解析で抽出した文章と、前記数値表現抽出で抽出した数値表現をページ情報と関連させて管理する処理である。
文901がページ番号20に記述されていた例として、図15に文章登録の一例を示す。ノード1502がひとつのページを表し、これにラベル付き有向グラフとして表現している。
ラベル「page」はページ番号を示し、要素1501にページ番号「20」を持つ。同様にラベル「paragraph」は段落リストを示す。
段落ノードからのラベル「sentences」は文章リストを示し、要素1503は文901を表し、要素1505は文901の次の文章を示すラベル「next」でリンクされている。
文901からラベル「ID」でリンクされた要素1510は文IDを表す。文IDは任意に割り振られたID番号であり、一意に文を識別するために用いる。文IDの一例としては、固定長の昇順の数字で表現されるものである。
前記数値表現抽出で抽出した数値表現は属性ラベル「numinfo」として要素1504に登録される。
文章登録されたデータは、論理的には図15に示すような構造を持つことが望まれるため、実際のデータ形式はXMLでもJSONでも、構造化された形式であれば構わない。
図5に戻って、ステップS508で文章登録処理が完了すると、ステップS509に進み、すべての子要素が処理されていなければステップS502に進んで同様に処理を続ける。
すべての子要素の処理が終了すれば、ステップS510に進む。ステップS510では段落属性管理を実施する。段落属性管理は範囲特定処理等の管理に用いられるものであるので、後述する。
図4に戻って、ステップS406における表解析について説明する。図6に表解析のフローチャートを示す。
ステップS601において、行番号の初期化を行う。続くステップS602からステップS606において、すべての行に含まれる子要素の解析処理を実施する。
ステップS603に進み、取得した子要素が行を表す要素かどうかを検査する。具体的には、例えばOpenXMLの場合、「<w:tr>」タグであるかを検査する。
行要素でない場合(ステップS603で「いいえ」の場合)ステップS605に進む。行要素である場合(ステップS603で「はい」の場合)、ステップS604に進み、行解析処理を実施する。
図7に行解析処理のフローチャートを示す。行解析処理は、行要素に含まれるセル要素の解析処理を実施する。
まず、ステップS701において列番号を初期化する。続くステップS702からステップS706において、行に含まれるすべての子要素の解析処理を実施する。
ステップS703に進み、抽出した子要素がセル要素かどうかを検査する。具体的には、例えばOpenXMLの場合、「<w:tc>」タグであるかを検査する。
セル要素でない場合(ステップS703で「いいえ」の場合)、ステップS705に進む。セル要素である場合(ステップS703で「はい」の場合)、ステップS704に進み、セル解析処理を実施する。
図8にセル解析処理のフローチャートを示す。セル解析処理は、セル要素に含まれる子要素の解析処理を実施する。
まず、ステップS801において文字列を初期化する。この文字列は表のセルに含まれる文字列を登録するためのものである。
続くステップS802からステップS813にかけて、すべての子要素について解析処理を実施する。
ステップS803に進み、抽出した子要素が文章要素であるかどうかを検査する。具体的には、例えばOpenXMLの場合、「<w:t>」タグであるかを検査する。
文章要素でない場合(ステップS803で「いいえ」の場合)、ステップS807に進む。文章要素である場合(ステップS803で「はい」の場合)、ステップS804に進む。
ステップS804では、当該セルにおいて字下げがなされているかどうかを検査する。字下げの判定基準としては、字下げタグを持つ或いは字下げ要素を持つ(具体的には、例えばOpenXMLの場合、「<w:ind>」タグを持つ)或いは文字列の先頭にタブ文字や空白文字等が挿入されている等で判断する。
字下げされている場合(ステップS804で「はい」の場合)、ステップS805に進み、字下げ属性を当該セル情報に設定する。字下げされていない場合(ステップS804で「いいえ」の場合)、ステップS805をスキップしてステップS806に進む。
ステップS806ではステップS801で初期化した文字列の登録先に当該セルが持つ文字列を追加する。文字列は追加されるため、文字列の登録先に何らかのデータが存在するのであれば、新しい文字列を既存文字列に追記する方式となる。
続いてステップS807に進み、属性情報を持つ子要素かどうかを検査する。属性情報からは当該セルの連結情報を得る。連結情報とは、複数のセルを行方向や列方向に連結して大きなセルにする情報のことを示す。
ステップS807において当該セルが属性情報を持たない場合(ステップS807で「いいえ」の場合)、ステップS813に進み、次の子要素の処理に移る。当該セルが属性情報を持つ場合(ステップS807で「はい」の場合)、ステップS808に進み、行連結の属性情報かどうかを検査する。
行連結の開始属性である場合(ステップS808で「はい」の場合)、ステップS810に進み、行連結の開始属性を当該セルに登録する。行連結の開始属性でない場合(ステップS808で「いいえ」の場合)、行連結中である継続セルであるため、当該セルに継続セル属性を登録する。
続いてステップS811に進み、列方向の連結属性であるかどうかを検査する。列連結属性である場合(ステップS811で「はい」の場合)、ステップS812に進み、当該セルに列連結数を登録する。列連結属性でない場合(ステップS811で「いいえ」の場合)、ステップS812をスキップする。
続いて、ステップS813に進み、すべての子要素の処理が終わっていなければ、ステップS803に戻って同様にセル解析処理を継続する。
すべての子要素の処理が終了していれば、ステップS814に進み、ステップS806で追記した文字列全体を当該セルの文字列として登録する。
続くステップS815では、図6で算出している行番号と図7で算出している列番号を当該セルに登録し、セル解析処理を終了する。
図7に戻って、ステップS705において、次の行列番号登録のための列番号を算出する。このときステップS704で列連結属性によって列連結数が当該セルに登録されている場合は、その数値を加算し、そうでない場合は1を加算することによって列番号を算出する。
ステップS706に進み、すべての列の処理を完了していれば、行解析処理を終了する。未処理の列データがある場合はステップS703に進み、同様の解析処理を継続する。
図6に戻って、ステップS605に進み、次の行列番号登録のための行番号を算出する。続いてステップS606に進み、すべての行処理を完了していればステップS607に進み、そうでなければステップS603に戻って同様に解析処理を継続する。
ステップS607において、行連結の処理を実施する。行連結の処理は、前述した図8のステップS809及びステップS810で登録した行連結の属性を用いて算出する。算出した行連結数を当該セルの行連結数に登録する。
続くステップS608において、解析を完了した表に対して表ID登録処理を実施する。表IDとは任意に割り振られたID番号であり、一意に表を識別するために用いる。表IDの一例としては、固定長の昇順の数字で表現されるものである。ステップS608の表ID登録処理を実施して表解析処理を終了する。
図6における表解析処理の一例を、図16及び図17に示す。図16は表の一例であり、この表に対して図6の表解析処理を実施して得られる解析データを図17に示す。
図17の各要素は、「表記」「列番号」「行番号」「列連結数」「行連結数」の組み合わせであり、前記組み合わせをリスト構造に格納することで表全体を表現することができる。
例えば、図16においてセル1601は、図17の組み合わせ1701になる。組み合わせ1701は、表記が「パターン2」、列番号が「3」、行番号「0」、列連結数「2」、行連結数「1」を意味する。
図4に戻って、ステップS407において、図6の表解析で得られた表解析結果を有向グラフに変換する。この有効グラフへの変換に関する処理について、図19にグラフ化処理のフローチャートとして示す。
まず、ステップS1901において、図17に示す組み合わせ構造から行抽出を行う。即ち、前記組み合わせの「行番号」が同じものを取り出す処理になる。
表データの1行目はヘッダ行に含まれるとしているので、続くステップS1902において、抽出した行データをヘッダ行として登録する。
ヘッダ行は図16の例のように複数行にまたがることもある。このような場合ヘッダ行がどこまでかを判断するために、列連結数がすべて1であるかどうかを調べればよい。
例えば図16において、1行目に含まれるセル1601は、その下段にあるセル1602及びセル1606をまとめている。
このときセル1601の列連結数は2であるので、ヘッダ行として次行に継続していると判定できる。
続く2行目のすべてのセルについては列連結数が1となるため、この行でヘッダ行が終了していると判定できる。
従って、続くステップS1903において、1行を表す前記組み合わせのすべての「列連結数」が1であるかどうかを調べる。
すべての列連結数が1である場合(ステップS1903で「はい」の場合)、ステップS1904に進む。すべての列連結数が1でない場合(ステップS1903で「いいえ」の場合)、ステップS1901に戻り、次の行データを読み込み、同様にヘッダ行として登録する処理を実施する。
ステップS1904からステップS1910にかけて残りの表データに対する処理を実施する。ステップS1904においてすべての行データを処理したかを確認する。
行データがあればステップS1905に進み、ステップS1901と同様に行データの抽出処理を実施する。
続くステップS1906において、抽出した前記行データが前記ヘッダデータと一致するかを調べる。
簡易検査であれば、前記行データの列連結数がすべて1であるかを検査すればよい。より詳細な検査であれば、ヘッダに含まれる文字列に対して予め登録した型に一致するかどうかを検査すればよい。
一例をあげると、図16においてセル1602の文字列は「割合」であるので、予め「割合」に対して、0から1までの自然数或いは百分率表記である、といった型の登録をしておく。具体的には正規表現等で登録することができる。
ステップS1906で「はい」の場合、即ち前記ヘッダデータに前記行データが一致すれば、ステップS1907に進み、行データ登録を実施する。
行データ登録処理は、抽出した行データを有向グラフとして表現するものであり、任意のノードと前記組み合わせの「表記」を表すノードを矢印で接続し、その矢印のラベルとして前記ヘッダデータを登録するものである。
図16の表を有向グラフ化した実施例を図18に示す。図18におけるノード1806はひとつのデータ行を示し、矢印1807は次のデータ行への遷移を示す。
例えば、図16のセル1604は図18のノード1803として登録される。このときノード1803はノード1806から矢印1801及び矢印1802を経由している。
矢印1801のラベルは「パターン2」であり、矢印1802のラベルは「割合」である。従ってノード1803の持つデータ「67.6」は「パターン2」の「割合」であり、ノード1806が示すデータ行のデータのひとつであることがわかる。
また、ノード1803はノード1805を持ち、そのラベルとして「col」としている。「col」は定型的な属性値であり、「列番号」を意味する。
同様にノード1808はノード1806からの遷移であり、そのラベルとして「row」としている。「row」も定型的な属性値であり、「行番号」を意味する。
従って、ノード1803のデータ「67.6」は元の表において、行番号2、列番号4に位置するデータであることがわかる。
なお、図18の実施例では2段に渡るヘッダデータを連続した矢印の形式で表現(中間ノードを使用)しているが、例えば矢印のラベルとして「パターン2:割合」というようにひとつの矢印として表現しても構わない。
図19に戻って、ステップS1906で「いいえ」の場合、即ち前記ヘッダデータと前記行データが一致しない場合、ステップS1908に進む。
ステップS1908の区切り行登録とは、例えば、表中の複数のセルを連結させて注釈枠を挿入したり、末尾に備考欄を設けたりしているような表に対する処理である。
図16の例ではセル1605が該当する。図18において行番号6を示すノード1810からノード1809へ矢印1811で接続するが、このとき矢印1811のラベルはヘッダデータ以外を示す「*」を割り当てる。さらにノード1809の属性ノードとして「colspan」を作成し、列連結数を格納する。
図19に戻って、ステップS1907及びステップS1908の登録処理後、ステップS1909に進み、name設定処理を行う。
name設定処理とは、前記行データにおける行の代表表記を設定するものであり、行を示すノードから定型的な属性値として「name」のラベルで遷移するノードである。
図18における一例として、ノード1804及びノード1812が該当する。name設定の内容は基本的に行の最左にあるもの、即ち列番号0のものを設定する。
ただし、図19のステップS1908における区切り行登録した場合は、「NULL」を設定する。
続くステップS1910ですべての行の処理が終了していれば、グラフ化処理を終了し、そうでない場合はステップS1904に戻ってグラフ化処理を継続する。
図4に戻って、ステップS408に進み、表登録処理を行う。表登録処理は、前記有向グラフ化された表構造と、前述したページ情報と関連させて管理する処理であり、図5のステップS508で実施した文章登録と同等の処理である。
このとき、直前に文章登録した本文要素を表題として登録しておく。図15に表登録の一例を示す。
ノード1506はページ番号「21」であり、ラベル「tables」は当該ページが持つ表リストを示す。なお、ページ番号「21」は一例であり、具体的には図5におけるステップS503で取得した数値が登録される。
ノード1507以下は図18と同等の状態である。表登録処理は前述した文章登録と同等の処理であるため、実際のデータ形式はXMLやJSON等の構造化された形式であれば構わない。
図4に戻って、ステップS409に進み、本文要素のすべての子要素について解析処理が済んでいれば表・文章抽出処理を終了する。
まだ解析処理が済んでいない子要素があればステップS402に戻り、表・文章抽出処理を継続する。
図3に戻って、ステップS303において範囲特定処理を行う。範囲特定処理とは、任意の表について記述している文章の範囲を特定する処理である。
具体的には、例えば、文章中に「・・・について表2-2に示す。」や「・・・である(参照:表2-2)」といった表記を範囲特定ルールとして予め用意しておく。
範囲特定ルールは形態素の共起や係り受け関係等を用いて表現できるので、図5のステップS505で得られた形態素解析結果及びステップS506で得られた構文解析結果を参照することで、前述したような表記を抽出することができる。
範囲特定処理では、範囲特定ルールに一致した文章を持つ段落全体を当該表について記述している文章の範囲とし、範囲特定ルールに一致した文章を持たない段落全体は、当該段落の前段落の状態が継続するものとして処理する。これらの段落状態の管理には図5のステップS510の段落属性管理を用いている。
ステップS510の段落属性管理では、前記範囲特定ルールに一致した文章があれば、段落属性として抽出した表番号を段落属性として登録しておく。一例として、図15における要素1511に示す。
続くステップS304において、表連結処理を実施する。表連結処理は紙面の都合で大きな表が複数に分割されている状態のものを、論理的に再接続する処理である。
表連結処理では、図4のステップS408において、表登録する際に表題として登録したものを使う。
具体的には、表題内に記述されている表番号が同じものを再接続可能とする。補助的な再接続検証として、表題名称が同じ或いは含む場合も再接続対象としてもよい。
一例を上げると、「表1:事例」と「表1:事例(続き)」の場合は、表番号が一致し且つ表題を含む場合であるので、再接続対象となる。
なお、再接続検証の絶対条件として、表構造が同じもの即ちヘッダ情報が同じものでなければならない。
また、前述した表番号は表題内から正規表現等を用いることで容易に抽出することができるため、ステップS304の表連結処理中に随時抽出・接続判定することも可能であるし、或いは図4のステップS408の表登録の際に表題の登録と共に予め表番号を抽出・登録しておいてもよい。
論理的に再接続可能と判断した表については、ページ管理されている表同士でリンクを張る。
図15の例で例えると、ノード1507からラベル名「continue」として別ページノード1508に登録されている表ノード1509にリンクが張られることになる。
図3に戻って、続くステップS305において、表検証処理を実施する。表検証処理とは図4のステップS408で登録した有向グラフ化した表について、前述した範囲特定処理で特定した当該段落に含まれる文章から、各セルについて記述している文章を検索する処理である。
図20に表検証処理のフローチャートを示す。ステップS2001において、前述したページ管理されている表からすべての表の一覧を得る。
続くステップS2002において、当該表に関連付けられた範囲特定している段落の一覧を得る。段落の一覧は、前述した段落属性管理で登録した要素から取り出すことができる。
続くステップS2003において、前記段落一覧から段落をひとつ取り出し、続くステップS2004以降で当該段落に含まれるすべての文章について、当該表に関する記述があるか確認する。
ステップS2005において、当該文章に対して、前述した表に関する記述があるかを調べる。
検索するパターンは、前述した表の各行のname属性に登録された文字列と、行ノードから出る有向グラフのラベル名と、有向グラフ先の数値ないし文字列の組み合わせとなる。
このとき、当該表が持つすべての行に対して一致する箇所を検査する必要があるので、例えば、当該name属性に登録された文字列をフィルタ文字列として扱い、フィルタされた文章集合に対してのみ、残りのラベル名と数値等の組み合わせを検査するような処理にしてもよい。また、表検証における検索処理は多重ループになっているので、例えば、表のname属性を索引化する等して処理効率を上げてもよい。
ステップS2005において「はい」の場合、即ち当該文章に、表に一致する記述があった場合、ステップS2006に進み、当該文章に対象となる表ID及び行番号を関連付ける。具体的には、図15における要素1512のように、当該文章のtbllink属性として関連付けられる。
続いてステップS2007に進み、正解候補として文章を追加する。正解候補については後述するユーザに対する結果表示で使用する。
ステップS2005において「いいえ」の場合、即ち当該文章には表に一致する記述がなかった場合は、ステップS2008に進む。ステップS2008では前述した3つの組み合わせすべてにおいて一致する項目がなかったかを確認する。
全く一致しなかった場合(ステップS2008で「はい」の場合)、ステップS2010に進む。一部一致していた場合(ステップS2008で「いいえ」の場合)、ステップS2009に進み、誤り候補として文章を追加する。誤り候補については後述するユーザに対する結果表示で使用する。
ステップS2004以降で当該段落に含まれるすべての文章について処理が終了すると(ステップS2010)、ステップS2011に進み、範囲特定の段落すべての処理が終了すればステップS2012に進み、すべての表の処理が終了すれば、表検証処理を終了する。
なお、ステップS2005における当該文章に、表に一致する記述の特定手法については、前述したように3つの組み合わせによるものもあるが、例えば、図16のような表形式の場合、数値と割合は同じ事象を示しているものであるから、一方の数値が一致しているのにも関わらず一方の数値が一致しない記述は誤り候補としなければならない。
従って、ステップS2005で検出する特定の手法については、当該表形式に合わせて柔軟に対応できるようなものであることは言うまでもない。
図3に戻って、続くステップS306において、文検証処理を実施する。文検証処理は、前述した表検証とは逆に、文章から表に対して検証する処理である。即ち、図5のステップS507で抽出した数値情報を含む表があるかどうかを検証する処理となる。
図21に文検証処理のフローチャートを示す。ステップS2101以降において、すべての文章を対象に処理を実施する。続いてステップS2102に進み、当該文章に数値情報が付与されているかを調べる。
数値情報が付与されていない場合(ステップS2102で「いいえ」の場合)、ステップS2110に進み、次の文章の処理にかかる。数値情報が付与されている場合(ステップS2102で「はい」の場合)、ステップS2103に進む。ステップS2103以降において、すべての数値情報を対象に処理を実施する。
ステップS2104において、当該文章が段落属性を持つかを調べる。段落属性の有無の判定は、当該文章を含む段落に関連付けられた段落属性に依存する。
段落属性を持つ場合(ステップS2104で「はい」の場合)、ステップS2105に進む。ステップS2105では、段落属性に登録された当該表を対象に検索し、当該数値情報の数値が含まれているかどうかを調べる。
数値が存在する場合(ステップS2105において「はい」の場合)、ステップS2106に進み、項目名が一致するかを調べる。
項目名の一致は、第一として当該数値情報の通常モードを対象に検査する。通常モードだけで一致しない場合のみ参照モードで登録した項目に広げて検査する。以上のいずれかで項目名が一致した場合(ステップS2106で「はい」の場合)、ステップS2107に進み、正解候補として当該文章を追加する。
ステップS2105において「いいえ」の場合、即ち当該表に数値がない場合、ステップS2108に進み、誤り候補として文章を追加する。
ステップS2106において「いいえ」の場合、即ち当該表に数値が存在するのに項目名が一致しない場合もステップS2108に進み、誤り候補として文章を追加する。
続いてステップS2109に進み、すべての数値情報の処理が終了していなければステップS2104に戻り、処理を継続する。
すべての数値情報の処理が終了すれば、ステップS2110に進む。ステップS2110において、すべての文章の処理が終了していなければ、ステップS2102に戻り、処理を継続する。すべての文章の処理が終了すれば、文検証処理を終了する。
ステップS2104において「いいえ」の場合、即ち当該文章が段落属性を持たない場合、ステップS2111に進む。
ここでは管理しているすべての表を対象として数値情報の検出を試みる。ステップS2112に進んで、項目名が一致するかどうかを調べる。
項目名の一致は、第一として当該数値情報の通常モードを対象に検査する。通常モードだけで一致しない場合のみ参照モードで登録した項目に広げて検査する。
以上のいずれかで項目名が一致した場合(ステップS2112で「はい」の場合)、ステップS2113に進み、数値が一致するかを検査する。
数値が一致する場合(ステップS2113で「はい」の場合)、ステップS2114に進み、正解候補として文章を追加する。このとき付属情報として当該表IDも合わせて追加登録する。
数値が一致しない場合(ステップS2113で「いいえ」の場合)、ステップS2115に進み、誤り候補として文章を追加する。このとき付属情報として当該表IDも合わせて追加登録する。
続いてステップS2116に進み、次の表があればステップS2112に戻って処理を継続する。すべての表の検査が終了すれば、ステップS2109に進む。ステップS2112で「いいえ」の場合、即ち項目名の一致がなかった場合は、属性情報を持たないことから誤検出の可能性があるので誤り候補に追加することなく、ステップS2116に進み、次の処理に移る。
なお、ステップS2111からステップS2116にかけての非段落属性処理については、全体の処理速度向上のために、当該数値情報についてすべて誤り候補に追加するように変更することもできる。このような変更をオプション的に実施することで処理速度の低下を回避しつつ、数値情報がある文章にも関わらずどの表にも関連付けられていない項目を誤りとして検出することも可能となる。
図3に戻って、ステップS305の文検証を終了し、文書解析処理を終了する。
次に、図3で得られた分析結果の表示について、図22から図25を用いて説明する。
以下、表示例の説明にはブラウザを用いたウェブアプリケーションとして表示されているものとして説明する。
図22は、分析結果の一例である。表2201は解析対象となった表であり、前述したように、図6に示した表解析処理において、図17に示すリスト構造や図18に示す有向グラフ構造を得ていることから、これらの抽象化された構造を走査することでHTML形式の表データを生成することは容易である。
ページ表示2202は、文書内の文章をページ単位で表示できるものであり、前述した図15における有向グラフ構造から当該ページの段落情報を取得することで容易に表示することができる。
解析結果2203は、図20の表検証処理及び図21の文検証処理で得られた正解候補を表示するものである。
次に図23及び図24を用いて、分析結果における表と文章の対応関係の表示例について説明する。
図23は表2301において入力装置でセル2302を選択している状態を示している。このとき、ページ表示2303内において、当該セルの説明を記述している文章2304の背景色を反転させている状態を示している。
また、図24はページ表示2404内の文章2405を入力装置で選択している状態を示しており、このとき、表2401において、当該文章が説明しているセル2402及びセル2403の背景色を反転させている状態を示している。
背景色の反転にはJavascript言語を用いて実施することが可能であり、具体的には、入力装置で選択しているブラウザ上の当該要素の要素IDと、それに対応して反転処理させる要素IDの組み合わせがわかっていればよい。
この要素IDの組み合わせは、選択される要素IDは前述した文章IDであり、反転処理させる要素IDは表IDと行番号と列番号の組で一意に示すことができる。
これらの関連付けに関しては、前述した図20におけるステップS2006の表ID関連付け処理の情報を用いており、図15に示した文章IDとそれに関連付けられたtbllink属性から得ることができる。
なお、選択される要素と反転処理させる要素は逆の組み合わせも可能であるので、表の任意のセルを入力装置で選択することで、関連付けされた文章の反転処理を実施することも同様の仕組みで可能である。
このように、利用者は入力装置を用いることで、任意の表及び文章を選択することで関連付けられた表及び文章を容易に認識できるようになる。
図25に表と文章間に不整合があった場合の表示例を示す。文章に「項目Bはパターン1で32件(70.7%)に達した。」という記述があった場合、表2501におけるセル2502の数値53と一致しない。
このとき、セル2502の表示を通常と異なる形式、例えば、赤字で大きく強調表示する、等の表示を行う。
解析結果2504は、図22の解析結果2203と同様に、誤り候補を表示するものである。
なお、前記不一致の判定については、図20におけるステップS2005において一致する組み合わせがないため、ステップS2008に進み、数値以外の組み合わせが一致している(「項目B」及び「パターン1」)ため、ステップS2009に進んで誤り候補追加されることで判定されている。
図22の解析結果2203及び図25の解析結果2504は、共に正解候補及び誤り候補の一方だけの表示例を示しているが、正解候補と誤り候補が同時に表示される可能性もあることは言うまでもない。
以上、本発明によれば、ユーザが文書と当該文書に関係する表との関係性を容易に検証することができる。
以上、実施形態例を詳述したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様を取ることが可能であり、具体的には、複数の機器から構成するシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
なお、上述した各種データの構成及び表示の構成及びその内容はこれに限定されるものではなく、用途や目的に応じて、様々な内容で構成されることは言うまでもない。
また、本発明は、システム或いは装置にプログラムを供給することによって達成される場合にも適用できることは言うまでもない。この場合、本発明を達成するためのソフトウェアによって表されるプログラムを格納した記憶媒体を該システム或いは装置に読み出すことによって、そのシステム或いは装置が、本発明の効果を享受することが可能となる。
さらに、本発明を達成するためのソフトウェアによって表されるプログラムをネットワーク上のサーバ、データベース等から通信プログラムによりダウンロードして読み出すことによって、そのシステム或いは装置が、本発明の効果を享受することが可能となる。
なお、上述した各実施形態及びその変形例を組み合わせた構成もすべて本発明に含まれるものである。