(57)【特許請求の範囲】
【請求項１】
帳票の項目名または項目値を表す領域に関する情報をノードとして表し、前記ノード間の隣接関係をエッジとして表したグラフを基に、前記ノードのうち、あらかじめ設定された条件を満たすノードを、項目名を表す領域のノードである項目名ノードとして抽出する抽出部と、
１つのノードの所定の方向に、複数のノードが隣接している場合、前記１つのノードと前記複数のノードとの隣接関係を表すエッジを削除する第１の削除部と、
前記項目名ノードのうち、所定の方向に項目値を表す領域のノードである項目値ノードが隣接している項目名ノードと、前記項目値ノードとの隣接関係を表すエッジを削除する第２の削除部と、
前記第１の削除部および前記第２の削除部によってエッジの削除が行われた前記グラフを基に、前記項目名ノードと前記項目値ノードとの間の論理関係を取得する第１の取得部と、
前記第１の削除部によってエッジの削除が行われた前記グラフを基に、前記項目名ノード間の包含関係を取得する第２の取得部と、
前記第１の取得部によって取得された論理関係、および前記第２の取得部によって取得された包含関係を合成した木構造のデータを作成する合成部と、
を有することを特徴とする論理関係認識装置。
【請求項２】
前記第１の削除部は、１つのノードの左側または上側に、複数のノードが隣接している場合、前記１つのノードと前記複数のノードとの隣接関係を表すエッジを削除し、
前記第２の削除部は、前記項目名ノードのうち、左側または上側に、項目値を表す領域のノードである項目値ノードが隣接している項目名ノードと、前記項目値ノードとの隣接関係を表すエッジを削除することを特徴とする請求項１に記載の論理関係認識装置。
【請求項３】
前記第２の取得部は、第１の項目名ノードの右側に隣接する第１のノード群のうち少なくとも１つが前記項目名ノードであり、かつ、前記第１のノード群に含まれる全てのノードの高さが前記第１の項目名ノードの高さ以下であり、かつ、前記第１のノード群の左上端のノードの頂点と、前記第１の項目名ノードの頂点が重なっている場合、前記第１の項目名ノードが前記第１のノード群を包含していると判定し、第２の項目名ノードの下側に隣接する第２のノード群のうち少なくとも１つが前記項目名ノードであり、かつ、前記第２のノード群に含まれる全てのノードの幅が前記第２の項目名ノードの幅以下であり、かつ、前記第２のノード群の左上端のノードの頂点と、前記第２の項目名ノードの頂点が重なっている場合、前記第２の項目名ノードが前記第２のノード群を包含していると判定することを特徴とする請求項２に記載の論理関係認識装置。
【請求項４】
論理関係認識装置で実行される論理関係認識方法であって、
帳票の項目名または項目値を表す領域に関する情報をノードとして表し、前記ノード間の隣接関係をエッジとして表したグラフを基に、前記ノードのうち、あらかじめ設定された条件を満たすノードを、項目名を表す領域のノードである項目名ノードとして抽出する抽出工程と、
１つのノードの所定の方向に、複数のノードが隣接している場合、前記１つのノードと前記複数のノードとの隣接関係を表すエッジを削除する第１の削除工程と、
前記第１の削除工程によってエッジの削除が行われた前記グラフを基に、前記項目名ノード間の包含関係を取得する第２の取得工程と、
前記項目名ノードのうち、所定の方向に項目値を表す領域のノードである項目値ノードが隣接している項目名ノードと、前記項目値ノードとの隣接関係を表すエッジを削除する第２の削除工程と、
前記第１の削除工程および前記第２の削除工程によってエッジの削除が行われた前記グラフを基に、前記項目名ノードと前記項目値ノードとの間の論理関係を取得する第１の取得工程と、
前記第１の取得工程によって取得された論理関係、および前記第２の取得工程によって取得された包含関係を合成した木構造のデータを作成する合成工程と、
を含んだことを特徴とする論理関係認識方法。
【請求項５】
コンピュータに、
帳票の項目名または項目値を表す領域に関する情報をノードとして表し、前記ノード間の隣接関係をエッジとして表したグラフを基に、前記ノードのうち、あらかじめ設定された条件を満たすノードを、項目名を表す領域のノードである項目名ノードとして抽出する抽出ステップと、
１つのノードの所定の方向に、複数のノードが隣接している場合、前記１つのノードと前記複数のノードとの隣接関係を表すエッジを削除する第１の削除ステップと、
前記第１の削除ステップによってエッジの削除が行われた前記グラフを基に、前記項目名ノード間の包含関係を取得する第２の取得ステップと、
前記項目名ノードのうち、所定の方向に項目値を表す領域のノードである項目値ノードが隣接している項目名ノードと、前記項目値ノードとの隣接関係を表すエッジを削除する第２の削除ステップと、
前記第１の削除ステップおよび前記第２の削除ステップによってエッジの削除が行われた前記グラフを基に、前記項目名ノードと前記項目値ノードとの間の論理関係を取得する第１の取得ステップと、
前記第１の取得ステップによって取得された論理関係、および前記第２の取得ステップによって取得された包含関係を合成した木構造のデータを作成する合成ステップと、
を実行させることを特徴とする論理関係認識プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、論理関係認識装置、論理関係認識方法および論理関係認識プログラムに関する。
【背景技術】
【０００２】
様々な企業における業務の処理に、ＯｐＳ（業務支援システム：Operation  Support  System）が導入されている。一方で、ＯｐＳが支援できない業務については、各組織独自の運用がなされており、その中で帳票は情報流通に利用されている。帳票は半構造データのため、それぞれの値の意味（論理関係）は、人にとっては理解できても機械にとっては理解困難なものであり、帳票上のデータを活用する際に多大な人手の作業負担が発生している。これに対し、罫線枠の並びを基に、帳票の項目名間の論理関係、および項目名と項目値との間の論理関係を自動的に認識する技術が知られている（例えば、特許文献１および非特許文献１〜３を参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１６−００４４１７号公報
【非特許文献】
【０００４】
【非特許文献１】高木ほか、“電子帳票群に対する横断的データ操作技術のための抽出手法の検討”、信学技報、vol.114、No.150、pp.1-6(2014)
【非特許文献２】高木ほか、“電子帳票データ連携のための帳票視覚表現の調査”、電子情報通信学会通信ソサイエティ大会講演論文集(2015)
【非特許文献３】高木ほか、”視覚表現を利用した電子帳票のデータ構造変換手法の検討”、信学技報、vol.115、No.409、pp.25-30(2016)
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の技術には、帳票に縦列挙、横列挙、縦列挙と横列挙の複合型、または列挙型入れ子構造が含まれる場合、帳票の項目名間の論理関係、および項目名と項目値との間の論理関係を正確に認識することができない場合があるという問題があった。
【０００６】
例えば、縦列挙の場合、縦方向に項目名に対応した同じ幅の罫線枠が複数存在する場合がある。さらに、それぞれの項目名は項目値を持ち、項目値に対応した罫線枠の幅も、項目名に対応した罫線枠の幅と同じである。このような場合、従来の技術では、どの罫線枠が項目名であるかを特定することができないため、項目名間の論理関係、および項目名と項目値との間の論理関係を正確に認識することは困難である。
【課題を解決するための手段】
【０００７】
本発明の論理関係認識装置は、帳票の項目名または項目値を表す領域に関する情報をノードとして表し、前記ノード間の隣接関係をエッジとして表したグラフを基に、前記ノードのうち、あらかじめ設定された条件を満たすノードを、項目名を表す領域のノードである項目名ノードとして抽出する抽出部と、１つのノードの所定の方向に、複数のノードが隣接している場合、前記１つのノードと前記複数のノードとの隣接関係を表すエッジを削除する第１の削除部と、前記項目名ノードのうち、所定の方向に項目値を表す領域のノードである項目値ノードが隣接している項目名ノードと、前記項目値ノードとの隣接関係を表すエッジを削除する第２の削除部と、前記第１の削除部および前記第２の削除部によってエッジの削除が行われた前記グラフを基に、前記項目名ノードと前記項目値ノードとの間の論理関係を取得する第１の取得部と、前記第１の削除部によってエッジの削除が行われた前記グラフを基に、前記項目名ノード間の包含関係を取得する第２の取得部と、前記第１の取得部によって取得された論理関係、および前記第２の取得部によって取得された包含関係を合成した木構造のデータを作成する合成部と、を有することを特徴とする。
【０００８】
また、本発明の論理関係認識方法は、論理関係認識装置で実行される論理関係認識方法であって、帳票の項目名または項目値を表す領域に関する情報をノードとして表し、前記ノード間の隣接関係をエッジとして表したグラフを基に、前記ノードのうち、あらかじめ設定された条件を満たすノードを、項目名を表す領域のノードである項目名ノードとして抽出する抽出工程と、１つのノードの所定の方向に、複数のノードが隣接している場合、前記１つのノードと前記複数のノードとの隣接関係を表すエッジを削除する第１の削除工程と、前記第１の削除工程によってエッジの削除が行われた前記グラフを基に、前記項目名ノード間の包含関係を取得する第２の取得工程と、前記項目名ノードのうち、所定の方向に項目値を表す領域のノードである項目値ノードが隣接している項目名ノードと、前記項目値ノードとの隣接関係を表すエッジを削除する第２の削除工程と、前記第１の削除工程および前記第２の削除工程によってエッジの削除が行われた前記グラフを基に、前記項目名ノードと前記項目値ノードとの間の論理関係を取得する第１の取得工程と、前記第１の取得工程によって取得された論理関係、および前記第２の取得工程によって取得された包含関係を合成した木構造のデータを作成する合成工程と、を含んだことを特徴とする。
【０００９】
本発明の論理関係認識プログラムは、コンピュータに、帳票の項目名または項目値を表す領域に関する情報をノードとして表し、前記ノード間の隣接関係をエッジとして表したグラフを基に、前記ノードのうち、あらかじめ設定された条件を満たすノードを、項目名を表す領域のノードである項目名ノードとして抽出する抽出ステップと、１つのノードの所定の方向に、複数のノードが隣接している場合、前記１つのノードと前記複数のノードとの隣接関係を表すエッジを削除する第１の削除ステップと、前記第１の削除ステップによってエッジの削除が行われた前記グラフを基に、前記項目名ノード間の包含関係を取得する第２の取得ステップと、前記項目名ノードのうち、所定の方向に項目値を表す領域のノードである項目値ノードが隣接している項目名ノードと、前記項目値ノードとの隣接関係を表すエッジを削除する第２の削除ステップと、前記第１の削除ステップおよび前記第２の削除ステップによってエッジの削除が行われた前記グラフを基に、前記項目名ノードと前記項目値ノードとの間の論理関係を取得する第１の取得ステップと、前記第１の取得ステップによって取得された論理関係、および前記第２の取得ステップによって取得された包含関係を合成した木構造のデータを作成する合成ステップと、を実行させることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、帳票に縦列挙、横列挙、縦列挙と横列挙の複合型、または列挙型入れ子構造が含まれる場合であっても、帳票の項目名間の論理関係、および項目名と項目値との間の論理関係を正確に認識することができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、論理関係認識処理の概要について説明するための図である。
【図２】図２は、縦列挙の一例を示す図である。
【図３】図３は、横列挙の一例を示す図である。
【図４】図４は、縦列挙と横列挙の複合型の一例を示す図である。
【図５】図５は、列挙型入れ子構造の一例を示す図である。
【図６】図６は、列挙型入れ子構造の一例を示す図である。
【図７】図７は、列挙型入れ子構造の一例を示す図である。
【図８】図８は、列挙型入れ子構造の一例を示す図である。
【図９】図９は、第１の実施形態に係る論理関係認識装置の構成の一例を示す図である。
【図１０】図１０は、列挙リストの一例である。
【図１１】図１１は、列挙リストの一例である。
【図１２】図１２は、包含グラフについて説明するための図である。
【図１３】図１３は、包含グラフについて説明するための図である。
【図１４】図１４は、木構造のデータの一例である。
【図１５】図１５は、木構造のデータの一例である。
【図１６】図１６は、抽出部の処理の流れを示すフローチャートである。
【図１７】図１７は、解析部の処理の流れを示すフローチャートである。
【図１８】図１８は、第１の削除部の処理の流れを示すフローチャートである。
【図１９】図１９は、第２の削除部の処理の流れを示すフローチャートである。
【図２０】図２０は、分類部の処理の流れを示すフローチャートである。
【図２１】図２１は、縦列挙取得部の処理の流れを示すフローチャートである。
【図２２】図２２は、横列挙取得部の処理の流れを示すフローチャートである。
【図２３】図２３は、包含関係取得部の処理の流れを示すフローチャートである。
【図２４】図２４は、右側の包含関係を取得する処理の流れを示すフローチャートである。
【図２５】図２５は、下側の包含関係を取得する処理の流れを示すフローチャートである。
【図２６】図２６は、包含グラフ生成部の処理の流れを示すフローチャートである。
【図２７】図２７は、項目名間合成部の処理の流れを示すフローチャートである。
【図２８】図２８は、列挙合成部の処理の流れを示すフローチャートである。
【図２９】図２９は、追加部の処理の流れを示すフローチャートである。
【図３０】図３０は、その他の実施形態について説明するための図である。
【図３１】図３１は、プログラムが実行されることにより論理関係認識装置が実現されるコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１２】
以下に、本願に係る論理関係認識装置、論理関係認識方法および論理関係認識プログラムの実施形態を図面に基づいて詳細に説明する。なお、この実施形態により本発明が限定されるものではない。
【００１３】
まず、図１を用いて、論理関係認識装置を有する論理関係認識システムによる論理関係認識処理の概要について説明する。図１は、論理関係認識処理の概要について説明するための図である。図１に示すように、まず、論理関係認識システムは、ＰＣ等から列挙形式の帳票を読み込む（ステップＳ１）。このとき、論理関係認識システムが読み込むデータは、帳票に限られず、ＷｅｂＧＵＩ、システムＧＵＩ、および画像上の列挙構造等の、半構造のデータであればよい。次に、論理関係認識システムは、読み込んだ帳票から罫線枠に関する情報を取得する（ステップＳ２）。また、論理関係認識システムは、スキャナ等で読み込まれた紙の帳票の画像から記載内容をＯＣＲ（光学文字認識：Optical  Character  Recognition）によって取得してもよい（ステップＳ３）。
【００１４】
そして、論理関係認識システムは、罫線枠情報および項目名定義情報を基に、様式グラフを生成する（ステップＳ４）。罫線枠情報には、例えば罫線枠の座標、罫線枠内の文字列、罫線枠の塗りつぶし色、罫線の種類や太さ、色等の視覚的な情報が含まれる。また、項目名定義情報には、罫線枠を項目名として判断する際の条件が含まれる。
【００１５】
例えば、色が黄色の罫線枠を項目名とする項目名定義情報は、「if  {node:{color:#FFFF00}}  then  item」と記述される。また、例えば、文字列の空でない罫線枠を項目名とする罫線枠定義情報は、「if  {node:{!string:null}}  then  item」と記述される。また、例えば、色が白でなく，かつ文字列が空でない罫線枠を項目名とする罫線枠定義情報は、「if  {node:{!color:whilte},{!string:null}  then  item」と記述される。また、例えば、文字列が「y1」の罫線枠を項目名とする罫線枠定義情報は、「if  {node:{string:”y1”}}  then  item」と記述される。
【００１６】
また、様式グラフとは、帳票に含まれる複数の様式ごとに、罫線枠等をノード、ノードの隣接関係をエッジとして表したグラフである。以降の処理において、論理関係認識システムは、帳票の様式をグラフ形式のデータとして扱う。また、様式には列挙が含まれる。以降の説明では、様式グラフを基に論理関係を認識する場合について説明するが、帳票全体をノードとエッジで表した帳票グラフを用いることとしてもよい。
【００１７】
次に、論理関係認識システムは、列挙形式の構造から論理関係を認識し（ステップＳ５）、認識した結果を所定の形式のデータ構造（ｘｍｌ、ｙａｍｌ、ｊｓｏｎ等）に変換し（ステップＳ６）、ＤＢに格納する。このとき、ＤＢへはデータ構造のリンクパスを格納してもよいし、あらかじめ定義したスキーマに合わせてデータを格納してもよい。
【００１８】
次に、図２〜８を用いて、論理関係認識システムによる論理関係認識処理の対象である列挙の種類について説明する。なお、図２〜８の各符号はノードを表しており、以降の説明では、説明のために、これらの符号が示すノードを、単にノードと呼ぶ場合と、項目名ノードまたは項目値ノードと呼ぶ場合がある。
【００１９】
図２は、縦列挙の一例を示す図である。図２に示すように、縦列挙は、項目名同士、および項目名と項目値の関係である論理関係を、縦方向に複数有する。例えば、ノードａ１とａ２、およびノードａ４とａ５は、項目名と項目値の論理関係を有する。図３は、横列挙の一例を示す図である。図３に示すように、横列挙は、論理関係を横方向に複数有する。例えば、ノードｂ１とｂ２は、項目名と項目値の論理関係を有する。なお、図２〜８において、網掛け部分は項目名を表し、網掛けでない部分は項目値を表している。
【００２０】
図４は、縦列挙と横列挙の複合型の一例を示す図である。図４に示すように、縦列挙と横列挙の複合型の場合、縦列挙および横列挙が１つの様式内に存在する。例えば、ノードｃ１とｃ２、およびノードｃ３とｃ４は、横列挙である。また、例えば、ノードｃ５とｃ７、およびノードｃ６とｃ８は、縦列挙である。
【００２１】
図５〜８は、列挙型入れ子構造の一例を示す図である。図５に示すように、列挙型入れ子構造は、縦方向または横方向に、入れ子になった複数の列挙を有する。例えば、ノードｄ１とｄ２は項目名同士の論理関係を有する。さらに、ノードｄ２とｄ３は、項目名と項目値の論理関係を有する。このように、ノードｄ２とｄ３の論理関係は、ノードｄ１とｄ２の論理関係の入れ子になっている。
【００２２】
また、図６に示すように、例えば、ノードｅ１とｅ２は項目名同士の論理関係を有する。さらに、ノードｅ２とｅ３は、項目名と項目値の論理関係を有する。このように、ノードｅ２とｅ３の論理関係は、ノードｅ１とｅ２の論理関係の入れ子になっている。
【００２３】
また、図７に示すように、例えば、ノードｆ１とｆ２は項目名同士の論理関係を有する。また、ノードｆ２とｆ３は項目名同士の論理関係を有する。さらに、ノードｆ３とｆ４は、項目名と項目値の論理関係を有する。このように、ノードｆ３とｆ４の論理関係は、ノードｆ２とｆ３の論理関係の入れ子になっている。さらに、ノードｆ２とｆ３の論理関係は、ノードｆ１とｆ２の論理関係の入れ子になっている。
【００２４】
また、図８に示すように、例えば、ノードｇ２とｇ３は、項目名と項目値の論理関係を有する。また、ノードｇ６とｇ７は項目名同士の論理関係を有する。また、ノードｇ７とｇ８は、項目名と項目値の論理関係を有する。このように、ノードｇ７とｇ８の論理関係は、ノードｇ６とｇ７の論理関係の入れ子になっている。しかし、ノードｇ２とｇ３の論理関係は、ノードｇ７とｇ８の論理関係、およびノードｇ６とｇ７の論理関係との間に入れ子関係はない。
【００２５】
［第１の実施形態の構成］
次に、図９を用いて、第１の実施形態に係る論理関係認識装置の構成について説明する。図９は、第１の実施形態に係る論理関係認識装置の構成の一例を示す図である。図９に示すように、論理関係認識装置１０は、制御部２０および記憶部３０を有する。
【００２６】
制御部２０は、論理関係認識装置１０全体を制御する。制御部２０は、例えば、ＣＰＵ（Central  Processing  Unit）、ＭＰＵ（Micro  Processing  Unit）等の電子回路や、ＡＳＩＣ（Application  Specific  Integrated  Circuit）、ＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路である。また、制御部２０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、内部メモリを用いて各処理を実行する。また、制御部２０は、各種のプログラムが動作することにより各種の処理部として機能する。例えば、制御部２０は、抽出部２０１、解析部２０２、第１の削除部２０３、第２の削除部２０４、分類部２０５、縦列挙取得部２０６、横列挙取得部２０７、包含関係取得部２０８、包含グラフ生成部２０９、項目名間合成部２１０、列挙合成部２１１および追加部２１２を有する。
【００２７】
記憶部３０は、ＨＤＤ（Hard  Disk  Drive）、ＳＳＤ（Solid  State  Drive）、光ディスク等の記憶装置である。なお、記憶部３０は、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ、ＮＶＳＲＡＭ（Non  Volatile  Static  Random  Access  Memory）等のデータを書き換え可能な半導体メモリであってもよい。記憶部３０は、論理関係認識装置１０で実行されるＯＳ（Operating  System）や各種プログラムを記憶する。さらに、記憶部３０は、プログラムの実行で用いられる各種情報を記憶する。また、記憶部３０は、例えば列挙リスト３０１および包含グラフ３０２を記憶する。
【００２８】
ここで、論理関係認識装置１０による論理関係認識処理について説明するとともに、論理関係認識装置１０の各部の詳細について説明する。抽出部２０１は、帳票の項目名または項目値を表す領域に関する情報をノードとして表し、ノード間の隣接関係をエッジとして表したグラフ、すなわち様式グラフを基に、ノードのうち、あらかじめ設定された条件を満たすノードを、項目名を表す領域のノードである項目名ノードとして抽出する。
【００２９】
ここで、項目名ノードを抽出する際のルールは、解析部２０２によって作成される。解析部２０２は、あらかじめテキストファイル等として作成された解析前の視覚表現のルールを読み込み、読み込んだ視覚表現のルールから条件およびアクションを解析し、コンピュータで認識可能な視覚表現ルールを作成する。なお、以降の説明で、単に視覚表現ルールと呼ぶ場合は、解析後の視覚表現ルールのことを指すこととする。
【００３０】
第１の削除部２０３は、１つのノードの所定の方向に、複数のノードが隣接している場合、１つのノードと複数のノードとの隣接関係を表すエッジを削除する。なお、第１の削除部２０３は、１つのノードの左側または上側に、複数のノードが隣接している場合、１つのノードと複数のノードとの隣接関係を表すエッジを削除するようにしてもよい。例えば、図４の縦列挙と横列挙の複合型の場合、いずれのノードについても、左側または上側に複数ノードが隣接していないため、第１の削除部２０３はエッジを削除しない。また、例えば、図８の列挙型入れ子構造の場合、ノードｇ６の上側に複数のノードが隣接しているため、第１の削除部２０３は、ノードｇ６と、ノードｇ１、ｇ２、ｇ３、ｇ４およびｇ５との隣接関係を表すエッジを削除する。
【００３１】
また、第２の削除部２０４は、項目名ノードのうち、所定の方向に項目値を表す領域のノードである項目値ノードが隣接している項目名ノードと、項目値ノードとの隣接関係を表すエッジを削除する。なお、第２の削除部２０４は、項目名ノードのうち、左側または上側に、項目値を表す領域のノードである項目値ノードが隣接している項目名ノードと、項目値ノードとの隣接関係を表すエッジを削除するようにしてもよい。例えば、図４の縦列挙と横列挙の複合型の場合、項目名ノードｃ６の上側に項目値ノードｃ４が隣接しているため、第２の削除部２０４は、ノードｃ６とノードｃ４との隣接関係を表すエッジを削除する。また、例えば、図６の列挙型入れ子構造の場合、項目名ノードｅ４の左側に項目値ノードｅ３およびｅ７が隣接しているため、第２の削除部２０４は、ノードｅ４と、ノードｅ３およびｅ７との隣接関係を表すエッジを削除する。
【００３２】
そして、縦列挙取得部２０６および横列挙取得部２０７は、第１の削除部２０３および第２の削除部２０４によってエッジの削除が行われたグラフを基に、項目名ノードと項目値ノードとの間の論理関係を取得する。具体的に、縦列挙取得部２０６および横列挙取得部２０７は、論理関係を、図１０または１１に示すようなリストとして取得し、取得したリストを列挙リスト３０１として記憶部３０に格納する。図１０および１１は、列挙リストの一例である。
【００３３】
図１０は、図４の列挙の論理関係を表した列挙リストである。図１０のリストの１行目は、項目名ノードｃ１の横方向の子がノードｃ２であることを表している。また、図１０のリストの３行目は、項目名ノードｃ５の縦方向の子がノードｃ７であることを表している。
【００３４】
図１１は、図７の列挙の論理関係を表した列挙リストである。図１１のリストの１行目は、項目名ノードｆ３の横方向の子がノードｆ４であることを表している。また、図１１のリストの２行目は、項目名ノードｆ９の横方向の子がノードｆ１０であることを表している。
【００３５】
また、例えば、図８の列挙型入れ子構造の場合、第１の削除部２０３によって、ノードｇ６と、ノードｇ１、ｇ２、ｇ３、ｇ４およびｇ５との隣接関係を表すエッジが削除されているため、縦列挙取得部２０６および横列挙取得部２０７が、項目名ノードｇ２の縦方向の子をｇ８とするような論理関係を取得することはない。
【００３６】
また、例えば、図８の列挙型入れ子構造の場合、第２の削除部２０４によって、ノードｇ１４と、ノードｇ１３およびｇ１７との隣接関係を表すエッジが削除されているため、縦列挙取得部２０６および横列挙取得部２０７が、項目名ノードｇ１２の横方向の子をｇ１５とするような論理関係を取得することはない。
【００３７】
包含関係取得部２０８は、第１の削除部２０３によってエッジの削除が行われたグラフを基に、項目名ノード間の包含関係を取得する。また、包含グラフ生成部２０９は、包含関係取得部２０８によって取得された包含関係を基に、図１２に示すようなグラフを生成し、生成したグラフを包含グラフ３０２として記憶部３０に格納する。図１２は、包含グラフについて説明するための図である。図１２の破線は縦方向の包含関係を表している。また、図１２の実線は横方向の包含関係を表している。以後、対象ノードが縦方向（または横方向）に他のノードを1つ以上包含する場合、対象ノードを縦方向（または横方向）の包含ノードと呼ぶ。また、包含関係のあるノードのうち、他のノードに包含されないノードを主のノード、包含される他のノードを従のノードと呼ぶ。
【００３８】
図１２の包含グラフは、図７の列挙型入れ子構造に対応したものである。図７および１２に示すように、ノードｆ２は、ノードｆ３、ｆ５、ｆ７、ｆ９およびｆ１１を横方向に包含している。また、ノードｆ１３は、ノードｆ１４、ｆ１６、ｆ１８、ｆ２０、ｆ２２およびｆ２４を横方向に包含している。また、ノードｆ１は、ノードｆ２およびｆ１３を縦方向に包含している。また、ｆ１が主のノード、ｆ２、ｆ３、ｆ５、ｆ７、ｆ９、ｆ１１、ｆ１３、ｆ１４、ｆ１６、ｆ１８、ｆ２０、ｆ２２、ｆ２が従のノードとなる。
【００３９】
具体的に、包含関係取得部２０８は、第１の項目名ノードの右側に隣接する第１のノード群のうち少なくとも１つが項目名ノードであり、かつ、第１のノード群に含まれる全てのノードの高さが第１の項目名ノードの高さ以下であり、かつ、第１のノード群の左上端のノードの頂点と、第１の項目名ノードの頂点が重なっている場合、第１の項目名ノードが第１のノード群を横方向に包含していると判定する。また、包含関係取得部２０８は、第２の項目名ノードの下側に隣接する第２のノード群のうち少なくとも１つが項目名ノードであり、かつ、第２のノード群に含まれる全てのノードの幅が第２の項目名ノードの幅以下であり、かつ、第２のノード群の左上端のノードの頂点と、第１の項目名ノードの頂点が重なっている場合、第２の項目名ノードが第２のノード群を縦方向に包含していると判定する。
【００４０】
例えば、図７に示すように、項目名ノードｆ２の右側に隣接するノード群のうち、少なくともノードｆ３は項目名ノードである。また、項目名ノードｆ２の右側に隣接するノード群に含まれる全てのノードの高さは、全て項目名ノードｆ２の高さ以下である。また、項目名ノードｆ２の右側に隣接するノード群の左上端のノード、すなわちノードｆ３の頂点は、項目名ノードｆ２の頂点と重なり、かつ項目名ノードｆ２の右側に隣接するノード群の左下端のノード、すなわちノードｆ４の頂点は項目名ノードｆ２の頂点と重なる。これより、包含関係取得部２０８は、項目名ノードｆ２が、項目名ノードｆ２の右側に隣接するノード群を包含していると判定する。
【００４１】
なお、包含関係取得部２０８の処理対象となる様式グラフは、第１の削除部２０３によるエッジの削除は行われているが、第２の削除部２０４によるエッジの削除は行われていないものである。このため、例えば、ノードｆ４と、ノードｆ５およびｆ７との間の隣接関係を表すエッジは削除されていない。そのため、包含関係取得部２０８は、項目名ノードｆ２が、ノードｆ５およびｆ７を横方向に包含していると判定する。
【００４２】
項目名間合成部２１０は、包含グラフを、図１３に示すような、木構造のデータとして表す。図１３は、包含グラフについて説明するための図である。そして、項目名間合成部２１０および列挙合成部２１１は、縦列挙取得部２０６および横列挙取得部２０７によって取得された論理関係と、包含関係取得部２０８によって取得された包含関係と、を合成した木構造のデータを作成する。また、追加部２１２は、項目名間合成部２１０および列挙合成部２１１によって作成された木構造のデータに、当該木構造を定義する根ノードを追加する。
【００４３】
例えば、列挙合成部２１１は、図１０のリストを基に、図１４に示す木構造のデータを作成する。そして、追加部２１２は、当該木構造のデータに根ノード「ｆｏｒｍ１」を追加する。図１４は、木構造のデータの一例である。なお、この場合、図４の列挙には包含関係が存在しないため、項目名間合成部２１０は、包含グラフを作成しない。
【００４４】
また、例えば、列挙合成部２１１は、図１１のリストおよび図１３の包含グラフを基に、図１５に示す木構造のデータを作成する。そして、追加部２１２は、当該木構造のデータに根ノード「ｆｏｒｍ２」を追加する。図１５は、木構造のデータの一例である。なお、根ノードは様式を構成する論理関係を示すために追加しているため、様式を構成する情報が必要なければ追加部２１２は必須ではない。
【００４５】
なお、木構造データの各ノードである木ノードは、例えば項目名または項目値の文字列等の帳票の書式情報から取得された情報の他に、子や親のノードを識別する情報、子や親のノードとの隣接方向、および当該木ノードが列挙に含まれるものであることを示す情報等を有する。
【００４６】
［第１の実施形態の処理］
次に、論理関係認識装置１０の処理の流れについて説明する。まず、図１６を用いて抽出部２０１の処理について説明する。図１６は、抽出部の処理の流れを示すフローチャートである。図１６に示すように、まず、抽出部２０１は、様式グラフおよび解析後視覚表現ルールを読み込む（ステップＳ１１）。次に、抽出部２０１は、様式グラフから解析後視覚表現ルールの条件を満たすノード群を選択する（ステップＳ１２）。次に、抽出部２０１は、選択したノード群の項目名属性を項目名に設定、すなわち項目名であることを示すフラグの値をｔｒｕｅにする（ステップＳ１３）。最後に、抽出部２０１は、様式グラフとＧとして返す（ステップＳ１４）。
【００４７】
次に、図１７を用いて解析部２０２の処理について説明する。図１７は、解析部の処理の流れを示すフローチャートである。解析部２０２は、視覚表現ルールを基に解析後視覚表現ルールを作成する。まず、解析部２０２は、視覚表現ルール群を読み込む（ステップＳ２１）。次に、解析部２０２は、ＡｒｒａｙまたはＨａｓｈ型の変数ｒｕｌｅ＿ｌｉｓｔを生成する（ステップＳ２２）。以降、解析部２０２は、読み込んだ視覚表現ルールを１つずつ処理する（ステップＳ２３、Ｓ２７）。
【００４８】
まず、解析部２０２は、視覚表現ルールの条件を解析する（ステップＳ２４）。次に、解析部２０２は、視覚表現ルールのアクションを解析する（ステップＳ２５）。そして、解析部２０２は、解析した条件およびアクションを解析後視覚表現ルールとしてｒｕｌｅ＿ｌｉｓｔに格納する（ステップＳ２６）。解析部２０２は、全ての視覚表現ルールについて処理を行った後、解析後視覚表現ルール群が格納されたｒｕｌｅ＿ｌｉｓｔを出力する（ステップＳ２８）。
【００４９】
次に、図１８を用いて、第１の削除部２０３の処理について説明する。図１８は、第１の削除部の処理の流れを示すフローチャートである。まず、第１の削除部２０３は、様式グラフを読み込む（ステップＳ３１）。
【００５０】
次に、第１の削除部２０３は、様式グラフの各ノードについて、以下の処理を行う（ステップＳ３２、Ｓ３７）。まず、左方向に隣接するノードの本数が２本以上である場合（ステップＳ３３、ｔｒｕｅ）、第１の削除部２０３は、左方向に隣接するノードと対象ノードの隣接関係を削除する（ステップＳ３４）。また、左方向に隣接するノードの本数が２本以上でない場合（ステップＳ３３、ｆａｌｓｅ）、第１の削除部２０３は、隣接関係を削除しない。
【００５１】
次に、上方向に隣接するノードの本数が２本以上である場合（ステップＳ３５、ｔｒｕｅ）、第１の削除部２０３は、上方向に隣接するノードと対象ノードの隣接関係を削除する（ステップＳ３６）。また、上方向に隣接するノードの本数が２本以上でない場合（ステップＳ３５、ｆａｌｓｅ）、第１の削除部２０３は、隣接関係を削除しない。第１の削除部２０３は、全ての対象ノードについて処理を行った後、様式グラフを出力する（ステップＳ３８）。
【００５２】
例えば、図８の例では、第１の削除部２０３は、ノードｇ１、ｇ２、ｇ３、ｇ４およびｇ５と、ノードｇ６との隣接関係や、ノードｇ１３およびｇ１７と、ノードｇ１４との隣接関係を表すエッジを削除する。
【００５３】
次に、図１９を用いて、第２の削除部２０４の処理について説明する。図１９は、第２の削除部の処理の流れを示すフローチャートである。まず、第２の削除部２０４は、様式グラフおよび項目名ノードリストを読み込む（ステップＳ４１）。なお、項目名ノードリストは、抽出部２０１によって抽出された項目名ノードのリストである。
【００５４】
次に、第２の削除部２０４は、項目名ノードのリストの各項目名ノードについて、以下の処理を行う（ステップＳ４２、Ｓ４７）。まず、左方向に項目値ノードが隣接する場合（ステップＳ４３、ｔｒｕｅ）、第２の削除部２０４は、左方向に隣接するノードと対象ノードの隣接関係を削除する（ステップＳ４４）。また、左方向に項目値ノードが隣接しない場合（ステップＳ４３、ｆａｌｓｅ）、第２の削除部２０４は、隣接関係を削除しない。
【００５５】
次に、上方向に項目値ノードが隣接する場合（ステップＳ４５、ｔｒｕｅ）、第２の削除部２０４は、上方向に隣接するノードと対象ノードの隣接関係を削除する（ステップＳ４６）。また、上方向に項目値ノードが隣接しない場合（ステップＳ４５、ｆａｌｓｅ）、第２の削除部２０４は、隣接関係を削除しない。第２の削除部２０４は、全ての対象ノードについて処理を行った後、様式グラフを出力する（ステップＳ４８）。
【００５６】
例えば、図８の例では、第２の削除部２０４は、ノードｇ３とノードｇ４との隣接関係や、ノードｇ８と、ノードｇ１２およびｇ１３との隣接関係や、ノードｇ１４およびｇ１７と、ノードｇ１５との隣接関係を表すエッジを削除する。
【００５７】
次に、図２０を用いて、分類部２０５の処理について説明する。図２０は、分類部の処理の流れを示すフローチャートである。以後、対象ノードから右側に隣接しているノードを辿って得られるノードとの関係を「右側に接続する」、対象ノードから下側に隣接しているノードを辿って得られるノードとの関係を「下側に接続する」と呼ぶ。図２０に示すように、まず、分類部２０５は、様式グラフおよび対象ノードを読み込む（ステップＳ５１）。ここで、対象ノードが項目名でない場合（ステップＳ５２、ｔｒｕｅ）、分類部２０５は、列挙フラグを「列挙なし」に設定する（ステップＳ５８）。なお、列挙フラグは、各対象ノードの分類を「縦列挙」、「横列挙」および「列挙なし」のうちのいずれかで示す変数である。また、列挙には、縦列挙と横列挙の複合型や、列挙入れ子構造も存在するが、これらの列挙は、縦列挙および横列挙の組み合わせで表現することができる。
【００５８】
また、対象ノードが項目名である場合（ステップＳ５２、ｆａｌｓｅ）、分類部２０５は、対象ノードの下側に接続するノード群をｂｏｔｔｏｍｓに格納し、対象ノードの右側に接続するノード群をｒｉｇｈｔｓに格納する（ステップＳ５３）。
【００５９】
ここで、ｒｉｇｈｔｓに項目名が含まれず、ｒｉｇｈｔｓの個数が１である場合（ステップＳ５４、ｔｒｕｅ）、分類部２０５は、列挙フラグを「横列挙」に設定する（ステップＳ５５）。また、ｒｉｇｈｔｓに項目名が含まれる場合、またはｒｉｇｈｔｓの個数が１でない場合（ステップＳ５４、ｆａｌｓｅ）、分類部２０５は、以下の処理を行う。
【００６０】
ｂｏｔｔｏｍｓに項目名が含まれず、ｂｏｔｔｏｍｓの個数が１である場合（ステップＳ５６、ｔｒｕｅ）、分類部２０５は、列挙フラグを「縦列挙」に設定する（ステップＳ５７）。ｂｏｔｔｏｍｓに項目名が含まれる場合、または、ｂｏｔｔｏｍｓの個数が１でない場合（ステップＳ５６、ｆａｌｓｅ）、分類部２０５は、列挙フラグを「列挙なし」に設定する（ステップＳ５８）。最後に、分類部２０５は、列挙フラグを出力する（ステップＳ５９）。
【００６１】
例えば、図６の例では、対象ノードがノードｅ１である場合、分類部２０５は、列挙フラグを「列挙なし」にする。また、対象ノードがノードｅ４である場合、分類部２０５は、列挙フラグを「横列挙」にする。
【００６２】
次に、図２１を用いて、縦列挙取得部２０６の処理について説明する。図２１は、縦列挙取得部の処理の流れを示すフローチャートである。図２１に示すように、まず、縦列挙取得部２０６は、様式グラフおよび対象ノードを読み込む（ステップＳ６１）。次に、縦列挙取得部２０６は、ｂｏｔｔｏｍｓに対象ノードの下側に接続するノード群を格納する（ステップＳ６２）。ここで、ｂｏｔｔｏｍｓに項目名が含まれている場合（ステップＳ６３、ｔｒｕｅ）、縦列挙取得部２０６は、処理を終了する。また、ｂｏｔｔｏｍｓに項目名が含まれていない場合（ステップＳ６３、ｆａｌｓｅ）、縦列挙取得部２０６は、親を対象ノード、子をｂｏｔｔｏｍｓ、方向を縦とする論理関係を取得する（ステップＳ６４）。そして、縦列挙取得部２０６は、取得した論理関係を列挙リスト３０１に追加する（ステップＳ６５）。
【００６３】
例えば、図２の例では、対象ノードがノードａ１である場合、縦列挙取得部２０６は、ｂｏｔｔｏｍｓにはノードａ２およびａ３を格納し、親をノードａ１、子をノードａ２およびａ３、方向を縦とする論理関係を取得する。また、対象ノードがノードａ４である場合、縦列挙取得部２０６は、ｂｏｔｔｏｍｓにはノードａ５を格納し、親をノードａ４、子をノードａ５、方向を縦とする論理関係を取得する。
【００６４】
次に、図２２を用いて、横列挙取得部２０７の処理について説明する。図２２は、横列挙取得部の処理の流れを示すフローチャートである。図２２に示すように、まず、横列挙取得部２０７は、様式グラフおよび対象ノードを読み込む（ステップＳ７１）。次に、横列挙取得部２０７は、ｒｉｇｈｔｓに対象ノードの右側に接続するノード群を格納する（ステップＳ７２）。ここで、ｒｉｇｈｔｓに項目名が含まれている場合（ステップＳ７３、ｔｒｕｅ）、横列挙取得部２０７は、処理を終了する。また、ｒｉｇｈｔｓに項目名が含まれていない場合（ステップＳ７３、ｆａｌｓｅ）、横列挙取得部２０７は、親を対象ノード、子をｒｉｇｈｔｓ、方向を横とする論理関係を取得する（ステップＳ７４）。そして、横列挙取得部２０７は、取得した論理関係を列挙リスト３０１に追加する（ステップＳ７５）。
【００６５】
例えば、図３の例では、対象ノードがノードｂ１である場合、横列挙取得部２０７は、ｒｉｇｈｔｓにノードｂ２を格納し、親をノードｂ１、子をノードｂ２、方向を横とする論理関係を取得する。また、対象ノードがノードｂ３である場合、横列挙取得部２０７は、ｒｉｇｈｔｓにノードｂ４を格納し、親ノードをｂ３、子をｂ４、方向を横とする論理関係を取得する。
【００６６】
次に、図２３を用いて、包含関係取得部２０８の処理について説明する。図２３は、包含関係取得部の処理の流れを示すフローチャートである。包含関係取得部２０８は、まず、様式グラフを読み込む（ステップＳ８１）。
【００６７】
ここで、包含関係取得部２０８は、様式グラフに含まれる各ノードについて、以下の処理を行う（ステップＳ８２、Ｓ８７）。まず、ノード自身が項目名、かつ右方向に隣接するノードに項目名のノードを含む場合（ステップＳ８３、ｔｒｕｅ）、包含関係取得部２０８は、右側の包含関係を取得する（ステップＳ８４）。右側の包含関係を取得する処理の詳細については後述する。また、ノード自身が項目名でない場合、または右方向に隣接するノードに項目名のノードを含まない場合（ステップＳ８３、ｆａｌｓｅ）、包含関係取得部２０８は、右側の包含関係を取得しない。
【００６８】
次に、ノード自身が項目名、かつ下方向に隣接するノードに項目名のノードを含む場合（ステップＳ８５、ｔｒｕｅ）、包含関係取得部２０８は、下側の包含関係を取得する（ステップＳ８６）。下側の包含関係を取得する処理の詳細については後述する。また、ノード自身が項目名でない場合、または下方向に隣接するノードに項目名のノードを含まない場合（ステップＳ８５、ｆａｌｓｅ）、包含関係取得部２０８は、右側の包含関係を取得しない。包含関係取得部２０８は、全てのノードについて処理を行った後、取得した包含関係を包含関係リストとして出力する（ステップＳ８８）。
【００６９】
次に、図２４を用いて、右側の包含関係を取得する処理について説明する。図２４は、右側の包含関係を取得する処理の流れを示すフローチャートである。図２４に示すように、まず、包含関係取得部２０８は、対象ノードおよび様式グラフを読み込む（ステップＳ１０１）。次に、包含関係取得部２０８は、ｍｉｎ＿ｙに、対象ノードの右側にあるノード群のｙ座標の最小値を格納し、ｍａｘ＿ｙに、対象ノードの右側にあるノード群のｙ座標の最大値を格納する（ステップＳ１０２）。
【００７０】
ここで、対象ノードのｙ座標の範囲が対象ノードの右側のノード群のｙ座標の範囲と一致する場合（ステップＳ１０３、ｔｒｕｅ）、包含関係取得部２０８は、ｌｉｓｔに、対象ノードの右側のノード群を格納する（ステップＳ１０７）。なお、包含関係取得部２０８は、対象ノードの右側のノード群のｙ座標の範囲を、ｍｉｎ＿ｙおよびｍａｘ＿ｙを用いて計算する。そして、包含関係取得部２０８は、ｌｉｓｔに含まれるノードそれぞれについて以下の処理を行う（ステップＳ１０８、Ｓ１１０）。包含関係取得部２０８は、それぞれのノードｒを対象ノードとするたびに、ステップＳ１０２に戻り再帰処理を実行する（ステップＳ１０９）。
【００７１】
また、対象ノードのｙ座標の範囲が対象ノードの右側のノード群のｙ座標の範囲と一致しない場合（ステップＳ１０３、ｆａｌｓｅ）であって、包含するノードの中に項目値が含まれない場合（ステップＳ１０４、ｆａｌｓｅ）、包含関係取得部２０８は、右側に包含する従のノード集合（ｌｉｓｔ）を初期化する（ステップＳ１０５）。また、包含するノードの中に項目値が含まれる場合（ステップＳ１０４、ｔｒｕｅ）、包含関係取得部２０８は、初期化を行わない。最後に、包含関係取得部２０８は、ｌｉｓｔを出力する（ステップＳ１０６）。
【００７２】
次に、図２５を用いて、下側の包含関係を取得する処理について説明する。図２５は、下側の包含関係を取得する処理の流れを示すフローチャートである。図２５に示すように、まず、包含関係取得部２０８は、対象ノードおよび様式グラフを読み込む（ステップＳ１５１）。次に、包含関係取得部２０８は、ｍｉｎ＿ｘに、対象ノードの下側にあるノード群のｘ座標の最小値を格納し、ｍａｘ＿ｘに、対象ノードの下側にあるノード群のｘ座標の最大値を格納する（ステップＳ１５２）。
【００７３】
ここで、対象ノードのｘ座標の範囲が対象ノードの下側のノード群のｘ座標の範囲と一致する場合（ステップＳ１５３、ｔｒｕｅ）、包含関係取得部２０８は、ｌｉｓｔに、対象ノードの下側のノード群を格納する（ステップＳ１５７）。なお、包含関係取得部２０８は、対象ノードの下側のノード群のｙ座標の範囲を、ｍｉｎ＿ｘおよびｍａｘ＿ｘを用いて計算する。そして、包含関係取得部２０８は、ｌｉｓｔに含まれるノードそれぞれについて以下の処理を行う（ステップＳ１５８、Ｓ１６０）。包含関係取得部２０８は、それぞれのノードｒを対象ノードとするたびに、ステップＳ１５２に戻り再帰処理を実行する（ステップＳ１５９）。
【００７４】
また、対象ノードのｘ座標の範囲が対象ノードの下側のノード群のｘ座標の範囲と一致しない場合（ステップＳ１５３、ｆａｌｓｅ）であって、包含するノードの中に項目値が含まれない場合（ステップＳ１５４、ｆａｌｓｅ）、包含関係取得部２０８は、下側に包含する従のノード集合（ｌｉｓｔ）を初期化する（ステップＳ１５５）。また、包含するノードの中に項目値が含まれる場合（ステップＳ１５４、ｔｒｕｅ）、包含関係取得部２０８は、初期化を行わない。最後に、包含関係取得部２０８は、ｌｉｓｔを出力する（ステップＳ１５６）。
【００７５】
次に、図２６を用いて、包含グラフ生成部２０９の処理について説明する。図２６は、包含グラフ生成部の処理の流れを示すフローチャートである。図２６に示すように、まず、包含グラフ生成部２０９は、様式グラフおよび包含関係リストを読み込む（ステップＳ２０１）。次に、包含グラフ生成部２０９は、Ｎｖに、包含関係リストから取得した縦方向の包含ノードを格納し、Ｎｈに、包含関係リストから取得した横方向の包含ノードを格納し、ＩＧに、新規包含グラフ集合を格納する（ステップＳ２０２）。
【００７６】
ここで、包含グラフ生成部２０９は、ＮｖおよびＮｈに含まれる各包含ノードｉについて、以下の処理を行う（ステップＳ２０３、Ｓ２１３）。以後、他のノードの包含関係から、包含グラフに対象ノードが既に割り当てられている場合、対象ノードを「分割済みのノード」と呼ぶ。まず、包含ノードｉが分割済みである場合（ステップＳ２０４、ｔｒｕｅ）、包含グラフ生成部２０９は、次の包含ノードの処理に進む。また、包含ノードｉが分割済みでない場合（ステップＳ２０４、ｆａｌｓｅ）、包含グラフ生成部２０９は、ｉｎｃに包含ノードｉおよび従の項目名ノード集合を格納する（ステップＳ２０５）。
【００７７】
ここで、ｉｎｃの中で分割済みのノードがある場合（ステップＳ２０６、ｔｒｕｅ）、包含グラフ生成部２０９は、生成済包含グラフから従のノードが重なっているグラフを探し、当該包含ノードをｎに格納する（ステップＳ２０７）。次に、包含グラフ生成部２０９は、包含ノードｎを起点とする包含グラフ内にあるノードに追加されていないノード群を追加する（ステップＳ２０８）。そして、包含グラフ生成部２０９は、包含ノードの包含する方向、または項目名の並びから包含方向を設定する（ステップＳ２０９）。
【００７８】
一方、ｉｎｃの中で分割済みのノードがない場合（ステップＳ２０６、ｆａｌｓｅ）、包含グラフ生成部２０９は、新規包含グラフを生成する（ステップＳ２１０）。そして、包含グラフ生成部２０９は、主のノードが包含する方向、または項目名の並びから包含方向を設定し（ステップＳ２１１）、新規包含グラフを包含グラフ集合ＩＧに追加する（ステップＳ２１２）。包含グラフ生成部２０９は、全てのｉについて処理を行った後、包含グラフ集合ＩＧを出力する（ステップＳ２１４）。
【００７９】
このように、包含グラフ生成部２０９は、包含関係のあるノードのうち、包含するノードの数が多いものを優先して処理していく。包含グラフ生成部２０９は、まず、様式グラフ内の全ての包含関係を取得し、包含方向にノードを探索していく。また、例えば、図７の例では、図１２に示すような包含グラフが生成される。また、図８の例では、ｇ１はｇ６に包含されていないため、ｇ６を起点とした包含グラフとは別に、ｇ１を起点とした包含グラフが生成される。
【００８０】
次に、図２７を用いて、項目名間合成部２１０の処理について説明する。図２７は、項目名間合成部の処理の流れを示すフローチャートである。図２７に示すように、まず、項目名間合成部２１０は、様式グラフ、包含グラフ３０２、列挙リスト３０１および始点ノード群を読み込む（ステップＳ３０１）。次に、項目名間合成部２１０は、新規木構造Ｔを生成する（ステップＳ３０２）。なお、始点ノード群は、包含グラフの起点となるノードの集合である。
【００８１】
ここで、項目名間合成部２１０は、始点ノード群に含まれる各始点ノードについて、以下の処理を行う（ステップＳ３０３、Ｓ３１９）。まず、項目名間合成部２１０は、包含グラフからノードが項目名のノード群を求め、ｃｈｉｌｄｒｅｎに格納する（ステップＳ３０４）。次に、項目名間合成部２１０は、子をｃｈｉｌｄｒｅｎ、親をなしとする始点ノード用の新規木ノードｔを生成する（ステップＳ３０５）。そして、項目名間合成部２１０は、対象木ノードをｔとする（ステップＳ３０６）。そして、項目名間合成部２１０は、対象木ノードの種類を設定せずに木構造に追加する（ステップＳ３０７）。
【００８２】
ここで、対象木ノードが列挙リストにある場合（ステップＳ３０８、ｆａｌｓｅ）、項目名間合成部２１０は、次の始点ノードの処理に移行する。対象木ノードが列挙リストにない場合（ステップＳ３０８、ｔｒｕｅ）であって、さらに、対象木ノードが横方向に包含するノード集合が存在する場合（ステップＳ３０９、ｔｒｕｅ）、項目名間合成部２１０は、対象木ノードの種類を包含に設定する（ステップＳ３１０）。そして、項目名間合成部２１０は、横に包含するノード集合の次のノードを対象ノードとし、ステップＳ３０７へ戻り、再帰処理を行う（ステップＳ３１１、Ｓ３１２、Ｓ３１３）。
【００８３】
対象木ノードが列挙リストにない場合（ステップＳ３０８、ｔｒｕｅ）であって、さらに、対象木ノードが横方向に包含するノード集合が存在せず（ステップＳ３０９、ｆａｌｓｅ）、対象木ノードが縦方向に包含するノード集合が存在する場合（ステップＳ３１４、ｔｒｕｅ）、項目名間合成部２１０は、対象木ノードの種類を包含に設定する（ステップＳ３１５）。そして、項目名間合成部２１０は、横に包含するノード集合の次のノードを対象ノードとし、ステップＳ３０７へ戻り、再帰処理を行う（ステップＳ３１６、Ｓ３１７、Ｓ３１８）。項目名間合成部２１０は、全ての始点ノードについて処理を行った後、木構造データを出力する（ステップＳ３２０）。
【００８４】
なお、対象木ノードが列挙リストにない場合（ステップＳ３０８、ｔｒｕｅ）であって、さらに、対象木ノードが横方向に包含するノード集合が存在せず（ステップＳ３０９、ｆａｌｓｅ）、対象木ノードが縦方向に包含するノード集合が存在しない場合（ステップＳ３１４、ｆａｌｓｅ）、項目名間合成部２１０は、次の始点ノードの処理に移行する。
【００８５】
次に、図２８を用いて、列挙合成部２１１の処理について説明する。図２８に示すように、列挙合成部２１１は、まず、様式グラフ、列挙リスト３０１および木構造データを読み込む（ステップＳ３４１）。
【００８６】
そして、列挙合成部２１１は、列挙リスト３０１の各ノードごとに以下の処理を行う（ステップＳ３４２、Ｓ３４７）。まず、列挙合成部２１１は、新規木ノードを生成する（ステップＳ３４３）。次に、列挙合成部２１１は、木ノードの子を列挙リストの子に設定する（ステップＳ３４４）。そして、列挙合成部２１１は、木ノードを木構造データに合成する（ステップＳ３４６）。列挙合成部２１１は、以上の処理を全てのノードについて行った後、木構造データを出力する（ステップＳ３４８）。例えば、図７の例では、図１３に示すような木構造データが出力される。
【００８７】
次に、図２９を用いて、追加部２１２の処理について説明する。図２９は、追加部の処理の流れを示すフローチャートである。図２９に示すように、まず、追加部２１２は、様式グラフおよび木構造データを読み込み、Ｓに木構造データを格納し、Ｇに様式グラフを格納する（ステップＳ３５１）。次に、追加部２１２は、ｎｄｓに親なしのノード集合を格納し、ｓｔｒに任意の文字列を格納する（ステップＳ３５２）。ここで、追加部２１２は、ｎｄｓの左または上方向にある罫線枠外の文字列が取得できれば、取得した文字列をｓｔｒに格納する（ステップＳ３５３）。
【００８８】
罫線枠外の文字列が発見されなかった場合（ステップＳ３５４、ｆａｌｓｅ）、追加部２１２は、ｓｔｒに格納した任意の文字列を有し、種類を様式とする木ノードをｎｄｓの親として木構造データに追加する（ステップＳ３５５）。また、罫線枠外の文字列が発見された場合（ステップＳ３５４、ｔｒｕｅ）、追加部２１２は、ｓｔｒに格納した任意の文字列を有し、種類を様式とする木ノードをｎｄｓの親として木構造データに追加する（ステップＳ３５６）。最後に、追加部２１２は、木構造データを出力する（ステップＳ３５７）。
【００８９】
なお、任意の文字列としては、ｆｏｒｍ＃（ｉ）のように、カウントに合わせて文字列が変わるようにしてもよい。この場合、（ｉ）の部分がカウントに合わせて変化するため、根ノードの文字列は「ｆｏｒｍ１」、「ｆｏｒｍ２」のようになる。また、表の左または上方向の罫線枠外に、「○○直交表」のような記載があれば、根ノードの文字列を「○○直交表」のようにしてもよい。
【００９０】
［第１の実施形態の効果］
抽出部２０１は、帳票の項目名または項目値を表す領域に関する情報をノードとして表し、ノード間の隣接関係をエッジとして表したグラフを基に、ノードのうち、あらかじめ設定された条件を満たすノードを、項目名を表す領域のノードである項目名ノードとして抽出する。また、第１の削除部２０３は、１つのノードの所定の方向に、複数のノードが隣接している場合、１つのノードと複数のノードとの隣接関係を表すエッジを削除する。また、第２の削除部２０４は、項目名ノードのうち、所定の方向に項目値を表す領域のノードである項目値ノードが隣接している項目名ノードと、項目値ノードとの隣接関係を表すエッジを削除する。
【００９１】
縦列挙取得部２０６および横列挙取得部２０７は、第１の削除部２０３および第２の削除部２０４によってエッジの削除が行われたグラフを基に、項目名ノードと項目値ノードとの間の論理関係を取得する。また、包含関係取得部２０８は、第１の削除部２０３によってエッジの削除が行われたグラフを基に、項目名ノード間の包含関係を取得する。また、項目名間合成部２１０および列挙合成部２１１は、縦列挙取得部２０６および横列挙取得部２０７によって取得された論理関係と、包含関係取得部２０８によって取得された包含関係と、を合成した木構造のデータを作成する。
【００９２】
このため、本実施形態によれば、帳票に縦列挙、横列挙、縦列挙と横列挙の複合型、または列挙型入れ子構造が含まれる場合であっても、帳票の項目名間の論理関係、および項目名と項目値との間の論理関係を正確に認識することができるようになる。さらに、本実施形態では、論理関係を半自動的に取得することができるため、帳票の半構造データの取得および活用を効率的に行うことができるようになる。
【００９３】
また、第１の削除部２０３は、１つのノードの左側または上側に、複数のノードが隣接している場合、１つのノードと複数のノードとの隣接関係を表すエッジを削除してもよい。また、第２の削除部２０４は、項目名ノードのうち、左側または上側に、項目値を表す領域のノードである項目値ノードが隣接している項目名ノードと、項目値ノードとの隣接関係を表すエッジを削除してもよい。一般的に帳票の項目名間や項目名と項目値との位置関係は、左から右、または上から下である場合が多い。このため、削除する隣接関係の方向を左側と上側に設定しておくことで、多くの帳票に対応するこが可能になる。
【００９４】
包含関係取得部２０８は、第１の項目名ノードの右側に隣接する第１のノード群のうち少なくとも１つが項目名ノードであり、かつ、第１のノード群に含まれる全てのノードの高さが第１の項目名ノードの高さ以下であり、かつ、第１のノード群の左上端のノードの頂点と、第１の項目名ノードの頂点が重なっている場合、第１の項目名ノードが第１のノード群を包含していると判定する。また、包含関係取得部２０８は、第２の項目名ノードの下側に隣接する第２のノード群のうち少なくとも１つが項目名ノードであり、かつ、第２のノード群に含まれる全てのノードの幅が第２の項目名ノードの幅以下であり、かつ、第２のノード群の左上端のノードの頂点と、第１の項目名ノードの頂点が重なっている場合、第２の項目名ノードが第２のノード群を包含していると判定する。このように、ノードの隣接関係、高さおよび幅を利用することによって、包含関係を正確に認識することができる。
【００９５】
［その他の実施形態］
論理関係認識の対象は、帳票形式に整形可能であれば、Ｗｅｂ画面やシステムＧＵＩであってもよい。例えば、図３０に示すようなＷｅｂ上で航空券を行うようなＷｅｂ画面から、項目名および項目値を取得し、帳票形式に整形することで、当該Ｗｅｂ画面を論理関係認識処理の対象とすることができる。図３０は、その他の実施形態について説明するための図である。
【００９６】
［システム構成等］
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行われる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００９７】
また、本実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００９８】
［プログラム］
一実施形態として、論理関係認識装置１０は、パッケージソフトウェアやオンラインソフトウェアとして上記の論理関係認識を実行する論理関係認識プログラムを所望のコンピュータにインストールさせることによって実装できる。例えば、上記の論理関係認識プログラムを情報処理装置に実行させることにより、情報処理装置を論理関係認識装置１０として機能させることができる。ここで言う情報処理装置には、デスクトップ型またはノート型のパーソナルコンピュータが含まれる。また、その他にも、情報処理装置にはスマートフォン、携帯電話機やＰＨＳ（Personal  Handyphone  System）等の移動体通信端末、さらには、ＰＤＡ（Personal  Digital  Assistant）等のスレート端末等がその範疇に含まれる。
【００９９】
また、論理関係認識装置１０は、ユーザが使用する端末装置をクライアントとし、当該クライアントに上記の論理関係認識に関するサービスを提供する論理関係認識サーバ装置として実装することもできる。例えば、論理関係認識サーバ装置は、帳票を入力とし、木構造データを出力とする論理関係認識サービスを提供するサーバ装置として実装される。この場合、論理関係認識サーバ装置は、Ｗｅｂサーバとして実装することとしてもよいし、アウトソーシングによって上記の論理関係認識に関するサービスを提供するクラウドとして実装することとしてもかまわない。
【０１００】
図３１は、プログラムが実行されることにより論理関係認識装置が実現されるコンピュータの一例を示す図である。コンピュータ１０００は、例えば、メモリ１０１０、ＣＰＵ１０２０を有する。また、コンピュータ１０００は、ハードディスクドライブインタフェース１０３０、ディスクドライブインタフェース１０４０、シリアルポートインタフェース１０５０、ビデオアダプタ１０６０、ネットワークインタフェース１０７０を有する。これらの各部は、バス１０８０によって接続される。
【０１０１】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ１１００に挿入される。シリアルポートインタフェース１０５０は、例えばマウス１１１０、キーボード１１２０に接続される。ビデオアダプタ１０６０は、例えばディスプレイ１１３０に接続される。
【０１０２】
ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３、プログラムデータ１０９４を記憶する。すなわち、論理関係認識装置１０の各処理を規定するプログラムは、コンピュータにより実行可能なコードが記述されたプログラムモジュール１０９３として実装される。プログラムモジュール１０９３は、例えばハードディスクドライブ１０９０に記憶される。例えば、論理関係認識装置１０における機能構成と同様の処理を実行するためのプログラムモジュール１０９３が、ハードディスクドライブ１０９０に記憶される。なお、ハードディスクドライブ１０９０は、ＳＳＤにより代替されてもよい。
【０１０３】
また、上述した実施形態の処理で用いられる設定データは、プログラムデータ１０９４として、例えばメモリ１０１０やハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、メモリ１０１０やハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して実行する。
【０１０４】
なお、プログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限らず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、プログラムモジュール１０９３およびプログラムデータ１０９４は、ネットワーク（ＬＡＮ、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムモジュール１０９３およびプログラムデータ１０９４は、他のコンピュータから、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【０１０５】
１０  論理関係認識装置
２０  制御部
３０  記憶部
２０１  抽出部
２０２  解析部
２０３  第１の削除部
２０４  第２の削除部
２０５  分類部
２０６  縦列挙取得部
２０７  横列挙取得部
２０８  包含関係取得部
２０９  包含グラフ生成部
２１０  項目名間合成部
２１１  列挙合成部
２１２  追加部
３０１  列挙リスト
３０２  包含グラフ
【図１】
0006612680.tif 000002
【図２】
0006612680.tif 000003
【図３】
0006612680.tif 000004
【図４】
0006612680.tif 000005
【図５】
0006612680.tif 000006
【図６】
0006612680.tif 000007
【図７】
0006612680.tif 000008
【図８】
0006612680.tif 000009
【図９】
0006612680.tif 000010
【図１０】
0006612680.tif 000011
【図１１】
0006612680.tif 000012
【図１２】
0006612680.tif 000013
【図１３】
0006612680.tif 000014
【図１４】
0006612680.tif 000015
【図１５】
0006612680.tif 000016
【図１６】
0006612680.tif 000017
【図１７】
0006612680.tif 000018
【図１８】
0006612680.tif 000019
【図１９】
0006612680.tif 000020
【図２０】
0006612680.tif 000021
【図２１】
0006612680.tif 000022
【図２２】
0006612680.tif 000023
【図２３】
0006612680.tif 000024
【図２４】
0006612680.tif 000025
【図２５】
0006612680.tif 000026
【図２６】
0006612680.tif 000027
【図２７】
0006612680.tif 000028
【図２８】
0006612680.tif 000029
【図２９】
0006612680.tif 000030
【図３０】
0006612680.tif 000031
【図３１】
0006612680.tif 000032