(57)【特許請求の範囲】
【請求項１】
コンピュータに、
複数のセルが矩形に配置され、少なくとも一部の前記セルに数値または文字列が設定された表を取得し、
前記表内の前記数値を第１定数値に置き換え、前記表内の前記文字列を、前記第１定数値とは符号が逆の第２定数値に置き換え、
前記表内に、
任意の長さの上辺と左辺を有する第１の矩形領域、
前記第１の矩形領域の左辺を右辺として有する第２の矩形領域、および
前記第１の矩形領域の上辺を下辺として有する第３の矩形領域
を含む領域群を、前記第１の矩形領域の範囲を変えて複数生成し、
生成された複数の前記領域群それぞれについて、
前記第１の矩形領域内の前記セルに設定された前記第１定数値および前記第２定数値の合計と、
前記第２の矩形領域内の前記セルと前記第３の矩形領域内の前記セルとに設定された前記第１定数値および前記第２定数値の合計と
の差を計算し、
前記複数の領域群のうち、計算した差の大きさに基づいて決定した少なくとも１つの領域群を出力する、
処理を実行させる領域抽出プログラム。
【請求項２】
前記出力では、少なくとも、差が最大となる領域群を出力する、
請求項１記載の領域抽出プログラム。
【請求項３】
前記生成では、
前記第１の矩形領域の左辺を右辺として有する複数の第２の矩形領域候補のうち、内包するセルに設定された前記第１定数値及び前記第２定数値の合計が、前記第２定数値と同一符号で絶対値が最大となる第２の矩形領域候補を、前記第１の矩形領域と同じ領域群に属する前記第２の矩形領域とし、
前記第１の矩形領域の上辺を下辺として有する複数の第３の矩形領域候補のうち、内包するセルに設定された前記第１定数値及び前記第２定数値の合計が、前記第２定数値と同一符号で絶対値が最大となる第３の矩形領域候補を、前記第１の矩形領域と同じ領域群に属する前記第３の矩形領域とする、
請求項１または２記載の領域抽出プログラム。
【請求項４】
前記置き換えでは、前記表内の値が設定されていないセルに対して、第３定数値を設定し、
差の計算では、前記第１の矩形領域内の前記セルに設定された前記第１定数値、前記第２定数値、および前記第３定数値の合計と、前記第２の矩形領域内の前記セルと前記第３の矩形領域内の前記セルとに設定された前記第１定数値、前記第２定数値、および前記第３定数値の合計との差を計算する、
請求項１乃至３のいずれかに記載の領域抽出プログラム。
【請求項５】
コンピュータが、
複数のセルが矩形に配置され、少なくとも一部の前記セルに数値または文字列が設定された表を取得し、
前記表内の前記数値を第１定数値に置き換え、前記表内の前記文字列を、前記第１定数値とは符号が逆の第２定数値に置き換え、
前記表内に、
任意の長さの上辺と左辺を有する第１の矩形領域、
前記第１の矩形領域の左辺を右辺として有する第２の矩形領域、および
前記第１の矩形領域の上辺を下辺として有する第３の矩形領域
を含む領域群を、前記第１の矩形領域の範囲を変えて複数生成し、
生成された複数の前記領域群それぞれについて、
前記第１の矩形領域内の前記セルに設定された前記第１定数値および前記第２定数値の合計と、
前記第２の矩形領域内の前記セルと前記第３の矩形領域内の前記セルとに設定された前記第１定数値および前記第２定数値の合計と
の差を計算し、
前記複数の領域群のうち、計算した差の大きさに基づいて決定した少なくとも１つの領域群を出力する、
領域抽出方法。
【請求項６】
複数のセルが矩形に配置され、少なくとも一部の前記セルに数値または文字列が設定された表を記憶する記憶部と、
前記表を取得し、前記表内の前記数値を第１定数値に置き換え、前記表内の前記文字列を、前記第１定数値とは符号が逆の第２定数値に置き換え、前記表内に、任意の長さの上辺と左辺を有する第１の矩形領域、前記第１の矩形領域の左辺を右辺として有する第２の矩形領域、および前記第１の矩形領域の上辺を下辺として有する第３の矩形領域を含む領域群を、前記第１の矩形領域の範囲を変えて複数生成し、生成された複数の前記領域群それぞれについて、前記第１の矩形領域内の前記セルに設定された前記第１定数値および前記第２定数値の合計と、前記第２の矩形領域内の前記セルと前記第３の矩形領域内の前記セルとに設定された前記第１定数値および前記第２定数値の合計との差を計算し、前記複数の領域群のうち、計算した差の大きさに基づいて決定した少なくとも１つの領域群を出力する演算部と、
を有する領域抽出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、領域抽出プログラム、領域抽出方法、および領域抽出装置に関する。
【背景技術】
【０００２】
コンピュータシステムでは、業務に使用する数値の多くが、表形式のデータ構造で保存されている。以下、管理対象の数値を保持する表形式のデータを数値表と呼ぶ。数値表は、ヘッダ領域と、管理対象の数値が設定される数値管理領域とを有している。ヘッダ領域は、数値管理領域に設定された数値が、どのような項目に関する数値なのかを表している。数値管理領域は、ヘッダ領域で示された項目に関する数値を設定する領域である。
【０００３】
数値表に設定された数値は、データマイニングに使用することができる。例えば、商品売り上げに関するデータが蓄積された多数の数値表を用いたデータマイニングを行うことで、売り上げの推移などを統計的に解析することができる。数値表をデータマイニングで使用する場合、数値表のどの部分がヘッダ領域であり、どの部分が数値管理領域なのかの区分けが行われる。ただし、このような区分けを人手で行ったのでは、多数の数値表がある場合、手間がかかりすぎる。
【０００４】
そこで数値表内の領域を自動で判断する技術が考えられている。例えば表型のデータ構造をもつデーターベースに保存された帳票データを出力する際に用いる帳票を容易に作成することのできる帳票作成方法およびそれを用いた帳票作成装置が考えられている。また、スプレッドシートからリレーショナルデータを自動抽出する方法も考えられている。
【０００５】
なお、数値表を処理対象とした解析では、数値表内の数値を用いて、所定条件を満たす領域を特定したい場面がある。そこで、例えば数値の配列の総和が最大となる領域を求める方法が考えられている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１１−１７５６４１号公報
【非特許文献】
【０００７】
【非特許文献１】Zhe Chen, Michael Cafarella, "Automatic web spreadsheet data extraction", SS@ '13 Proceedings of the 3rd International Workshop on Semantic Search Over the Web, ACM, 2013-08-30
【非特許文献２】Kuan-Yu Chen, Kun-Mao Chao, "On the range maximum-sum segment query problem", Discrete Applied Mathematics, 1 October 2007, Volume 155, Issue 16, Pages 2043-2052
【発明の概要】
【発明が解決しようとする課題】
【０００８】
数値表において、数値管理領域内のセルには、通常は数値が設定されるが、数値以外のデータが設定される場合がある。同様に、ヘッダ領域内のセルに、数値が設定される場合もある。従来の技術では、数値管理領域内のセルに文字列が設定されたり、ヘッダ領域内のセルに数値が設定されたりすると、各領域を適切に抽出することがきでない。
【０００９】
１つの側面では、数値と文字列が混在するヘッダ領域や数値管理領域を適切に抽出できるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
１つの案では、コンピュータに以下の処理を実行させる領域抽出プログラムが提供される。
領域抽出プログラムに基づいて、コンピュータは、複数のセルが矩形に配置され、少なくとも一部のセルに数値または文字列が設定された表を取得する。次にコンピュータは、表内の数値を第１定数値に置き換え、表内の文字列を、第１定数値とは符号が逆の第２定数値に置き換える。次にコンピュータは、表内に、任意の長さの上辺と左辺を有する第１の矩形領域、第１の矩形領域の左辺を右辺として有する第２の矩形領域、および第１の矩形領域の上辺を下辺として有する第３の矩形領域を含む領域群を、第１の矩形領域の範囲を変えて複数生成する。次にコンピュータは、生成された複数の領域群それぞれについて、第１の矩形領域内のセルに設定された第１定数値および第２定数値の合計と、第２の矩形領域内のセルと第３の矩形領域内のセルとに設定された第１定数値および第２定数値の合計とを比較する。そしてコンピュータは、比較結果に基づいて、複数の領域群のうち、少なくとも１つの領域群を出力する。
【発明の効果】
【００１１】
１態様によれば、数値と文字列が混在するヘッダ領域や数値管理領域を適切に抽出できる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態に係る領域抽出装置の構成例を示す図である。
【図２】第２の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。
【図３】コンピュータの機能を示すブロック図である。
【図４】数値表の一例を示す図である。
【図５】領域判定対象の数値表の例を示す図である。
【図６】置き換え後の数値表の例を示す図である。
【図７】矩形の組み合わせの第１の例を示す図である。
【図８】矩形の組み合わせの第２の例を示す図である。
【図９】矩形の組み合わせの第３の例を示す図である。
【図１０】スコアが最大となる矩形の表示例を示す図である。
【図１１】矩形を特定するための変数を示す図である。
【図１２】計算量の削減方法を示す図である。
【図１３】１次元配列の総和が最大となる領域を求める手法（定理１）を説明する図である。
【図１４】２次元配列の総和が最小となる領域を求める手法（定理２）を説明する図である。
【図１５】ｒｏｗ＿ａｒｅａ（Ｃ）の計算方法（定理３）を説明する図である。
【図１６】ｃｏｌ＿ａｒｅａ（Ｃ）の計算方法（定理４）を説明する図である。
【図１７】任意の矩形の総和を計算する方法（定理５）を説明する図である。
【図１８】演算部の機能の詳細を示すブロック図である。
【図１９】数値表置換処理の手順の一例を示すブロック図である。
【図２０】候補領域生成処理の手順の一例を示すフローチャートである。
【図２１】最適解探索処理の手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る領域抽出装置の構成例を示す図である。領域抽出装置１０は、記憶部１１と演算部１２とを有する。
【００１４】
記憶部１１は、複数のセルが、矩形内に縦横方向並べて配置された表１を記憶する。表１内には、行ヘッダ領域、列ヘッダ領域、および主に数値が設定される数値管理領域が設けられている。ただし、表１が記憶部１１に格納された時点では、各領域が、表１内のどの範囲の領域なのかが不明であるものとする。
【００１５】
行ヘッダ領域内の少なくとも一部のセルに文字列が設定されている。列ヘッダ領域内の少なくとも一部のセルに文字列が設定されている。数値管理領域内の少なくとも一部のセルに、同一行のセルに設定された文字列と同一列のセルに設定された文字列との組に関連する数値が設定されている。例えば表１が、店舗ごとの毎日の売り上げを表しており、行ヘッダ領域内のセルに店舗名が設定され、列ヘッダ領域のセルに日付が設定されているものとする。この場合、数値管理領域内のセルには、同一行に示される店舗における、同一列に示される日の売り上げを示す数値が設定される。
【００１６】
演算部１２は、表１を解析し、表１の行ヘッダ領域、列ヘッダ領域、および数値管理領域を抽出する。例えば演算部１２は、表１が入力されると、表１内の数値を第１定数値に置き換え、表１内の文字列を、第１定数値とは符号が逆の第２定数値に置き換える。このとき、演算部１２は、値が設定されていない（空値）のセルに対して、第３定数値を設定してもよい。例えば、演算部１２は、セル内の数値を第１定数値「２」に置き換え、セル内の文字列を第２定数値「−２」に置き換え、空値のセルに「０」を設定する。
【００１７】
次に演算部１２は、表１内に、任意の長さの上辺と左辺を有する第１の矩形領域（領域「Ｃ」）、第１の矩形領域の左辺を右辺として有する第２の矩形領域（領域「Ａ」）、および第１の矩形領域の上辺を下辺として有する第３の矩形領域（領域「Ｂ」）を含む領域群を、第１の矩形領域の範囲を変えて複数生成する。
【００１８】
演算部１２は、生成された複数の領域群それぞれについて、第１の矩形領域内のセルに設定された第１定数値及び第２定数値の合計（第１の合計）と、第２の矩形領域内のセルと第３の矩形領域内のセルとに設定された第１定数値及び第２定数値の合計（第２の合計）とを比較する。例えば演算部１２は、第１の合計と第２の合計との差を計算する。演算部１２は、算出された差を、その領域群のスコアとする。
【００１９】
例えば、第１の矩形領域内のセルに設定された第１定数値及び第２定数値の合計をｓｕｍ（Ｃ）とする。同様に、第２の矩形領域内のセルに設定された第１定数値及び第２定数値の合計をｓｕｍ（Ａ）とし、第３の矩形領域内のセルに設定された第１定数値及び第２定数値の合計をｓｕｍ（Ｂ）とする。第２の矩形領域内のセルと第３の矩形領域内のセルとに設定された第１定数値及び第２定数値の合計は、ｓｕｍ（Ａ）＋ｓｕｍ（Ｂ）となる。この場合、スコアは「スコア＝ｓｕｍ（Ｃ）−ｓｕｍ（Ａ）−ｓｕｍ（Ｂ）」という式で表される。
【００２０】
演算部１２は、領域群ごとの第１の合計と第２の合計との比較結果に基づいて、複数の領域群のうちに、少なくとも１つの領域群を出力する。例えば演算部１２は、すべての領域群についてのスコアを計算後、複数の領域群のうち、計算された差が最大となる領域群を出力する。例えば演算部１２は、該当する領域群を表す矩形を、表１に重ねて表示する。出力された領域群に含まれる第１の矩形領域が、表１内の数値管理領域２を示している。出力された領域群に含まれる第２の矩形領域が、表１内の行ヘッダ領域３を示している。出力された領域群に含まれる第３の矩形領域が、表１内の列ヘッダ領域４を示している。
【００２１】
このような領域抽出装置１０によれば、文字列が設定されたセルに比べ、数値が設定されたセルをより多く含む領域が、数値管理領域として特定される。また数値管理領域の左側に隣接し、数値が設定されたセルに比べ、文字列が設定されたセルをより多く含む領域が、行ヘッダ領域として特定される。そして、数値管理領域の上に隣接し、数値が設定されたセルに比べ、文字列設定されたセルをより多く含む領域が、列ヘッダ領域として特定される。その結果、数値管理領域、行ヘッダ領域、および列ヘッダ領域それぞれ内のセルに、数値と文字列とが混在していても、数値管理領域、行ヘッダ領域、および列ヘッダ領域を、適格に判別することができる。
【００２２】
なお、演算部１２は、領域群を生成する際、セル内の定数値を考慮に入れることで、無駄な領域群の生成を抑制することもできる。例えば演算部１２は、第１の矩形領域の左辺を右辺として有する複数の矩形領域を、該第１の矩形領域と同じ領域群に属する第２の矩形領域の候補とする。そして演算部１２は、第２の矩形領域の候補のうち、内包するセルに設定された第１定数値及び第２定数値の合計が、第２定数値と同一符号で絶対値が最大となる矩形領域を、該第１の矩形領域と同じ領域群に属する第２の矩形領域とする。
【００２３】
同様に演算部１２は、第１の矩形領域の上辺を下辺として有する複数の矩形領域を、該第１の矩形領域と同じ領域群に属する第３の矩形領域の候補とする。そして演算部１２は、第３の矩形領域の候補のうち、内包するセルに設定された第１定数値及び第２定数値の合計が、第２定数値と同一符号で絶対値が最大となる矩形領域を、該第１の矩形領域と同じ領域群に属する第３の矩形領域とする。
【００２４】
このようにして、第１の矩形領域の左辺に応じて、同じ領域群に属する第２の矩形領域を決定し、第１の矩形領域の上辺に応じて、同じ領域群に属する第３の矩形領域を決定することができる。その結果、生成される領域群の数が削減され、以後のスコア計算の計算量が減り、全体の処理効率が向上する。
【００２５】
また、表１内の値が設定されていないセルに対して設定する第３定数値の値を調整することで、判定結果として得られる領域の信頼性を向上させることができる。例えば、数値管理領域内の、設定する数値が未取得のセルが空欄になっている場合がある。この場合、第３の定数値を、第１の定数値と同一符号で、絶対値が「０」より大きい値（例えば「１」）とする。これにより、数値管理領域に空値のセルを多く含んでいても、スコアが高くなり、領域の抽出精度が向上する。また、数値管理領域の数値が、上下の２段で１組の情報になっている場合がある。例えば、上段に１ヶ月の売上額、下段に当該売上額の前年同月比が設定される場合である。このような場合、行ヘッダ領域には、連続する２つの行の内の１行にのみ月を示す文字列が設定されることがある。このような記載の表であれば、第３の定数値を、第２の設定値と同一符号で、絶対値が「０」より大きい値（例えば「−１」）とする。これにより、領域の抽出精度が向上する。
【００２６】
なお、第１の実施の形態における演算部１２は、例えば領域抽出装置１０が有するプロセッサにより実現することができる。また、記憶部１１は、例えば領域抽出装置１０が有するメモリまたはストレージ装置により実現することができる。
【００２７】
〔第２の実施の形態〕
次に第２の実施の形態について説明する。第２の実施の形態は、行ヘッダ領域、列ヘッダ領域、および数値管理領域との領域の抽出を、より効率的に実施できるようにしたものである。以下の説明では、ヘッダ領域と呼んだ場合、行ヘッダ領域と列ヘッダ領域とを含むものとする。
【００２８】
図２は、第２の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。コンピュータ１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０９を介してメモリ１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、またはＤＳＰ（Digital Signal Processor）である。プロセッサ１０１がプログラムを実行することで実現する機能の少なくとも一部を、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現してもよい。
【００２９】
メモリ１０２は、コンピュータ１００の主記憶装置として使用される。メモリ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。メモリ１０２としては、例えばＲＡＭ（Random Access Memory）などの揮発性の半導体記憶装置が使用される。
【００３０】
バス１０９に接続されている周辺機器としては、ストレージ装置１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、機器接続インタフェース１０７およびネットワークインタフェース１０８がある。
【００３１】
ストレージ装置１０３は、内蔵した記憶媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置１０３は、コンピュータの補助記憶装置として使用される。ストレージ装置１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置１０３としては、例えばＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）を使用することができる。
【００３２】
グラフィック処理装置１０４には、モニタ２１が接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像をモニタ２１の画面に表示させる。モニタ２１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００３３】
入力インタフェース１０５には、キーボード２２とマウス２３とが接続されている。入力インタフェース１０５は、キーボード２２やマウス２３から送られてくる信号をプロセッサ１０１に送信する。なお、マウス２３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００３４】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク２４に記録されたデータの読み取りを行う。光ディスク２４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク２４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００３５】
機器接続インタフェース１０７は、コンピュータ１００に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース１０７には、メモリ装置２５やメモリリーダライタ２６を接続することができる。メモリ装置２５は、機器接続インタフェース１０７との通信機能を搭載した記録媒体である。メモリリーダライタ２６は、メモリカード２７へのデータの書き込み、またはメモリカード２７からのデータの読み出しを行う装置である。メモリカード２７は、カード型の記録媒体である。
【００３６】
ネットワークインタフェース１０８は、ネットワーク２０に接続されている。ネットワークインタフェース１０８は、ネットワーク２０を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００３７】
以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。なお、第１の実施の形態に示した領域抽出装置１０も、図２に示したコンピュータ１００と同様のハードウェアにより実現することができる。
【００３８】
コンピュータ１００は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。コンピュータ１００に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、コンピュータ１００に実行させるプログラムをストレージ装置１０３に格納しておくことができる。プロセッサ１０１は、ストレージ装置１０３内のプログラムの少なくとも一部をメモリ１０２にロードし、プログラムを実行する。またコンピュータ１００に実行させるプログラムを、光ディスク２４、メモリ装置２５、メモリカード２７などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ１０１からの制御により、ストレージ装置１０３にインストールされた後、実行可能となる。またプロセッサ１０１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００３９】
次に、数値表内のヘッダ領域と数値管理領域とを特定するために、コンピュータ１００が有する機能について説明する。
図３は、コンピュータの機能を示すブロック図である。コンピュータ１００は、記憶部１１０と演算部１２０とを有する。記憶部１１０は、数値表１１１を記憶する。記憶部１１０は、例えばメモリ１０２またはストレージ装置１０３の記憶領域の一部である。
【００４０】
演算部１２０は、数値表１１１内のヘッダ領域や数値管理領域を判定し、ヘッダ領域と数値管理領域を示す情報を出力する。演算部１２０は、例えばプロセッサ１０１が、プログラムを実行することで実現される機能である。
【００４１】
次に、記憶部１１０に格納されている数値表１１１について説明する。
図４は、数値表の一例を示す図である。記憶部１１０に格納されている数値表１１１は、格子状の線で区切られた複数のセルを有している。なお、図４では、格子状の線は省略されている。複数のセルのうちの少なくとも一部のセルに、文字列または数値が設定されている。
【００４２】
数値表１１１には、行ヘッダ領域１１１ａ、列ヘッダ領域１１１ｂ、数値管理領域１１１ｃが設定されている。行ヘッダ領域１１１ａ、列ヘッダ領域１１１ｂ、数値管理領域１１１ｃは、複数のセルを含む矩形の領域である。行ヘッダ領域１１１ａ内のセルには、数値管理領域１１１ｃにおける各行の種別を示す情報が設定される。列ヘッダ領域１１１ｂ内のセルには、数値管理領域１１１ｃにおける各列の種別を示す情報が設定される。数値管理領域１１１ｃ内のセルには、対応する行および列のそれぞれに示される種別の組み合わせに応じた数値などの情報が設定される。
【００４３】
なお、行ヘッダ領域１１１ａと列ヘッダ領域１１１ｂとは、数値管理領域１１１ｃとの間で、以下の条件を満たしている。
［条件１］行ヘッダ領域１１１ａの右辺は、数値管理領域１１１ｃの左辺と接しており、双方の接する辺の長さは同じである。
［条件２］列ヘッダ領域１１１ｂの下辺は、数値管理領域１１１ｃの上辺と接しており、双方の接する辺の長さは同じである。
【００４４】
以下、これらの条件を出力条件と呼ぶ。
このような数値表１１１が大量にあるとき、行ヘッダ領域１１１ａ、列ヘッダ領域１１１ｂ、および数値管理領域１１１ｃの各領域を、ユーザが手入力で指定したのでは手間がかかりすぎる。そこで、第２の実施の形態では、コンピュータ１００により各領域の自動判定を行う。
【００４５】
なお、行ヘッダ領域１１１ａ内のセルと、列ヘッダ領域１１１ｂ内のセルには文字列しか設定されていないのであれば、文字列が設定されたセルのみを含む矩形領域を行ヘッダ領域１１１ａ、列ヘッダ領域１１１ｂとすることができる。また数値管理領域１１１ｃ内のセルには数値しか設定されていないのであれば、数値が設定されたセルのみを含む最大の矩形領域を数値管理領域１１１ｃとすることができる。しかし現実には、ヘッダ領域内のセルに数値が設定されていたり、数値管理領域内のセルに文字列が設定されていたりするような数値表が存在する。そのような数値表の場合、文字列が設定されたセルのみを含む領域をヘッダ領域としたり、数値が設定されたセルのみを含む領域を数値管理領域としたりしたのでは、行ヘッダ領域、列ヘッダ領域、および数値管理領域の各領域を正しく判定することができない。
【００４６】
また、セル内の情報に対して、インデントやフォント指定などの属性が付与されている数値表であれば、そのような属性を利用して行ヘッダ領域、列ヘッダ領域、および数値管理領域の各領域を判定することもできる。しかし、数値表には、セル内の情報に属性が付与されていないものもあり、属性に頼った領域の識別を実施できないことも多い。
【００４７】
そこで第２の実施の形態では、コンピュータ１００により、数値、文字列、空値セルをそれぞれ与えられた定数値（数値は正、文字列は負、空値はどちらでも可）に置き換える。そしてコンピュータ１００は、可能なすべての行ヘッダ領域を示す矩形Ａ、列ヘッダ領域を示す矩形Ｂ、数値管理領域を示す矩形Ｃの中で、ｇ（Ａ，Ｂ，Ｃ）＝ｓｕｍ（Ｃ）−ｓｕｍ（Ａ）−ｓｕｍ（Ｂ）が最大となる行ヘッダ領域を示す矩形Ａ、列ヘッダ領域を示す矩形Ｂ、数値管理領域を示す矩形Ｃを出力する。
【００４８】
これにより、数値管理領域に数値を、ヘッダ領域に文字列を多く含む性質を利用し、両者のバランスが取れた矩形を出力することで、ヘッダ領域に数値が、数値管理領域に文字列が含まれる場合であっても、適切な領域を判定できる。また各セルに設定された情報が文字列、数値、空値のいずれに属するかといった極めてシンプルな特徴を用いるため、ヘッダ領域にフォントやインデントなどの特徴がないような様々なタイプの数値表に対しても適用可能である。
【００４９】
以下、具体的な領域判定例について説明する。
図５は、領域判定対象の数値表の例を示す図である。図５に示す数値表１１２が、領域判定対象として指定されると、演算部１２０が、記憶部１１０から該当する数値表１１２を取得する。そして演算部１２０は、数値表１１２の各セル内の情報を、文字列なのか、数値なのか、空値なのかに応じて、定数値に置き換える。置き換える定数値は、ユーザにより予め設定されている。
【００５０】
図６は、置き換え後の数値表の例を示す図である。図６の例では、文字列を定数値「−２」に置き換え、数値を定数値「２」に置き換え、空値を定数値「０」に置き換えている。なお、図６に示す数値表１１２ａでは、定数値「０」のセルにおける「０」の表記は省略されている。
【００５１】
このような置き換えが行われた数値表１１２ａに基づいて、演算部１２０は、出力条件を満たす行ヘッダ領域を示す矩形Ａ、列ヘッダ領域を示す矩形Ｂ、数値管理領域を示す矩形Ｃの組み合わせを、すべて列挙する。そして演算部１２０は、列挙する過程で、各矩形からスコア「ｇ（Ａ，Ｂ，Ｃ）＝ｓｕｍ（Ｃ）−ｓｕｍ（Ａ）−ｓｕｍ（Ｂ）」を計算し、最大のスコアと、そのときの矩形Ａ，Ｂ，Ｃを示す情報を保存する。なお、「ｓｕｍ（）」は、指定された領域内のセルに設定されている定数値の合計である。
【００５２】
図７は、矩形の組み合わせの第１の例を示す図である。図７の例では、行ヘッダ領域を示す矩形Ａ１、列ヘッダ領域を示す矩形Ｂ１、および数値管理領域を示す矩形Ｃ１が設定されている。これらの矩形Ａ１，Ｂ１，Ｃ１の組み合わせが、列挙された最初の組み合わせであるものとする。
【００５３】
行ヘッダ領域を示す矩形Ａ１には２つのセルが含まれており、各セルの定数値は共に「０」である。列ヘッダ領域を示す矩形Ｂ１には４つのセルが含まれており、各セルの定数値はすべて「０」である。数値管理領域を示す矩形Ｃ１には、４つのセルが含まれており、２つのセルの定数値は「−２」であり、残りの２つのセルの定数値は「０」である。
【００５４】
このような矩形Ａ１，Ｂ１，Ｃ１の組み合わせのスコアは、「ｇ（Ａ１，Ｂ１，Ｃ１）＝ｓｕｍ（Ｃ１）−ｓｕｍ（Ａ１）−ｓｕｍ（Ｂ１）＝−４＋０＋０＝−４」となる。図７に示す矩形Ａ１，Ｂ１，Ｃ１が、最初に列挙されたものであるため、最大スコア「−４」となり、最大スコアの矩形「Ａ１，Ｂ１，Ｃ１」となる。
【００５５】
図８は、矩形の組み合わせの第２の例を示す図である。図８の例では、行ヘッダ領域を示す矩形Ａ２、列ヘッダ領域を示す矩形Ｂ２、および数値管理領域を示す矩形Ｃ２が設定されている。これらの矩形Ａ２，Ｂ２，Ｃ２の組み合わせが、図７に示した矩形Ａ１，Ｂ１，Ｃ１の組み合わせに続けて列挙されたものとする。
【００５６】
行ヘッダ領域を示す矩形Ａ２は、面積が「０」であり、セルを１つも含んでいない。列ヘッダ領域を示す矩形Ｂ２には１０個のセルが含まれており、４個のセルの定数値は「−２」であり、６個のセルの定数値は「０」である。数値管理領域を示す矩形Ｃ２には、１８個のセルが含まれており、１５個のセルの定数値は「２」であり、３つのセルの定数値は「０」である。
【００５７】
このような矩形Ａ２，Ｂ２，Ｃ２の組み合わせのスコアは、「ｇ（Ａ２，Ｂ２，Ｃ２）＝ｓｕｍ（Ｃ２）−ｓｕｍ（Ａ２）−ｓｕｍ（Ｂ２）＝３０＋０＋８＝３８」となる。このスコア「３８」は、図７に示す矩形Ａ１，Ｂ１，Ｃ１の組み合わせのスコア「−４」より大きい。従って、最大スコアが「３８」に更新され、最大スコアの矩形は「Ａ２，Ｂ２，Ｃ２」に更新される。
【００５８】
図９は、矩形の組み合わせの第３の例を示す図である。図９の例では、行ヘッダ領域を示す矩形Ａ３、列ヘッダ領域を示す矩形Ｂ３、および数値管理領域を示す矩形Ｃ３が設定されている。これらの矩形Ａ３，Ｂ３，Ｃ３の組み合わせが、図８に示した矩形Ａ２，Ｂ２，Ｃ２の組み合わせに続けて列挙されたものとする。
【００５９】
行ヘッダ領域を示す矩形Ａ３には７２個のセルが含まれており、４５個のセルの定数値は「−２」であり、２７個のセルの定数値は「０」である。列ヘッダ領域を示す矩形Ｂ３には２０個のセルが含まれており、５個のセルの定数値は「−２」であり、１５個のセルの定数値は「０」である。数値管理領域を示す矩形Ｃ３には、３６個のセルが含まれており、１２個のセルの定数値は「２」であり、１６個のセルの定数値は「−２」であり、８個のセルの定数値は「０」である。
【００６０】
このような矩形Ａ３，Ｂ３，Ｃ３の組み合わせのスコアは、「ｇ（Ａ３，Ｂ３，Ｃ３）＝ｓｕｍ（Ｃ３）−ｓｕｍ（Ａ３）−ｓｕｍ（Ｂ３）＝−８＋９０＋１０＝９２」となる。このスコア「９２」は、それまでの最大スコア「３８」より大きい。従って、最大スコアが「９２」に更新され、最大スコアの矩形は「Ａ３，Ｂ３，Ｃ３」に更新される。
【００６１】
演算部１２０は、以後、出力条件を満たす矩形の組み合わせすべてを列挙して、スコアを計算する。そして、すべての矩形の組み合わせのうち、スコアが最大値となったときの矩形の組み合わせ（最大スコアの矩形）が、出力される。
【００６２】
図７〜図９に示した例では、最終的に図９に示した矩形Ａ３，Ｂ３，Ｃ３の組み合わせが出力される。演算部１２０は、例えば、矩形Ａ３，Ｂ３，Ｃ３を、元の数値表１１２に重ね合わせてモニタ２１に表示する。
【００６３】
図１０は、スコアが最大となる矩形の表示例を示す図である。図１０に示すように、数値表１１２と矩形Ａ３，Ｂ３，Ｃ３とを重ねて表示することで、行ヘッダ領域、列ヘッダ領域、および数値管理領域が、視覚的に容易に認識できる。
【００６４】
ここで、最大スコアの矩形の判定に要する計算時間について考察する。
図１１は、矩形を特定するための変数を示す図である。数値表３０内の矩形の位置および形状を特定するには、その矩形の上辺の位置（行番号）、下辺の位置（行番号）、左辺の位置（列番号）、および右辺の位置（列番号）が特定できればよい。また、３つの矩形の間には、前記の出力条件に示す関係がある。そのため、３つの矩形の組み合わせは、行方向の三箇所（row＿top＿begin,row＿center＿begin,row＿center＿end）と、列方向の三箇所（col＿left＿begin,col＿center＿begin,col＿center＿end）の、計６箇所の位置によって特定できる。「row＿top＿begin」は、列ヘッダ領域の上辺の位置を示す変数である。「row＿center＿begin」は、数値管理領域の上辺の位置を示す変数である。「row＿center＿end」は、数値管理領域の下辺の位置を示す変数である。「col＿left＿begin」は、行ヘッダ領域の左辺の位置を示す変数である。「col＿center＿begin」は、数値管理領域の左辺の位置を示す変数である。「col＿center＿end」は、数値管理領域の右辺の位置を示す変数である。
【００６５】
最大スコアの矩形の判定処理時間は、数値表３０の大きさに依存する。そこで、数値表３０の行数ｎ，列数ｎ（ｎは１以上の整数）とする。この場合、最大スコアの矩形の判定処理を特別な工夫をせずに実施すると、行ヘッダ領域、列ヘッダ領域、および数値管理領域のすべての組み合わせ（オー記法でＯ（ｎ6））それぞれについて、コストをＯ（ｎ2）の時間で計算することになる。その結果、最大スコアの矩形の判定処理全体では、Ｏ（ｎ8）の時間が費やされる。
【００６６】
このように、数値表３０のサイズが大きくなると、計算量が非常に多くなり、計算に時間がかかる。そこで、計算量の削減について検討する。
３つの矩形の間には、数値管理領域の矩形が、列ヘッダ領域と行ヘッダ領域それぞれの矩形に対して、同一長の辺で接するという条件がある。この条件を用いると、数値管理領域が決まれば、スコアを最大化させる列ヘッダ領域、行ヘッダ領域の矩形を一意に決定することができる。このような性質を利用すれば、生成する矩形の組み合わせ数を減らすことができ、計算量を削減できる。なお、列ヘッダ領域の矩形がスコアを最大化させるのは、矩形内の定数値の合計が最小となる場合である。同様に、行ヘッダ領域の矩形がスコアを最大化させるのは、矩形内の定数値の合計が最小となる場合である。
【００６７】
図１２は、計算量の削減方法を示す図である。数値管理領域を示す矩形Ｃは、４つの変数「row＿center＿begin,row＿center＿end,col＿center＿begin,col＿center＿end」によって特定できる。
【００６８】
行ヘッダ領域を示す矩形は、数値管理領域を示す矩形Ｃの左辺を右辺として持つ。これにより、数値管理領域を示す矩形Ｃが決まると、行ヘッダ領域を示す矩形Ａを特定するための４つの変数のうちの３つの変数「row＿center＿begin,row＿center＿end,col＿center＿begin」が決まる。そして、行ヘッダ領域を示す矩形に含まれる定数値の総和を最小とするような位置を、行ヘッダ領域の左辺の位置とすることで、残りの１つの変数「col＿left＿begin」の値が決まる。すなわち、数値管理領域を示す矩形Ｃが決まれば、行ヘッダ領域を示す矩形Ａが一意に決まる。そこで、行ヘッダ領域を示す矩形Ａを、row＿area(C)とする。
【００６９】
列ヘッダ領域を示す矩形Ｂは、数値管理領域を示す矩形Ｃの上辺を下辺として持つ。これにより、数値管理領域を示す矩形Ｃが決まると、列ヘッダ領域を示す矩形Ｂを特定するための４つの変数のうちの３つの変数「row＿center＿begin,col＿center＿begin,col＿center＿end」が決まる。そして、列ヘッダ領域を示す矩形Ｂに含まれる定数値の総和を最小とするような位置を、列ヘッダ領域の上辺の位置とすることで、残りの１つの変数「row＿top＿begin」の値が決まる。すなわち、数値管理領域を示す矩形Ｃが決まれば、列ヘッダ領域を示す矩形Ｂが一意に決まる。そこで、列ヘッダ領域を示す矩形Ｂを、col＿area(C)とする。
【００７０】
この場合、コスト「ｇ（Ａ，Ｂ，Ｃ）＝ｓｕｍ（Ｃ）−（ｓｕｍ（Ａ）＋ｓｕｍ（Ｂ））」は、「ｇ’（Ｃ）＝ｓｕｍ（Ｃ）−（ｓｕｍ（ｒｏｗ＿ａｒｅａ（Ｃ））＋ｓｕｍ（ｃｏｌ＿ａｒｅａ（Ｃ）））」と置き換えることができる。この場合、ｇ’（Ｃ）を最大にする矩形Ｃを求めることで、ｇ（Ａ，Ｂ，Ｃ）を最大にする矩形Ａ，Ｂ，Ｃが求まる。
【００７１】
ｇ’（Ｃ）が最大となるＣを用いて、ｇ（Ａ，Ｂ，Ｃ）を最大にする矩形Ａ，Ｂ，Ｃを求める場合、以下のような手順によりＯ（ｎ4）の計算量で計算することができる。
［手順１］演算部１２０は、数値表の各セルを置き換え定数で置き換える。
【００７２】
［手順２］演算部１２０は、任意の矩形Ｃについてｓｕｍ（Ｃ），ｃｏｌ＿ａｒｅａ（Ｃ），ｒｏｗ＿ａｒｅａ（Ｃ）をＯ（１）で計算するための前処理を行う。前処理の計算量は、Ｏ（ｎ3）である。
【００７３】
［手順３］演算部１２０は、数値管理領域を示す矩形Ｃを全列挙する。例えば演算部１２０は、数値管理領域を示す矩形Ｃの開始行および列、終了行および列を全列挙する。全列挙の計算量は、Ｏ（ｎ4）である。
【００７４】
［手順４］演算部１２０は、列挙する過程で、各矩形から「ｇ’（Ｃ）＝ｓｕｍ（Ｃ）−（ｓｕｍ（ｒｏｗ＿ａｒｅａ（Ｃ））＋ｓｕｍ（ｃｏｌ＿ａｒｅａ（Ｃ）））」を計算し、最大のスコアと、そのときの矩形Ｃを保存する。このうち、ｓｕｍ（Ｃ）、ｒｏｗ＿ａｒｅａ（Ｃ）、（ｓｕｍ（ｒｏｗ＿ａｒｅａ（Ｃ））、ｃｏｌ＿ａｒｅａ（Ｃ）、ｓｕｍ（ｃｏｌ＿ａｒｅａ（Ｃ））それぞれを求める計算量は、いずれもＯ（１）である。
【００７５】
［手順５］演算部１２０は、スコアが最大となる矩形ｒｏｗ＿ａｒｅａ（Ｃ），ｃｏｌ＿ａｒｅａ（Ｃ），Ｃを出力する。ｒｏｗ＿ａｒｅａ（Ｃ），ｃｏｌ＿ａｒｅａ（Ｃ）それぞれを求める計算量は、いずれもＯ（１）である。
【００７６】
以上の計算において最も計算量が多いのは、矩形Ｃの全列挙の計算量Ｏ（ｎ4）である。従って、全体としても、Ｏ（ｎ4）の計算量で計算できる。次に、以下の２つの計算についての計算方法を詳細に説明する。
・ｃｏｌ＿ａｒｅａ（Ｃ）、ｒｏｗ＿ａｒｅａ（Ｃ）をＯ（ｎ3）の前処理時間、Ｏ（１）のクエリ時間で計算する方法
・任意の矩形の総和をＯ（ｎ3）の前処理時間、Ｏ（１）のクエリ時間で計算する方法
まず、ｃｏｌ＿ａｒｅａ（Ｃ）、ｒｏｗ＿ａｒｅａ（Ｃ）をＯ（ｎ3）の前処理時間、Ｏ（１）のクエリ時間で計算する方法について説明する。この計算は以下のような、１次元配列の総和が最大となる領域を求める手法と、２次元配列の総和が最小となる領域を求める手法とを利用する。なお、１次元配列の総和が最大となる領域を求める手法を「定理１」と、２次元配列の総和が最小となる領域を求める手法を「定理２」と呼ぶこととする。
【００７７】
図１３は、１次元配列の総和が最大となる領域を求める手法（定理１）を説明する図である。配列Ａ［ｉ］（ｉは１以上の整数）を考える。図１３には、ｉ＝１，２，３，・・・，８のときの、配列Ａ［ｉ］の値が示されている。ここで、配列Ａ［２］〜配列Ａ［ｅ］の値の総和が最大となるｅを求めるものとする（ｅは整数）。ｅが取り得る範囲は、「２〜８」であり、総和が最大となるｅは「６」である。
【００７８】
このような１次元配列の総和が最大となる領域を求める計算は、非特許文献２に示した論文で開示されている手法を用いることができる。当該論文には、１次元配列Ａ［１．．ｎ］について、任意の位置ｓについてＡ［ｓ．．ｅ］を最大化するｅをＯ（ｎ）時間の前処理、Ｏ（１）クエリ時間で計算可能であることが示されている。
【００７９】
次に、２次元配列の総和が最小となる領域を求める手法について説明する。
図１４は、２次元配列の総和が最小となる領域を求める手法（定理２）を説明する図である。行数ｎ，列数ｎの数値表内の領域の上辺の位置を示す行をｒｓ、下辺の位置を示す行をｒｅ、左辺の位置を示す列をｃｓ、右辺の位置を示す列をｃｅとする。このとき、ｒ行ｃ列のセルの定数値を、２次元配列Ａ［ｒ］［ｃ］で表す。そして、（ｒｓ，ｃｓ）−（ｒｅ，ｃｓ）を左辺とし、内包する定数値の総和が最小となる領域の右辺（ｒｓ，ｃｅ）−（ｒｅ，ｃｅ）を計算するものとする。
【００８０】
まず、以下の３次元配列Ｄを考える。
Ｄ［ｒｓ］［ｒｅ］［ｃ］＝−Σrs≦r≦reＡ［ｒ］［ｃ］  ・・・（１）
三次元配列Ｄは、列ｃの行ｒｓから行ｒｅまでの定数値の総和の符号を反転した値を保存した配列である。
【００８１】
定理２では、前処理として、ｒｓ，ｒｅ，ｃのすべての組み合わせに対して、三次元配列Ｄの値が計算される。すなわちｒｓ、ｒｅのすべての組み合わせについて、Ｄ［ｒｓ］［ｒｅ］［１］，Ｄ［ｒｓ］［ｒｅ］［２］，・・・，Ｄ［ｒｓ］［ｒｅ］［ｎ］が計算される。この前処理の計算方法の詳細は以下の通りである。
【００８２】
まず、２次元配列Ｃを考える。２次元配列Ｃは、ある列ｃの行１〜ｒまでの累積和配列である。２次元配列Ｃは、以下の式で表される。
Ｃ［ｒ］［ｃ］＝−Σ1≦i≦rＡ［ｉ］［ｃ］  ・・・（２）
２次元配列Ｃでは、Ｃ［ｒ］［ｃ］＝−Ａ［ｒ］［ｃ］＋Ｃ［ｒ−１］［ｃ］が成り立つ。なお、Ｃ［０］［ｃ］＝０とする。すべてのｃについてｒ＝１からｎまで順に、Ｃ［ｒ］［ｃ］を計算することで、２次元配列Ｃの値が得られる。この計算の計算量は、Ｏ（ｎ2）である。
【００８３】
この２次元配列Ｃの値を用いて、３次元配列Ｄを以下のように計算できる。
Ｄ［ｒｓ］［ｒｅ］［ｃ］＝−Σrs≦r≦reＡ［ｒ］［ｃ］＝Ｃ［ｒｅ］［ｃ］−Ｃ［ｒｓ−１］［ｃ］  ・・・（３）
そこで定理２では、すべてのｒｓ，ｒｅについて、ｃ＝１からｎまで、Ｄ［ｒｓ］［ｒｅ］［ｃ］＝Ｃ［ｒｅ］［ｃ］−Ｃ［ｒｓ−１］［ｃ］が計算される。そして、計算したＤ［ｒｓ］［ｒｅ］［１］，Ｄ［ｒｓ］［ｒｅ］［２］，・・・，Ｄ［ｒｓ］［ｒｅ］［ｎ］を、長さｎの１次元配列とみなし、定理１における前処理が実施される。
【００８４】
以上が、定理２の前処理である。この前処理は、Ｏ（ｎ2）個の１次元配列について、Ｏ（ｎ）の定理１の前処理を実施するものであり、計算量はＯ（ｎ3）である。
そして、クエリが入力されたとき、前処理の計算結果を用いて、２次元配列の総和が最小となる領域を求めるための、残りの計算が行われる。クエリとしては、ｒｓ，ｒｅ，ｃｓの値が入力される。入力されたクエリに応じて、３次元配列Ｄ［ｒｓ］［ｒｅ］［ｃｓ．．ｃｅ］の総和を最大化するｃｅが、計算量Ｏ（１）で計算できる。詳細は以下の通りである。
【００８５】
３次元配列Ｄは、すべての列について行ｒｓからｒｅまでの符号を反転させた値の総和を持っている。そのため、領域の内の定数値の総和を最小化する右辺は、３次元配列Ｄ［ｒｓ］［ｒｅ］［ｃｓ．．ｃｅ］の総和が最大となる領域を求めることで解ける。このような総和が最大となる領域の右辺を示すｃｅは、Ｄ［ｒｓ］［ｒｅ］［１］，Ｄ［ｒｓ］［ｒｅ］［２］，・・・，Ｄ［ｒｓ］［ｒｅ］［ｎ］からなる１次元配列に対する定理１の前処理の結果を用いて、定理１により計算量Ｏ（１）で計算できる。このようにして求められたｃｅが、内包する定数値の総和が最小となる領域のｃｅである。
【００８６】
以上の定理２を利用することで、図１２に示す行ヘッダ領域ｒｏｗ＿ａｒｅａ（Ｃ）と列ヘッダ領域ｃｏｌ＿ａｒｅａ（Ｃ）を効率的に計算できる。以下、ｒｏｗ＿ａｒｅａ（Ｃ）の計算方法を「定理３」と呼び、ｃｏｌ＿ａｒｅａ（Ｃ）の計算方法を「定理４」と呼ぶ。
【００８７】
まず、ｒｏｗ＿ａｒｅａ（Ｃ）の計算方法（定理３）について説明する。
図１５は、ｒｏｗ＿ａｒｅａ（Ｃ）の計算方法（定理３）を説明する図である。行数ｎ，列数ｎの２次元配列Ａについて、（ｒｓ，ｃｅ）−（ｒｅ，ｃｅ）を右辺とし、内包する定数値の総和が最小となる領域の左辺（ｒｓ，ｃｓ）−（ｒｅ，ｃｓ）を計算するものとする。この計算が、Ｏ（ｎ3）の前処理時間、Ｏ（１）の実行時間で計算可能であることを以下に示す。
【００８８】
前処理として、ｒｓ，ｒｅ，ｃのすべての組み合わせに対して、式（１）に示した三次元配列Ｄの値が計算される。この前処理の計算方法は、定理２と同様である。三次元配列Ｄは、定理２と同様に１次元配列とみなされる。ただし、定理２では、前処理で計算したＤ［ｒｓ］［ｒｅ］［１］，Ｄ［ｒｓ］［ｒｅ］［２］，・・・，Ｄ［ｒｓ］［ｒｅ］［ｎ］を長さｎの１次元配列とみなしていたが、定理３では配列の順番が入れ替えられる。すなわち、Ｄ［ｒｓ］［ｒｅ］［ｎ］，Ｄ［ｒｓ］［ｒｅ］［ｎ−１］，・・・，Ｄ［ｒｓ］［ｒｅ］［１］が、長さｎの１次元配列とみなされ、定理１における前処理が施される。
【００８９】
そして、クエリが入力されたとき、前処理の計算結果を用いて、２次元配列の総和が最小となる領域を求めるための残りの計算が行われる。クエリとしては、ｒｓ，ｒｅ，ｃｅの値が入力される。入力されたクエリに応じて、領域内の定数値の総和を最小化する左辺は、３次元配列Ｄ［ｒｓ］［ｒｅ］［ｎ−ｃｅ＋１］，Ｄ［ｒｓ］［ｒｅ］［ｎ−ｃｅ］…Ｄ［ｒｓ］［ｒｅ］［ｎ−ｃｓ＋１］の総和が最大となる領域を求めることで解ける。このような総和が最大となる領域の左辺を示すｃｓは、Ｄ［ｒｓ］［ｒｅ］［ｎ］，Ｄ［ｒｓ］［ｒｅ］［ｎ−１］，・・・，Ｄ［ｒｓ］［ｒｅ］［１］からなる１次元配列に対する定理１の前処理の結果を用いて、定理１により計算量Ｏ（１）で計算できる。このようにして求められたｃｓが、内包する定数値の総和が最小となる領域のｃｓである。
【００９０】
次に、ｃｏｌ＿ａｒｅａ（Ｃ）の計算方法（定理４）について説明する。
図１６は、ｃｏｌ＿ａｒｅａ（Ｃ）の計算方法（定理４）を説明する図である。行数ｎ，列数ｎの２次元配列Ａについて（ｒｅ，ｃｓ）−（ｒｅ，ｃｅ）を下辺とし、総和が最小となる領域の上辺（ｒｓ，ｃｓ）−（ｒｓ，ｃｅ）を計算するものとする。この計算が、Ｏ（ｎ3）の前処理時間、Ｏ（１）の実行時間で計算可能であることを以下に示す。
【００９１】
以下の３次元配列Ｄを考える。
Ｄ2［ｃｓ］［ｃｅ］［ｒ］＝−Σcs≦c≦ceＡ［ｒ］［ｃ］  ・・・（４）
三次元配列Ｄ2は、行ｒの列ｃｓから列ｃｅまでの定数値の総和の符号を反転した値を保存した配列である。
【００９２】
定理４では、前処理として、ｃｓ，ｃｅ，ｒのすべての組み合わせに対して、三次元配列Ｄ2の値を計算する。すなわちｃｓ，ｃｅのすべての組み合わせについて、Ｄ2［ｃｓ］［ｃｅ］［ｎ］，Ｄ2［ｃｓ］［ｃｅ］［ｎ−１］…Ｄ2［ｃｓ］［ｃｅ］［１］が計算される。そして、計算したＤ2［ｃｓ］［ｃｅ］［ｎ］，Ｄ2［ｃｓ］［ｃｅ］［ｎ−１］…Ｄ2［ｃｓ］［ｃｅ］［１］を、長さｎの１次元配列とみなし、定理１における前処理が実施される。
【００９３】
以上が、定理４の前処理である。この前処理は、Ｏ（ｎ2）個の１次元配列について、Ｏ（ｎ）の定理１の前処理を実施するものであり、計算量はＯ（ｎ3）である。
そして、クエリが入力されたとき、前処理の計算結果を用いて、２次元配列の総和が最小となる領域を求めるための、残りの計算が行われる。クエリとしては、ｃｓ，ｃｅ，ｒｅの値が入力される。入力されたクエリに応じて、３次元配列Ｄ2［ｃｓ］［ｃｅ］［ｎ−ｒｅ＋１］，Ｄ2［ｃｓ］［ｃｅ］［ｎ−ｒｅ］…Ｄ2［ｃｓ］［ｃｅ］［ｎ−ｒｓ＋１］の総和を最大化するｒｓが、計算量Ｏ（１）で計算できる。詳細は以下の通りである。
【００９４】
３次元配列Ｄ2は、すべての行について列ｃｓからｃｅまでの符号を反転させた値の総和を持っている。そのため、領域の内の定数値の総和を最小化する上辺は、３次元配列Ｄ2［ｃｓ］［ｃｅ］［ｒｓ．．ｒｅ］の総和が最大となる領域を求めることで解ける。総和が最大となる領域のｒｓは、Ｄ2［ｃｓ］［ｃｅ］［ｎ−ｒｅ＋１］，Ｄ2［ｃｓ］［ｃｅ］［ｎ−ｒｅ］…Ｄ2［ｃｓ］［ｃｅ］［ｎ−ｒｓ＋１］からなる１次元配列に対する定理１の前処理の結果を用い、定理１により計算量Ｏ（１）で計算できる。このようにして求められたｒｓが、内包する定数値の総和が最小となる領域のｒｓである。
【００９５】
以上がｃｏｌ＿ａｒｅａ（Ｃ）、ｒｏｗ＿ａｒｅａ（Ｃ）をＯ（ｎ3）の前処理時間、Ｏ（１）のクエリ時間で計算する方法の説明である。
次に、任意の矩形の総和をＯ（ｎ3）で計算する方法について説明する。以後、この計算方法を「定理５」と呼ぶ。
【００９６】
図１７は、任意の矩形の総和を計算する方法（定理５）を説明する図である。行数ｎ，列数ｎの２次元配列Ａについて矩形（ｒｓ，ｒｅ，ｃｓ，ｃｅ）の総和をＯ（ｎ3）の前処理時間、Ｏ（１）の実行時間で計算する方法について説明する。
【００９７】
まず、前処理として、式（１）に示した３次元配列Ｄの累積和配列Ｅを計算する。累積和配列Ｅは、以下の式で表される。
Ｅ［ｒｓ］［ｒｅ］［ｃ］＝Σ1≦i≦cＤ［ｒｓ］［ｒｅ］［ｉ］  ・・・（５）
累積和配列Ｅは、矩形（ｒｓ，ｒｅ，１，ｃ）内の定数値の総和の符号を逆転した値を示している。ここで、累積和配列Ｅについて、Ｅ［ｒｓ］［ｒｅ］［ｃ］＝Ｄ［ｒｓ］［ｒｅ］［ｃ］＋Ｅ［ｒｓ］［ｒｅ］［ｃ−１］が成り立つ。なお、Ｅ［ｒｓ］［ｒｅ］［０］＝０とする。この性質を利用し、累積和配列Ｅの計算では、Ｏ（ｎ3）の計算量で３次元配列Ｄが計算される。そして、ｒｓ，ｒｅのすべての組み合わせについて、ｃ＝１からｎまで順にＥ［ｒｓ］［ｒｅ］［ｃ］が計算される。この計算の計算量はＯ（ｎ3）である。従って、前処理は、Ｏ（ｎ3）の計算量で計算できる。
【００９８】
このようにして計算された累積和配列Ｅを用いて、矩形（ｒｓ，ｒｅ，ｃｓ，ｃｅ）内の定数値の総和を、以下の式で計算することができる。
Σrs≦r≦re,cs≦c≦ceＡ［ｒ］［ｃ］
＝−Σcs≦c≦ceＤ［ｒｓ］［ｒｅ］［ｃ］
＝−（Ｅ［ｒｓ］［ｒｅ］［ｃｅ］−Ｅ［ｒｓ］［ｒｅ］［ｃｓ−１］）  ・・・（６）
この計算は、矩形（ｒｓ，ｒｅ，ｃｓ，ｃｅ）の総和が、（ｒｓ，ｒｅ，１，ｃｅ）の総和から（ｒｓ，ｒｅ，１，ｃｓ−１）を減算した値と一致することを利用している。前処理で累積和配列Ｅが求められているため、式（６）を用いれば、任意の矩形が与えられたときの矩形内の定数値の総和は、Ｏ（１）の計算量で計算できる。
【００９９】
演算部１２０は、以上の定理１〜５を用いて、数値表における行ヘッダ領域、列ヘッダ領域、および数値管理領域それぞれの領域を示す矩形を、効率的に求めることができる。以下、高速に各領域を特定するための、演算部１２０の機能について詳細に説明する。
【０１００】
図１８は、演算部の機能の詳細を示すブロック図である。演算部１２０は、情報取得部１２１、領域判定部１２２、および出力部１２３を有する。
情報取得部１２１は、数値表の領域判定に用いる情報を取得する。例えば情報取得部１２１は、数値表取得部１２１ａと置換パラメータ入力受け付け部１２１ｂとを有する。数値表取得部１２１ａは、記憶部１１０から数値表１１１，１１２，・・・を取得する。置換パラメータ入力受け付け部１２１ｂは、数値表１１１，１１２，・・・内の各セルの内容の置換に用いるパラメータの入力を受け付ける。例えば置換パラメータ入力受け付け部１２１ｂは、文字列が設定されたセルの置換先の値、数値が設定セルの置換先の値、および空値が設定されたセルの置換先の値の入力を受け付ける。
【０１０１】
領域判定部１２２は、数値表内の行ヘッダ領域、列ヘッダ領域、および数値管理領域を判定する。例えば領域判定部１２２は、数値表置換部１２２ａ、前処理部１２２ｂ、領域候補生成部１２２ｃ、および最適解探索部１２２ｄを有する。
【０１０２】
数値表置換部１２２ａは、数値表１１１，１１２，・・・内の各セルに設定されている情報を、置換パラメータで指定された値に置換する。
前処理部１２２ｂは、定理３，４，５をＯ（１）の処理量で計算するための前処理を行う。
【０１０３】
領域候補生成部１２２ｃは、数値表１１１，１１２，・・・内の数値管理領域の候補となるすべて領域（数値管理領域候補）を生成する。また領域候補生成部１２２ｃは、数値管理領域候補に対応する行ヘッダ領域と列ヘッダ領域との候補となる領域を、定理３，４に基づいて生成する。
【０１０４】
最適解探索部１２２ｄは、生成された数値管理領域候補すべてについてスコアを計算し、最もスコアの高い数値管理領域候補を、対象の数値表の数値管理領域と決定する。最適解探索部１２２ｄは、決定された数値管理領域に応じて、行ヘッダ領域と列ヘッダ領域とを決定する。そして、最適解探索部１１２ｄは、決定した領域を、最適解とする。
【０１０５】
出力部１２３は、領域の判定結果を出力する。例えば出力部１２３は、最適解出力部１２３ａと最適解画面出力部１２３ｂとを有する。最適解出力部１２３ａは、最適解として決定された行ヘッダ領域、列ヘッダ領域、および数値管理領域それぞれを示す情報を出力する。最適解画面出力部１２３ｂは、図１０に示したように、数値表に重ねて、最適解として決定された各領域を示す矩形をモニタ２１に表示する。
【０１０６】
なお、図１８に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。また、図１８に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
【０１０７】
次に、領域判定処理の手順について詳細に説明する。
図１９は、数値表置換処理の手順の一例を示すブロック図である。以下、図１９に示す処理をステップ番号に沿って説明する。なお、数値表置換処理の入力情報は、table（数値表）、c＿str（文字列置換値）、c＿num（数値置換値）、およびc＿empty（空値置換値）である。例えば、c＿str＝−２、c＿num＝２、c＿empty＝０である。
【０１０８】
［ステップＳ１０１］数値表置換部１２２ａは、行番号を示す変数ｉの取り得る範囲を、１からtableの行数までの整数とし、列番号を示す変数ｊの取り得る範囲を１からtableの列数までの整数とする。そして数値表置換部１２２ａは、ｉとｊとのすべての値の組み合わせそれぞれに対して、ステップＳ１０２〜Ｓ１０６の処理を実行する。
【０１０９】
［ステップＳ１０２］数値表置換部１２２ａは、数値表のｉ行ｊ列のセルの値（table[i][j]）が空値か否かを判断する。空値であれば、処理がステップＳ１０３に進められる。空値でなければ、処理がステップＳ１０４に進められる。
【０１１０】
［ステップＳ１０３］数値表置換部１２２ａは、数値表のｉ行ｊ列のセル（table[i][j]）に、c＿emptyの値を設定する。その後、処理がステップＳ１０７に進められる。
［ステップＳ１０４］数値表置換部１２２ａは、数値表のｉ行ｊ列のセルの値（table[i][j]）が数値か否かを判断する。数値であれば、処理がステップＳ１０６に進められる。数値でなければ、処理がステップＳ１０５に進められる。
【０１１１】
［ステップＳ１０５］数値表置換部１２２ａは、数値表のｉ行ｊ列のセル（table[i][j]）に、c＿strの値を設定する。その後、処理がステップＳ１０７に進められる。
［ステップＳ１０６］数値表置換部１２２ａは、数値表のｉ行ｊ列のセル（table[i][j]）に、c＿numの値を設定する。その後、処理がステップＳ１０７に進められる。
【０１１２】
［ステップＳ１０７］数値表置換部１２２ａは、ｉとｊとのすべての値の組み合わせそれぞれに対して、ステップＳ１０２〜Ｓ１０６の処理の実行が完了したら、数値表置換処理を終了する。
【０１１３】
この数値表置換処理により、図５に示した数値表１１２の各セルの値が、図６に示す数値表１１２ａのように変更される。その後、前処理部１２２ｂが、定理３，４，５の前処理を実施し、前処理の結果をメモリに格納する。そして、領域候補生成部１２２ｃにより、候補領域生成処理が行われる。
【０１１４】
図２０は、候補領域生成処理の手順の一例を示すフローチャートである。以下、図２０に示す処理をステップ番号に沿って説明する。なお、数値表置換処理の入力情報は、変換後のtable（数値表）である。
【０１１５】
［ステップＳ１２１］領域候補生成部１２２ｃは、変数row＿center＿beginの取り得る範囲を、１からtableの行数までの整数とし、変数row＿center＿endの取り得る範囲をrow＿center＿beginからtableの行数までの整数とする。そして数値表置換部１２２ａは、row＿center＿beginとrow＿center＿endとのすべての値の組み合わせそれぞれに対して、ステップＳ１２２〜Ｓ１２６の処理を実行する。
【０１１６】
［ステップＳ１２２］領域候補生成部１２２ｃは、変数col＿center＿beginの取り得る範囲を、１からtableの列数までの整数とし、変数col＿center＿endの取り得る範囲をcol＿center＿beginからtableの列数までの整数とする。そして数値表置換部１２２ａは、col＿center＿beginとcol＿center＿endとのすべての値の組み合わせそれぞれに対して、ステップＳ１２３〜Ｓ１２５の処理を実行する。
【０１１７】
［ステップＳ１２３］領域候補生成部１２２ｃは、数値管理領域候補num＿areaに、(row＿center＿begin,row＿center＿end-1,col＿center＿begin,col＿center＿end-1)を設定する。
【０１１８】
［ステップＳ１２４］領域候補生成部１２２ｃは、ステップＳ１２３で設定した数値管理領域候補num＿areaを用いて、図１５に示した定理３の計算row＿area(num＿area)を行う。そして領域候補生成部１２２ｃは、計算結果を、行ヘッダ領域候補row＿areaに設定する。計算で得られる行ヘッダ領域候補row＿areaは、数値管理領域候補num＿areaの左辺を右辺として持ち、内包するセルの値の総和が最小となる矩形領域である。
【０１１９】
また、領域候補生成部１２２ｃは、ステップＳ１２３で設定した数値管理領域候補num＿areaを用いて、図１６に示した定理４の計算col＿area(num＿area)を行う。そして領域候補生成部１２２ｃは、計算結果を、列ヘッダ領域候補col＿areaに設定する。計算で得られる列ヘッダ領域候補col＿areaは、数値管理領域候補num＿areaの上辺を下辺として持ち、内包するセルの値の総和が最小となる矩形領域である。
【０１２０】
［ステップＳ１２５］領域候補生成部１２２ｃは、ステップＳ１２３〜Ｓ１２４で得られた数値管理領域候補num＿area、行ヘッダ領域候補row＿area、および列ヘッダ領域候補col＿areaの組を、候補領域セットとして出力する。
【０１２１】
［ステップＳ１２６］領域候補生成部１２２ｃは、col＿center＿beginとcol＿center＿endとのすべての値の組み合わせそれぞれに対して、ステップＳ１２３〜Ｓ１２５の処理が完了したら、処理をステップＳ１２７に進める。
【０１２２】
［ステップＳ１２７］領域候補生成部１２２ｃは、row＿center＿beginとrow＿center＿endとのすべての値の組み合わせそれぞれに対して、ステップＳ１２２〜Ｓ１２６の処理が完了したら、候補領域生成処理を終了する。
【０１２３】
このようにして、生成可能な数値管理領域候補の数分の領域候補セットが生成される。例えば、数値表tableに対応する候補領域セットの集合は、関数allarea(table)で呼び出せるものとする。その後、最適解探索部１１２ｄにより、最適解探索処理が実行される。
【０１２４】
図２１は、最適解探索処理の手順の一例を示すフローチャートである。以下、図２１に示す処理をステップ番号に沿って説明する。なお最適解探索処理の入力情報は、変換後のtable（数値表）である。
【０１２５】
［ステップＳ１３１］最適解探索部１１２ｄは、変数max＿scoreに「０」を設定する。また最適解探索部１１２ｄは、変数max＿argsに、空値を示すemptyを設定する。
［ステップＳ１３２］最適解探索部１１２ｄは、数値表tableに対応する候補領域セットそれぞれに対して、ステップＳ１３３〜Ｓ１３４の処理を実行する。処理対象の候補領域セットのうち、row＿areaを行ヘッダ領域を示す矩形Ａに設定し、col＿areaを列ヘッダ領域を示す矩形Ｂに設定し、num＿areaを数値管理領域を示す矩形Ｃに設定する。
【０１２６】
［ステップＳ１３３］最適解探索部１１２ｄは、候補領域セットで示される矩形のスコア（sum(C)−sum(A)−sum(B)）を計算し、スコアがmax＿scoreより大きいか否かを判断する。なお、各矩形内の定数値の総和は、定理５の前処理を実施しておくことで、それぞれＯ（１）の処理量で計算できる。スコアがmax＿scoreより大きい場合、処理がステップＳ１３４に進められる。スコアがmax＿score以下の場合、処理がステップＳ１３５に進められる。
【０１２７】
［ステップＳ１３４］最適解探索部１１２ｄは、算出したスコアをmax＿scoreに設定する。また最適解探索部１１２ｄは、max＿argsに、現在処理対象となっている候補領域セットに示される矩形を設定する。
【０１２８】
［ステップＳ１３５］最適解探索部１１２ｄは、すべての候補領域セットに対してステップＳ１３３〜Ｓ１３４の処理が完了した場合、処理をステップＳ１３６に進める。
［ステップＳ１３６］最適解探索部１１２ｄは、探索結果としてmax＿argsを出力する。
【０１２９】
このようにして、スコアが最大となるような、行ヘッダ領域、列ヘッダ領域、および数値管理領域が得られる。
以上説明した第２の実施の形態では、ヘッダ領域にフォントやインデントなどの特徴がないような様々なタイプの数値表であっても、ヘッダ領域や数値管理領域を適切に判定することが可能となる。すなわち、数値管理領域には数値がより多く含まれ、ヘッダ領域内には文字列がより多く含まれるような、両者のバランスが取れた矩形が、各領域として出力される。その結果、ヘッダ領域に数値が、数値管理領域に文字列が含まれる場合であっても、適切な領域判定となる。
【０１３０】
また、定理１〜５を有効に利用してスコアの計算を高速に実施するようにしたため、数値表からのヘッダ領域や数値管理領域の抽出を、短時間で実施することができる。例えば、ｎ行ｎ列の数値表からのヘッダ領域と数値管理領域との抽出処理が、定理１〜５を利用しなければＯ（ｎ8）の計算量となるところ、定理１〜５を利用することで、Ｏ（ｎ4）の計算量で済んでいる。
【０１３１】
［その他の実施の形態］
数値と文字列との置換の際の定数値は、ユーザが任意に設定可能である。例えば、数値と文字列とを、互いに絶対値の異なる定数値に置換してもよい。例えば数値を「３」の定数値に置換し、文字列を「−１」の定数値に置換するようにしてもよい。
【０１３２】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０１３３】
１  表
２  数値管理領域
３  行ヘッダ領域
４  列ヘッダ領域
１０  領域抽出装置
１１  記憶部
１２  演算部
【図１】
0006674094.tif 000002
【図２】
0006674094.tif 000003
【図３】
0006674094.tif 000004
【図４】
0006674094.tif 000005
【図５】
0006674094.tif 000006
【図６】
0006674094.tif 000007
【図７】
0006674094.tif 000008
【図８】
0006674094.tif 000009
【図９】
0006674094.tif 000010
【図１０】
0006674094.tif 000011
【図１１】
0006674094.tif 000012
【図１２】
0006674094.tif 000013
【図１３】
0006674094.tif 000014
【図１４】
0006674094.tif 000015
【図１５】
0006674094.tif 000016
【図１６】
0006674094.tif 000017
【図１７】
0006674094.tif 000018
【図１８】
0006674094.tif 000019
【図１９】
0006674094.tif 000020
【図２０】
0006674094.tif 000021
【図２１】
0006674094.tif 000022