(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）や各種プログラムを記憶する。さらに、記憶部３０は、プログラムの実行で用いられる各種情報を記憶する。また、記憶部３０は、例えば表リスト３０１を記憶する。
【００２３】
ここで、論理関係認識装置１０による論理関係認識処理について説明するとともに、論理関係認識装置１０の各部の詳細について説明する。抽出部２０１は、帳票の項目名または項目値を表す領域に関する情報をノードとして表し、ノード間の隣接関係をエッジとして表したグラフ、すなわち様式グラフを基に、ノードのうち、あらかじめ設定された条件を満たすノードを、項目名を表す領域のノードである項目名ノードとして抽出する。
【００２４】
ここで、項目名ノードを抽出する際のルールは、解析部２０２によって作成される。解析部２０２は、あらかじめテキストファイル等として作成された解析前の視覚表現のルールを読み込み、読み込んだ視覚表現のルールから条件およびアクションを解析し、コンピュータで認識可能な視覚表現ルールを作成する。なお、以降の説明で、単に視覚表現ルールと呼ぶ場合は、解析後の視覚表現ルールのことを指すこととする。
【００２５】
次に、分類部２０３は、様式グラフのエッジを基に、項目名ノードから表の起点となるノードである起点ノードを抽出し、起点ノードを起点とした表を、上端と左端の両方に項目名が存在する直交表、上端に項目名が存在する縦表、および左端に項目名が存在する横表のうちのいずれかに分類する。
【００２６】
例えば、分類部２０３は、左上のノード、すなわち起点ノードを対象ノードとした場合に、所定の条件が満たされるか否かによって分類を行う。以後、対象ノードから右側に隣接しているノードを辿って得られるノードとの関係を「右側に接続する」、対象ノードから下側に隣接しているノードを辿って得られるノードとの関係を「下側に接続する」と呼ぶ。このとき、まず、分類部２０３は、図６に示すように、起点ノードの右側に接続するノード群をｒｉｇｈｔｓ、起点ノードの下側に接続するノード群をｂｏｔｔｏｍｓと定義する。そして、ｒｉｇｈｔｓおよびｂｏｔｔｏｍｓについて、下記の条件１および条件２が満たされるか否かを判定する。図６は、表の分類について説明するための図である。
（条件１）ｒｉｇｈｔｓが全て項目名かつｒｉｇｈｔｓの高さが起点ノードの高さと同じである。
（条件２）ｂｏｔｔｏｍｓが全て項目名かつｂｏｔｔｏｍｓの幅が起点ノードの幅と同じである。
【００２７】
分類部２０３は、条件１、および条件２が満たされる場合、起点ノードを起点とする表を直交表に分類し、条件１が満たされ、条件２が満たされない場合、起点ノードを起点とする表を縦表に分類し、条件２が満たされ、条件１が満たされない場合、起点ノードを起点とする表を横表に分類する。
【００２８】
次に、直交表取得部２０６は、直交表における項目名ノード間の縦方向の論理関係、直交表における項目名ノード間の横方向の論理関係、直交表における項目名ノードと項目名ノード以外のノードである項目値ノードとの間の縦方向の論理関係、および直交表における項目名ノードと項目値ノードとの間の横方向の論理関係を取得する。また、縦表取得部２０４は、縦表における項目名ノード間の縦方向の論理関係、および縦表における項目名ノードと項目値ノードとの間の縦方向の論理関係を取得する。また、横表取得部２０５は、横表における項目名ノード間の横方向の論理関係、および横表における項目名ノードと項目値ノードとの間の横方向の論理関係を取得する。
【００２９】
直交表取得部２０６は、項目名および当該項目名の右側にある項目名または項目値の組み合わせを横方向の論理関係として取得し、項目名および当該項目名の下側にある項目名または項目値の組み合わせを縦方向の論理関係として取得する。また、横表取得部２０５は、項目名および当該項目名の右側にある項目名または項目値の組み合わせを横方向の論理関係として取得する。また、縦表取得部２０４は、項目名および当該項目名の下側にある項目名または項目値の組み合わせを縦方向の論理関係として取得する。
【００３０】
具体的に、縦表取得部２０４は、論理関係を、図７に示すようなリストとして取得し、取得したリストを表リスト３０１として記憶部３０に格納する。図７は、縦表の表リストの一例である。図７は、図２の表の論理関係を表した表リストである。図７のリストの１行目は、項目名ノードａ１の縦方向の子がノードａ３およびａ４であることを表している。また、図７のリストの２行目は、項目名ノードａ３の縦方向の子がノードａ７、ａ１１およびａ１５であることを表している。
【００３１】
なお、抽出部２０１および分類部２０３の処理によって、表が縦表であること、およびノードａ３およびノードａ４が項目名であることがわかっているため、縦表取得部２０４は、ノードａ４をノードａ３の横方向の子とするような誤った論理関係の取得を行わない。
【００３２】
また、図１０に示すように、縦表取得部２０４は、例えば表の左上のノードの右側に接続するノード群のうち最も上側にあるノード群をｌｅａｓｔ＿ｔｏｐｓとし、ｌｅａｓｔ＿ｔｏｐｓを起点として論理関係の取得を行う。図１０は、縦表の論理関係の取得について説明するための図である。
【００３３】
また、横表取得部２０５は、論理関係を、図８に示すようなリストとして取得し、取得したリストを表リスト３０１として記憶部３０に格納する。図８は、横表の表リストの一例である。図８は、図３の表の論理関係を表した表リストである。図８のリストの１行目は、項目名ノードｂ１の横方向の子がノードｂ２およびｂ５であることを表している。また、図８のリストの２行目は、項目名ノードｂ２の横方向の子がノードｂ３およびｂ４であることを表している。
【００３４】
なお、抽出部２０１および分類部２０３の処理によって、表が横表であること、およびノードｂ２およびノードｂ５が項目名であることがわかっているため、横表取得部２０５は、ノードｂ５をノードｂ２の縦方向の子とするような誤った論理関係の取得を行わない。
【００３５】
また、図１１に示すように、横表取得部２０５は、例えば表の左上のノードの下側に接続するノード群のうち最も左側にあるノード群をｌｅａｓｔ＿ｌｅｆｔｓとし、ｌｅａｓｔ＿ｌｅｆｔｓを起点として論理関係の取得を行う。図１１は、横表の論理関係の取得について説明するための図である。
【００３６】
また、直交表取得部２０６は、論理関係を、図９に示すようなリストとして取得し、取得したリストを表リスト３０１として記憶部３０に格納する。図９は、直交表の表リストの一例である。図９は、図４の表の論理関係を表した表リストである。図９のリストの１行目は、項目名ノードｃ１の双方向の子がノードｃ２、ｃ５、ｃ１２、ｃ１９、ｃ２２およびｃ２５であることを表している。また、図９のリストの２行目は、項目名ノードｃ２の縦方向の子がノードｃ３およびｃ４であることを表している。また、図９のリストの３行目は、項目名ノードｃ３の縦方向の子がノードｃ７、ｃ１０、ｃ１４、ｃ１７、ｃ２０、ｃ２３およびｃ２６であることを表している。また、図９のリストの５行目は、項目名ノードｃ５の横方向の子がノードｃ６およびｃ９であることを表している。また、図９のリストの６行目は、項目名ノードｃ６横方向の子がノードｃ７およびｃ８であることを表している。
【００３７】
なお、抽出部２０１および分類部２０３の処理によって、表が直交表であること、およびノードｃ１が項目名であることがわかっているため、直交表取得部２０６は、ノードｃ１が縦方向および横方向の双方向に子となるノードを持つことを考慮した論理関係の取得を行うことができる。
【００３８】
また、図１２に示すように、直交表取得部２０６は、例えば表の左上のノードの右側に接続するノード群のうち最も上側にあるノード群をｌｅａｓｔ＿ｔｏｐｓとし、表の左上のノードの下側に接続するノード群のうち最も左側にあるノード群をｌｅａｓｔ＿ｌｅｆｔｓとする。そして、直交表取得部２０６は、ｌｅａｓｔ＿ｔｏｐｓおよびｌｅａｓｔ＿ｌｅｆｔｓを起点として論理関係の取得を行う。図１２は、直交表の論理関係の取得について説明するための図である。
【００３９】
合成部２０７は、縦表取得部２０４によって取得された論理関係、横表取得部２０５によって取得された論理関係、直交表取得部２０６によって取得された論理関係を、それぞれの表ごとに合成した木構造のデータを作成する。また、追加部２０８は、合成部２０７によって作成された木構造のデータに、当該木構造を定義する根ノードを追加する。なお、根ノードは様式を構成する論理関係を示すために追加しているため、様式を構成する情報が必要なければ追加部２０８は必須ではない。
【００４０】
例えば、合成部２０７は、図７に示すリストを基に、図１３に示す木構造のデータを作成する。そして、追加部２０８は、当該木構造のデータに根ノード「ｆｏｒｍ１」を追加する。図１３は、縦表の論理関係を表す木構造のデータの一例である。
【００４１】
また、合成部２０７は、図８に示すリストを基に、図１４に示す木構造のデータを作成する。そして、追加部２０８は、当該木構造のデータに根ノード「ｆｏｒｍ２」を追加する。図１４は、横表の論理関係を表す木構造のデータの一例である。
【００４２】
また、合成部２０７は、図９に示すリストを基に、図１５に示す木構造のデータを作成する。そして、追加部２０８は、当該木構造のデータに根ノード「ｆｏｒｍ３」を追加する。図１５は、直交表の論理関係を表す木構造のデータの一例である。
【００４３】
なお、木構造データの各ノードである木ノードは、例えば項目名または項目値の文字列等の帳票の書式情報から取得された情報の他に、子や親のノードを識別する情報、子や親のノードとの隣接方向、および当該木ノードが表に含まれるものであることを示す情報等を有する。
【００４４】
［第１の実施形態の処理］
次に、論理関係認識装置１０の処理の流れについて説明する。まず、図１６を用いて抽出部２０１の処理について説明する。図１６は、抽出部の処理の流れを示すフローチャートである。図１６に示すように、まず、抽出部２０１は、様式グラフおよび解析後視覚表現ルールを読み込む（ステップＳ１１）。次に、抽出部２０１は、様式グラフから解析後視覚表現ルールの条件を満たすノード群を選択する（ステップＳ１２）。次に、抽出部２０１は、選択したノード群の項目名属性を項目名に設定、すなわち項目名であることを示すフラグの値をｔｒｕｅにする（ステップＳ１３）。最後に、抽出部２０１は、様式グラフとＧとして返す（ステップＳ１４）。
【００４５】
次に、図１７を用いて解析部２０２の処理について説明する。図１７は、解析部の処理の流れを示すフローチャートである。解析部２０２は、視覚表現ルールを基に解析後視覚表現ルールを作成する。図１７に示すように、まず、解析部２０２は、視覚表現ルール群を読み込む（ステップＳ２１）。次に、解析部２０２は、ＡｒｒａｙまたはＨａｓｈ型の変数ｒｕｌｅ＿ｌｉｓｔを生成する（ステップＳ２２）。以降、解析部２０２は、読み込んだ視覚表現ルールを１つずつ処理する（ステップＳ２３、Ｓ２７）。
【００４６】
まず、解析部２０２は、視覚表現ルールの条件を解析する（ステップＳ２４）。次に、解析部２０２は、視覚表現ルールのアクションを解析する（ステップＳ２５）。そして、解析部２０２は、解析した条件およびアクションを解析後視覚表現ルールとしてｒｕｌｅ＿ｌｉｓｔに格納する（ステップＳ２６）。解析部２０２は、全ての視覚表現ルールについて処理を行った後、解析後視覚表現ルール群が格納されたｒｕｌｅ＿ｌｉｓｔを出力する（ステップＳ２８）。
【００４７】
次に、図１８を用いて分類部２０３の処理について説明する。図１８は、分類部の処理の流れを示すフローチャートである。図１８に示すように、まず、分類部２０３は、様式グラフおよび様式グラフの左上のノードである対象ノード、および表リスト３０１を読み込む（ステップＳ３１）。ここで、対象ノードが項目名でないか、対象ノードが既に親もしくは子として表リスト３０１に記載されている場合（ステップＳ３２、ｔｒｕｅ）、分類部２０３は、表フラグを「処理しない」に設定する（ステップＳ４２）。なお、表フラグは、表の分類を「縦表」、「横表」、「直交表」および「処理しない」のうちのいずれかで示す変数である。
【００４８】
分類部２０３は、対象ノードが項目名、かつ、対象ノードが親もしくは子として表リスト３０１に未記載の場合（ステップＳ３２、ｆａｌｓｅ）、分類部２０３は、対象ノードの下側に接続するノード群をｂｏｔｔｏｍｓに格納し、対象ノードの右側に接続するノード群をｒｉｇｈｔｓに格納する（ステップＳ３３）。
【００４９】
図６の例では、対象ノードがノードｃ１であり、ｒｉｇｈｔｓにはノードｃ２、ｃ３およびｃ４が格納され、ｂｏｔｔｏｍｓにはノードｃ５、ｃ６、ｃ９、ｃ１２、ｃ１３、ｃ１６、ｃ１９、ｃ２２およびｃ２５が格納される。
【００５０】
そして、分類部２０３は、ｒｉｇｈｔｓが全て項目名である場合、ｆｌｇ１をｔｒｕｅとし、それ以外の場合はｆｌｇ１をｆａｌｓｅとする。また、分類部２０３は、ｒｉｇｈｔｓの領域が対象ノードと同じ高さである場合、ｆｌｇ２をｔｒｕｅとし、それ以外の場合はｆｌｇ２をｆａｌｓｅとする（ステップＳ３４）。また、分類部２０３は、ｆｌｇ１およびｆｌｇ２の両方がｔｒｕｅである場合はｆｌｇ＿ｒをｔｒｕｅとし、それ以外の場合はｆｌｇ＿ｒをｆａｌｓｅとする。
【００５１】
また、分類部２０３は、ｂｏｔｔｏｍｓが全て項目名である場合、ｆｌｇ３をｔｒｕｅとし、それ以外の場合はｆｌｇ３をｆａｌｓｅとする。また、分類部２０３は、ｂｏｔｔｏｍｓの領域が対象ノードと同じ幅である場合、ｆｌｇ４をｔｒｕｅとし、それ以外の場合はｆｌｇ４をｆａｌｓｅとする（ステップＳ３５）。また、分類部２０３は、ｆｌｇ３およびｆｌｇ４の両方がｔｒｕｅである場合はｆｌｇ＿ｂをｔｒｕｅとし、それ以外の場合はｆｌｇ＿ｂをｆａｌｓｅとする。
【００５２】
ｆｌｇ＿ｒおよびｆｌｇ＿ｂの両方がｔｒｕｅである場合（ステップＳ３６がｔｒｕｅ、かつ、ステップＳ３７がｔｒｕｅ）、分類部２０３は、表フラグを「直交表」に設定する（ステップＳ３８）。また、ｆｌｇ＿ｒがｔｒｕｅかつｆｌｇ＿ｂがｆａｌｓｅである場合（ステップＳ３６がｔｒｕｅ、かつ、ステップＳ３７がｆａｌｓｅ）、分類部２０３は、表フラグを「縦表」に設定する（ステップＳ３９）。また、ｆｌｇ＿ｒがｆａｌｓｅかつｆｌｇ＿ｂがｔｒｕｅである場合（ステップＳ３６がｆａｌｓｅ、かつ、ステップＳ４０がｔｒｕｅ）、分類部２０３は、表フラグを「横表」に設定する（ステップＳ４１）。また、ｆｌｇ＿ｒおよびｆｌｇ＿ｂの両方がｆａｌｓｅである場合（ステップＳ３６がｆａｌｓｅ、かつ、ステップＳ４０がｆａｌｓｅ）、分類部２０３は、表フラグを「処理しない」に設定する（ステップＳ４２）。最後に、分類部２０３は、表フラグを出力する（ステップＳ４３）。
【００５３】
例えば、図６の例では、ｒｉｇｈｔｓ（ノードｃ２、ｃ３、ｃ４）は全て項目名、かつ、ｒｉｇｈｔｓの領域の高さがノードｃ１と同じであるため、分類部２０３は、ｆｌｇ１およびｆｌｇ２をｔｒｕｅにする。また、ｂｏｔｔｏｍｓ（ノードｃ５、ｃ６、ｃ９、ｃ１２、ｃ１３、ｃ１６、ｃ１９、ｃ２２、ｃ２５）は全て項目名、かつ、ｂｏｔｔｏｍｓの領域の幅がノードｃ１と同じであるため、分類部２０３は、ｆｌｇ３およびｆｌｇ４をｔｒｕｅにする。これより、ｆｌｇ＿ｒおよびｆｌｇ＿ｂは両方ともｔｒｕｅとなるため、分類部２０３は表フラグを「直交表」とする。これにより、図６の表は、直交表に分類される。
【００５４】
次に、図１９を用いて、縦表取得部２０４の処理について説明する。図１９は、縦表取得部の処理の流れを示すフローチャートである。図１９に示すように、まず、縦表取得部２０４は、起点ノードおよび様式グラフを読み込む（ステップＳ５１）。次に、縦表取得部２０４は、新規表リストを生成する（ステップＳ５２）。次に、縦表取得部２０４は、ｌｅａｓｔ＿ｔｏｐｓに、起点ノードと起点ノードの右側に接続するノード群のうち最も上側にあるノード群を格納する（ステップＳ５３）。
【００５５】
ここで、縦表取得部２０４は、ｌｅａｓｔ＿ｔｏｐｓに含まれるノードのそれぞれについて、以下の処理を行う（ステップＳ５４、Ｓ５７）。まず、縦表取得部２０４は、縦表論理関係を取得する（ステップＳ５５）。縦表論理関係を取得する処理の詳細については後述する。次に、縦表取得部２０４は、表リストに論理関係を追加する（ステップＳ５６）。縦表取得部２０４は、全てのノードについて処理を行った後、表リストを出力する（ステップＳ５８）。
【００５６】
例えば、縦表取得部２０４は、図２の表に対応した様式グラフを基に、図７に示すような表リストを出力する。このとき、縦表取得部２０４は、ｌｅａｓｔ＿ｔｏｐｓに、ノードａ１およびａ２を格納する。
【００５７】
次に、図２０を用いて、横表取得部２０５の処理について説明する。図２０は、横表取得部の処理の流れを示すフローチャートである。図２０に示すように、まず、横表取得部２０５は、起点ノードおよび様式グラフを読み込む（ステップＳ６１）。次に、横表取得部２０５は、新規表リストを生成する（ステップＳ６２）。次に、横表取得部２０５は、ｌｅａｓｔ＿ｌｅｆｔｓに、起点ノードと起点ノードの下側に接続するノード群のうち最も左側にあるノード群を格納する（ステップＳ６３）。
【００５８】
ここで、横表取得部２０５は、ｌｅａｓｔ＿ｌｅｆｔｓに含まれるノードのそれぞれについて、以下の処理を行う（ステップＳ６４、Ｓ６７）。まず、横表取得部２０５は、横表論理関係を取得する（ステップＳ６５）。横表論理関係を取得する処理の詳細については後述する。次に、横表取得部２０５は、表リストに論理関係を追加する（ステップＳ６６）。横表取得部２０５は、全てのノードについて処理を行った後、表リストを出力する（ステップＳ６８）。
【００５９】
例えば、横表取得部２０５は、図３の表に対応した様式グラフを基に、図８に示すような表リストを出力する。このとき、横表取得部２０５は、ｌｅａｓｔ＿ｌｅｆｔｓに、ノードｂ１およびｂ８を格納する。
【００６０】
次に、図２１を用いて、直交表取得部２０６の処理について説明する。図２１は、直交表取得部の処理の流れを示すフローチャートである。図２１に示すように、まず、直交表取得部２０６は、起点ノードおよび様式グラフを読み込む（ステップＳ７１）。次に、直交表取得部２０６は、新規表リストを生成する（ステップＳ７２）。
【００６１】
次に、直交表取得部２０６は、ｌｅａｓｔ＿ｔｏｐｓに、起点ノードの右側に接続するノード群のうち最も上側にあるノード群を格納する（ステップＳ７３）。ここで、直交表取得部２０６は、ｌｅａｓｔ＿ｔｏｐｓに含まれるノードのそれぞれについて、以下の処理を行う（ステップＳ７４、Ｓ７７）。まず、直交表取得部２０６は、縦表論理関係を取得する（ステップＳ７５）。次に、直交表取得部２０６は、表リストに論理関係を追加する（ステップＳ７６）。
【００６２】
次に、直交表取得部２０６は、ｌｅａｓｔ＿ｌｅｆｔｓに、起点ノードの下側に接続するノード群のうち最も左側にあるノード群を格納する（ステップＳ７８）。ここで、直交表取得部２０６は、ｌｅａｓｔ＿ｌｅｆｔｓに含まれるノードのそれぞれについて、以下の処理を行う（ステップＳ７９、Ｓ８２）。まず、直交表取得部２０６は、横表論理関係を取得する（ステップＳ８０）。次に、直交表取得部２０６は、表リストに論理関係を追加する（ステップＳ８１）。直交表取得部２０６は、全てのノードについて処理を行った後、表リストを出力する（ステップＳ８３）。
【００６３】
例えば、直交表取得部２０６は、図４の表に対応した様式グラフを基に、図９に示すような表リストを出力する。このとき、直交表取得部２０６は、ｌｅａｓｔ＿ｔｏｐｓに、ノードｃ２を格納する。また、直交表取得部２０６は、ｌｅａｓｔ＿ｌｅｆｔｓに、ノードｃ５、ｃ１２、ｃ１９、ｃ２２およびｃ２５を格納する。
【００６４】
次に、図２２を用いて、縦方向の論理関係を取得する処理、すなわち縦表論理関係取得処理（図１９のステップＳ５５、および図２１のステップＳ７５）について説明する。図２２は、縦方向の論理関係を取得する処理の流れを示すフローチャートである。縦表論理関係取得処理は、縦表取得部２０４または直交表取得部２０６によって行われる。ここでは、直交表取得部２０６が縦表論理関係取得処理を行う場合の例について説明する。なお、縦表取得部２０４が縦表論理関係取得処理を行う場合も、直交表取得部２０６が縦表論理関係取得処理を行う場合と処理内容は同様である。
【００６５】
図２２に示すように、まず、直交表取得部２０６は、対象ノードおよび様式グラフを読み込む（ステップＳ１０１）。そして、直交表取得部２０６は、新規論理関係を表す変数ｐａｉｒを生成する（ステップＳ１０２）。次に、直交表取得部２０６は、対象ノードの下隣にあるノード集合をｎｅｘｔ＿ｂに格納する（ステップＳ１０３）。
【００６６】
ここで、ｎｅｘｔ＿ｂのノード数が２つ以上であるか、ｎｅｘｔ＿ｂが全て項目名である場合（ステップＳ１０４、ｔｒｕｅ）、直交表取得部２０６は、ｐａｉｒに、親を対象ノード、子をｎｅｘｔ＿ｂ、方向を縦とする論理関係を追加する（ステップＳ１０５）。
【００６７】
そして、直交表取得部２０６は、ｎｅｘｔ＿ｂに含まれるノードのそれぞれ（ｃｒｔ）について、縦表論理関係取得処理を再帰的に行う（ステップＳ１０６、Ｓ１０８）。直交表取得部２０６は、ｐａｉｒに項目名および項目値の論理関係群を格納し、Ｇに様式グラフを格納し、対象ノードをｃｒｔに置き換える（ステップＳ１０７）。そして、直交表取得部２０６は、ステップＳ１０３に戻り、ｎｅｘｔ＿ｂに対象ノードの下隣にあるノード集合を格納する。
【００６８】
また、ｎｅｘｔ＿ｂのノード数が２つ以上でなく、かつ、ｎｅｘｔ＿ｂのいずれかが項目名でない場合（ステップＳ１０４、ｆａｌｓｅ）、直交表取得部２０６は、対象ノードの下側のノード集合をｂｏｔｔｏｍｓに格納する（ステップＳ１０９）。そして、直交表取得部２０６は、ｐａｉｒに、親を対象ノード、子をｂｏｔｔｏｍｓ、方向を縦とする論理関係を追加する（ステップＳ１１０）。直交表取得部２０６は、全ての対象ノードについて処理を行った後、論理関係集合（ｐａｉｒ）を出力する（ステップＳ１１１）。
【００６９】
例えば、図２３に示すように、直交表取得部２０６は、ノードａ１を対象ノードとした場合、ノードａ３およびａ４をｎｅｘｔ＿ｂとする。図２３は、縦方向の論理関係を取得する処理について説明するための図である。そして、直交表取得部２０６は、親をノードａ１、子をノードａ３およびａ４、方向を縦とする論理関係を取得する。さらに、直交表取得部２０６は、再帰的に処理を行い、ノードａ３を対象ノードとし、ノードａ７、ａ１１およびａ１５をｂｏｔｔｏｍｓとする。そして、直交表取得部２０６は、親をノードａ３、子をノードａ７、ａ１１およびａ１５、方向を縦とする論理関係を取得する。
【００７０】
次に、図２４を用いて、横方向の論理関係を取得する処理、すなわち横表論理関係取得処理（図２０のステップＳ６５、および図２１のステップＳ８０）について説明する。図２４は、横方向の論理関係を取得する処理の流れを示すフローチャートである。横表論理関係取得処理は、横表取得部２０５または直交表取得部２０６によって行われる。ここでは、直交表取得部２０６が横表論理関係取得処理を行う場合の例について説明する。なお、横表取得部２０５が横表論理関係取得処理を行う場合も、直交表取得部２０６が横表論理関係取得処理を行う場合と処理内容は同様である。
【００７１】
図２４に示すように、まず、直交表取得部２０６は、対象ノードおよび様式グラフを読み込む（ステップＳ２０１）。そして、直交表取得部２０６は、新規論理関係を表す変数ｐａｉｒを生成する（ステップＳ２０２）。次に、直交表取得部２０６は、対象ノードの右隣にあるノード集合をｎｅｘｔ＿ｒに格納する（ステップＳ２０３）。
【００７２】
ここで、ｎｅｘｔ＿ｒのノード数が２つ以上であるか、ｎｅｘｔ＿ｒが全て項目名である場合（ステップＳ２０４、ｔｒｕｅ）、直交表取得部２０６は、ｐａｉｒに、親を対象ノード、子をｎｅｘｔ＿ｒ、方向を横とする論理関係を追加する（ステップＳ２０５）。
【００７３】
そして、直交表取得部２０６は、ｎｅｘｔ＿ｒに含まれるノードのそれぞれ（ｃｒｔ）について、横表論理関係取得処理を再帰的に行う（ステップＳ２０６、Ｓ２０８）。直交表取得部２０６は、ｐａｉｒに項目名および項目値の論理関係群を格納し、Ｇに様式グラフを格納し、対象ノードをｃｒｔに置き換える（ステップＳ２０７）。そして、直交表取得部２０６は、ステップＳ２０３に戻り、ｎｅｘｔ＿ｒに対象ノードの右隣にあるノード集合を格納する。
【００７４】
また、ｎｅｘｔ＿ｒのノード数が２つ以上でなく、かつ、ｎｅｘｔ＿ｒのいずれかが項目名でない場合（ステップＳ２０４、ｆａｌｓｅ）、直交表取得部２０６は、対象ノードの下側のノード集合をｒｉｇｈｔｓに格納する（ステップＳ２０９）。そして、直交表取得部２０６は、ｐａｉｒに、親を対象ノード、子をｒｉｇｈｔｓ、方向を横とする論理関係を追加する（ステップＳ２１０）。直交表取得部２０６は、全ての対象ノードについて処理を行った後、論理関係集合（ｐａｉｒ）を出力する（ステップＳ２１１）。
【００７５】
例えば、図２５に示すように、直交表取得部２０６は、ノードｂ１を対象ノードとした場合、ノードｂ２およびｂ５をｎｅｘｔ＿ｒとする。図２５は、横方向の論理関係を取得する処理について説明するための図である。そして、直交表取得部２０６は、親をノードｂ１、子をノードｂ２およびｂ５、方向を横とする論理関係を取得する。さらに、直交表取得部２０６は、再帰的に処理を行い、ノードｂ２を対象ノードとし、ノードｂ３およびｂ４をｒｉｇｈｔｓとする。そして、直交表取得部２０６は、親をノードｂ２、子をノードｂ３およびｂ４、方向を横とする論理関係を取得する。
【００７６】
次に、図２６を用いて、合成部２０７の処理について説明する。図２６は、合成部の処理の流れを示すフローチャートである。まず、合成部２０７は、様式グラフおよび表リスト３０１を読み込む（ステップＳ３０１）。次に、合成部２０７は、新規木構造を生成する（ステップＳ３０２）。そして、合成部２０７は、表リストから先祖（親なしのノード）を取得する（ステップＳ３０３）。
【００７７】
ここで、合成部２０７は、表リストに含まれる各ノードについて、以下の処理を行う（ステップＳ３０４、Ｓ３１０）。まず、合成部２０７は、新規木ノードを生成する（ステップＳ３０５）。次に、合成部２０７は、表リストからノードの親を探索し木ノードの親に設定し、親がなければ木ノードを空とする（ステップＳ３０６）。そして、合成部２０７は、木ノードの子を、表リストの子に設定する（ステップＳ３０７）。そして、合成部２０７は、木ノードの種類を表に設定する（ステップＳ３０８）。そして、合成部２０７は、木ノードを木構造に合成する（ステップＳ３０９）。最後に、表リストの各ノードについて処理が終わると、合成部２０７は、木構造データを出力する（ステップＳ３１１）。
【００７８】
次に、図２７を用いて、追加部２０８の処理について説明する。図２７は、追加部の処理の流れを示すフローチャートである。図２７に示すように、まず、追加部２０８は、様式グラフおよび木構造データを読み込み、Ｓに木構造データを格納し、Ｇに様式グラフを格納する（ステップＳ４０１）。次に、追加部２０８は、ｎｄｓに親なしのノード集合を格納し、ｓｔｒに任意の文字列を格納する（ステップＳ４０２）。ここで、追加部２０８は、ｎｄｓの左または上方向にある罫線枠外の文字列が取得できれば、取得した文字列をｓｔｒに格納する（ステップＳ４０３）。
【００７９】
罫線枠外の文字列が発見されなかった場合（ステップＳ４０４、ｆａｌｓｅ）、追加部２０８は、ｓｔｒに格納した任意の文字列を有し、種類を様式とする木ノードをｎｄｓの親として木構造データに追加する（ステップＳ４０６）。また、罫線枠外の文字列が発見された場合（ステップＳ４０４、ｔｒｕｅ）、追加部２０８は、ｓｔｒに格納した任意の文字列を有し、種類を様式とする木ノードをｎｄｓの親として木構造データに追加する（ステップＳ４０５）。最後に、追加部２０８は、木構造データを出力する（ステップＳ４０７）。
【００８０】
なお、任意の文字列としては、ｆｏｒｍ＃（ｉ）のように、カウントに合わせて文字列が変わるようにしてもよい。この場合、（ｉ）の部分がカウントに合わせて変化するため、根ノードの文字列は「ｆｏｒｍ１」、「ｆｏｒｍ２」のようになる。また、表の左または上方向の罫線枠外に、「○○直交表」のような記載があれば、根ノードの文字列を「○○直交表」のようにしてもよい。
【００８１】
［第１の実施形態の効果］
抽出部２０１は、帳票の項目名または項目値を表す領域に関する情報をノードとして表し、ノード間の隣接関係をエッジとして表したグラフを基に、ノードのうち、あらかじめ設定された条件を満たすノードを、項目名を表す領域のノードである項目名ノードとして抽出する。分類部２０３は、エッジを基に、項目名ノードから表の起点となるノードである起点ノードを抽出し、起点ノードを起点とした表を、上端と左端の両方に項目名が存在する直交表、上端に項目名が存在する縦表、および左端に項目名が存在する横表のうちのいずれかに分類する。
【００８２】
直交表取得部２０６は、直交表における項目名ノード間の縦方向の論理関係、直交表における項目名ノード間の横方向の論理関係、直交表における項目名ノードと項目名ノード以外のノードである項目値ノードとの間の縦方向の論理関係、および直交表における項目名ノードと項目値ノードとの間の横方向の論理関係を取得する。縦表取得部２０４は、縦表における項目名ノード間の縦方向の論理関係、および縦表における項目名ノードと項目値ノードとの間の縦方向の論理関係を取得する。横表取得部２０５は、横表における項目名ノード間の横方向の論理関係、および横表における項目名ノードと項目値ノードとの間の横方向の論理関係を取得する。
【００８３】
合成部２０７は、縦表取得部２０４によって取得された論理関係、横表取得部２０５によって取得された論理関係、直交表取得部２０６によって取得された論理関係を、それぞれの表ごとに合成した木構造のデータを作成する。
【００８４】
このため、本実施形態によれば、帳票に横表、縦表、直交表または入れ子構造の直交表が含まれる場合であっても、帳票の項目名間の論理関係、および項目名と項目値との間の論理関係を正確に認識することができるようになる。さらに、本実施形態では、論理関係を半自動的に取得することができるため、帳票の半構造データの取得および活用を効率的に行うことができるようになる。
【００８５】
分類部２０３は、起点ノードの右側に接続する第１のノード群が全て項目名かつ第１ノード群の高さが起点ノードの高さと同じであることである第１の条件、および、起点ノードの下側に接続する第２のノード群が全て項目名かつ第２ノード群の幅が起点ノードの幅と同じであることである第２の条件が満たされる場合、起点ノードを起点とする表を直交表に分類し、第１の条件が満たされ、第２の条件が満たされない場合、起点ノードを起点とする表を横表に分類し、第２の条件が満たされ、第１の条件が満たされない場合、起点ノードを起点とする表を縦表に分類する。このように、ノードの隣接関係、高さおよび幅を利用することによって、縦表、横表、および直交表を正確に分類することができる。
【００８６】
直交表取得部２０６は、項目名および当該項目名の右側にある項目名または項目値の組み合わせを横方向の論理関係として取得し、項目名および当該項目名の下側にある項目名または項目値の組み合わせを縦方向の論理関係として取得する。また、横表取得部２０５は、項目名および当該項目名の右側にある項目名または項目値の組み合わせを横方向の論理関係として取得する。また、縦表取得部２０４は、項目名および当該項目名の下側にある項目名または項目値の組み合わせを縦方向の論理関係として取得する。このように、縦方向の場合は下側、および横方向の場合は右側のノードを参照することで、論理関係を正確に取得することができる。
【００８７】
［その他の実施形態］
論理関係認識の対象は、帳票形式に整形可能であれば、Ｗｅｂ画面やシステムＧＵＩであってもよい。例えば、図２８に示すようなＷｅｂ上で航空券を行うようなＷｅｂ画面から、項目名および項目値を取得し、帳票形式に整形することで、当該Ｗｅｂ画面を論理関係認識処理の対象とすることができる。図２８は、その他の実施形態について説明するための図である。
【００８８】
［システム構成等］
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行われる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００８９】
また、本実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００９０】
［プログラム］
一実施形態として、論理関係認識装置１０は、パッケージソフトウェアやオンラインソフトウェアとして上記の論理関係認識を実行する論理関係認識プログラムを所望のコンピュータにインストールさせることによって実装できる。例えば、上記の論理関係認識プログラムを情報処理装置に実行させることにより、情報処理装置を論理関係認識装置１０として機能させることができる。ここで言う情報処理装置には、デスクトップ型またはノート型のパーソナルコンピュータが含まれる。また、その他にも、情報処理装置にはスマートフォン、携帯電話機やＰＨＳ（Personal  Handyphone  System）等の移動体通信端末、さらには、ＰＤＡ（Personal  Digital  Assistant）等のスレート端末等がその範疇に含まれる。
【００９１】
また、論理関係認識装置１０は、ユーザが使用する端末装置をクライアントとし、当該クライアントに上記の論理関係認識に関するサービスを提供する論理関係認識サーバ装置として実装することもできる。例えば、論理関係認識サーバ装置は、帳票を入力とし、木構造データを出力とする論理関係認識サービスを提供するサーバ装置として実装される。この場合、論理関係認識サーバ装置は、Ｗｅｂサーバとして実装することとしてもよいし、アウトソーシングによって上記の論理関係認識に関するサービスを提供するクラウドとして実装することとしてもかまわない。
【００９２】
図２９は、プログラムが実行されることにより論理関係認識装置が実現されるコンピュータの一例を示す図である。コンピュータ１０００は、例えば、メモリ１０１０、ＣＰＵ１０２０を有する。また、コンピュータ１０００は、ハードディスクドライブインタフェース１０３０、ディスクドライブインタフェース１０４０、シリアルポートインタフェース１０５０、ビデオアダプタ１０６０、ネットワークインタフェース１０７０を有する。これらの各部は、バス１０８０によって接続される。
【００９３】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ１１００に挿入される。シリアルポートインタフェース１０５０は、例えばマウス１１１０、キーボード１１２０に接続される。ビデオアダプタ１０６０は、例えばディスプレイ１１３０に接続される。
【００９４】
ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３、プログラムデータ１０９４を記憶する。すなわち、論理関係認識装置１０の各処理を規定するプログラムは、コンピュータにより実行可能なコードが記述されたプログラムモジュール１０９３として実装される。プログラムモジュール１０９３は、例えばハードディスクドライブ１０９０に記憶される。例えば、論理関係認識装置１０における機能構成と同様の処理を実行するためのプログラムモジュール１０９３が、ハードディスクドライブ１０９０に記憶される。なお、ハードディスクドライブ１０９０は、ＳＳＤにより代替されてもよい。
【００９５】
また、上述した実施形態の処理で用いられる設定データは、プログラムデータ１０９４として、例えばメモリ１０１０やハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、メモリ１０１０やハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して実行する。
【００９６】
なお、プログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限らず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、プログラムモジュール１０９３およびプログラムデータ１０９４は、ネットワーク（ＬＡＮ、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムモジュール１０９３およびプログラムデータ１０９４は、他のコンピュータから、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【００９７】
１０  論理関係認識装置
２０  制御部
３０  記憶部
２０１  抽出部
２０２  解析部
２０３  分類部
２０４  縦表取得部
２０５  横表取得部
２０６  直交表取得部
２０７  合成部
２０８  追加部
３０１  表リスト
【図１】
0006542712.tif 000002
【図２】
0006542712.tif 000003
【図３】
0006542712.tif 000004
【図４】
0006542712.tif 000005
【図５】
0006542712.tif 000006
【図６】
0006542712.tif 000007
【図７】
0006542712.tif 000008
【図８】
0006542712.tif 000009
【図９】
0006542712.tif 000010
【図１０】
0006542712.tif 000011
【図１１】
0006542712.tif 000012
【図１２】
0006542712.tif 000013
【図１３】
0006542712.tif 000014
【図１４】
0006542712.tif 000015
【図１５】
0006542712.tif 000016
【図１６】
0006542712.tif 000017
【図１７】
0006542712.tif 000018
【図１８】
0006542712.tif 000019
【図１９】
0006542712.tif 000020
【図２０】
0006542712.tif 000021
【図２１】
0006542712.tif 000022
【図２２】
0006542712.tif 000023
【図２３】
0006542712.tif 000024
【図２４】
0006542712.tif 000025
【図２５】
0006542712.tif 000026
【図２６】
0006542712.tif 000027
【図２７】
0006542712.tif 000028
【図２８】
0006542712.tif 000029
【図２９】
0006542712.tif 000030