(57)【要約】【課題】画面上のオブジェクトの配置関係を利用して画面および操作対象のオブジェクトを検索・指定できるようにする。【解決手段】オブジェクト検索装置１は、２次元正規表現により記述されたオブジェクトのクエリから、オブジェクトの配置パターンおよび変数名定義を抽出するクエリ解析部１１０と、画面上に表示されるオブジェクト間の相対位置を示す画面認識情報を生成する画面認識部１００と、画面認識情報の示すオブジェクト間の相対位置が、検索クエリから抽出されたオブジェクトの配置パターンとマッチするか否か判断するパターンマッチング部１２０と、配置パターンにマッチすると判断された画面上のオブジェクト群のうち、検索クエリの変数名に対応するオブジェクトを出力する変数変換部１３０とを備える。【選択図】図３
2018077763.tif 000002
【特許請求の範囲】
【請求項１】
画面上に表示されるオブジェクト群から、操作対象のオブジェクトを検索するオブジェクト検索装置であって、
２次元正規表現により記述された、前記操作対象のオブジェクトの検索クエリを取得し、前記検索クエリから、前記オブジェクトの配置パターンおよび変数名定義に関する情報を抽出するクエリ解析部と、
前記画面上に表示される各オブジェクトの絶対座標情報に基づき、前記画面上に表示されるオブジェクト間の相対位置を示す画面認識情報を生成する画面認識部と、
前記画面認識情報の示す前記オブジェクト間の相対位置を参照して、前記画面認識情報の示す画面が、前記検索クエリから抽出されたオブジェクトの配置パターンとマッチする画面か否か判断するパターンマッチング部と、
前記パターンマッチング部により配置パターンがマッチすると判断された画面上のオブジェクト群から、前記検索クエリの変数名定義に対応するオブジェクトを出力する出力部と
を備えることを特徴とするオブジェクト検索装置。
【請求項２】
前記クエリ解析部は、
２次元正規表現により記述された前記検索クエリにおける配置パターンを、横方向の１次元の正規表現の配置パターンおよび縦方向の１次元の正規表現の配置パターンの組み合わせに分解して抽出することを特徴とする請求項１に記載のオブジェクト検索装置。
【請求項３】
前記クエリ解析部は、さらに、
前記横方向の１次元の正規表現の配置パターンおよび前記縦方向の１次元の正規表現の配置パターンそれぞれを有限オートマトンに変換した上で抽出することを特徴とする請求項２に記載のオブジェクト検索装置。
【請求項４】
前記クエリ解析部は、さらに、
前記横方向の１次元の正規表現の配置パターンおよび前記縦方向の１次元の正規表現の配置パターンのいずれかに不定数のオブジェクトが繰り返し配置される旨の情報が含まれる場合、前記横方向の１次元の正規表現の配置パターンおよび前記縦方向の１次元の正規表現の配置パターンそれぞれを前記不定数のオブジェクトが繰り返し配置される旨の情報を含む有限オートマトンに変換した上で抽出することを特徴とする請求項３に記載のオブジェクト検索装置。
【請求項５】
画面上に表示されるオブジェクト群から、操作対象のオブジェクトを検索するオブジェクト検索装置が、
２次元正規表現により記述された、前記操作対象のオブジェクトの検索クエリを取得し、前記検索クエリから、前記オブジェクトの配置パターンおよび変数名定義に関する情報を抽出するクエリ解析ステップと、
前記画面上に表示される各オブジェクトの絶対座標情報に基づき、前記画面上に表示されるオブジェクト間の相対位置を示す画面認識情報を生成する画面認識ステップと、
前記画面認識情報の示す前記オブジェクト間の相対位置を参照して、前記画面認識情報の示す画面が、前記検索クエリから抽出されたオブジェクトの配置パターンとマッチする画面か否か判断するパターンマッチングステップと、
前記パターンマッチングステップにより配置パターンがマッチすると判断された画面上のオブジェクト群から、前記検索クエリの変数名定義に対応するオブジェクトを出力する出力ステップと
を含んだことを特徴とするオブジェクト検索方法。
【請求項６】
画面上に表示されるオブジェクト群から、操作対象のオブジェクトを検索するためのオブジェクト検索プログラムであって、
２次元正規表現により記述された、前記操作対象のオブジェクトの検索クエリを取得し、前記検索クエリから、前記オブジェクトの配置パターンおよび変数名定義に関する情報を抽出するクエリ解析ステップと、
前記画面上に表示される各オブジェクトの絶対座標情報に基づき、前記画面上に表示されるオブジェクト間の相対位置を示す画面認識情報を生成する画面認識ステップと、
前記画面認識情報の示す前記オブジェクト間の相対位置を参照して、前記画面認識情報の示す画面が、前記検索クエリから抽出されたオブジェクトの配置パターンとマッチする画面か否か判断するパターンマッチングステップと、
前記パターンマッチングステップにより配置パターンがマッチすると判断された画面上のオブジェクト群から、前記検索クエリの変数名定義に対応するオブジェクトを出力する出力ステップと
をコンピュータに実行させることを特徴とするオブジェクト検索プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オブジェクト検索装置、オブジェクト検索方法、および、オブジェクト検索プログラムに関する。
【背景技術】
【０００２】
オペレータは業務アプリケーション画面（画面）を操作することで、必要な業務情報を入力・登録したり、参照したりすることができる。多くの場合、オペレータは画面を介して業務を遂行するため、オペレータが操作する画面および動作を取得することで、オペレータの操作状況を機械的に推測することができる。画面の動作は、画面に関する情報とオペレータによる操作に関する情報の双方を認識することで獲得できる。画面に関する情報は、例えば、画面を総括する情報（ウィンドウタイトル、ウィンドウID、タイトルバーなど）、画面内のGUI部品に関する情報（各GUI部品のクラス、ID、テキスト名など）、これらの情報を取得した日時などがある。オペレータの操作に関する情報は、例えば、マウス操作やキーボード操作、およびこれらの操作対象である画面またはGUI部品の情報などがある。これらの情報を取得することで、オペレータがいつどのタイミングでどの画面のどのGUI部品にどのような値を入力したかを逐一取得することができる。以後、画面に関する情報を「画面情報」、オペレータの操作に関する情報を「操作情報」と呼ぶ。また、GUI部品およびそれに類する画面上の部品を「オブジェクト」と呼ぶ。一方で、画面が操作状況を把握するために適した画面かどうかは、機械的に把握することが困難である。そのため、従来技術は、ユーザ操作時の画面情報を逐一正確に取得・記録する技術が提案されている（特許文献１，２参照）。なお、この従来技術は、オブジェクトの親子関係およびプロパティを逐一取得・記録するが、認識対象とした画面を選定する機能は有さない。
【０００３】
ここで、画面上のオブジェクトの配置関係から画面を定義することができれば、画面の特徴的なオブジェクトを手掛かりに適切な画面および画面上のオブジェクトを正確に選択することができる。例えば、「ユーザが操作対象とする画面群のうち、タブの下側のどこかにボタンが３つ並んだ画面を選択し、３つ並んだボタンの１番左側でかつ名前が「OK」のボタンを指定する」といった操作が可能になる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−９７６１６号公報
【特許文献２】特開２０１５−１５３２１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来技術は、認識対象とした画面を選定する機能は有さないため、例えば、予め定義した画面および画面上のオブジェクトに対して何らかのアクションを逐次に実行させるといった動作はできない。そのため、例えば、表示された画面および画面上のオブジェクトに対する操作をトリガーに別の動作プログラムを実施するような処理はできなかった。そこで、本発明は、アプリケーションにより表示される画面上のオブジェクトの配置関係を利用して画面および操作対象のオブジェクトを検索・指定できるようにすることを課題とする。
【課題を解決するための手段】
【０００６】
前記した課題を解決するため、本発明は、画面上に表示されるオブジェクト群から、操作対象のオブジェクトを検索するオブジェクト検索装置であって、２次元正規表現により記述された、前記操作対象のオブジェクトの検索クエリを取得し、前記検索クエリから、前記オブジェクトの配置パターンおよび変数名定義に関する情報を抽出するクエリ解析部と、前記画面上に表示される各オブジェクトの絶対座標情報に基づき、前記画面上に表示されるオブジェクト間の相対位置を示す画面認識情報を生成する画面認識部と、前記画面認識情報の示す前記オブジェクト間の相対位置を参照して、前記画面認識情報の示す画面が、前記検索クエリから抽出されたオブジェクトの配置パターンとマッチする画面か否か判断するパターンマッチング部と、前記パターンマッチング部により配置パターンがマッチすると判断された画面上のオブジェクト群から、前記検索クエリの変数名定義に対応するオブジェクトを出力する出力部とを備えることを特徴とする。
【発明の効果】
【０００７】
本発明によれば、画面上のオブジェクトの配置関係を利用して画面および操作対象のオブジェクトを検索・指定できる。
【図面の簡単な説明】
【０００８】
【図１】図１は、オブジェクト検索装置の概要を説明するための図である。
【図２】図２は、オブジェクト検索装置の概要を説明するための図である。
【図３】図３は、オブジェクト検索装置の機能ブロック図である。
【図４】図４は、図３の記号表に格納されるパターンの定義の例を示す図である。
【図５】図５は、クエリの一例および当該クエリの意味を説明する図である。
【図６】図６は、画面認識情報のイメージを示す図である。
【図７】図７は、配置パターンの２次元正規表現を有限オートマトンへ変換する一例を示す図である。
【図８】図８は、図３のパターンマッチング部における画面の配置パターンのマッチングのイメージ図である。
【図９】図９は、図３のパターンマッチング部における画面の配置パターンのマッチングのイメージ図である。
【図１０Ａ】図１０Ａは、オブジェクト検索装置の処理手順の概要を示すフローチャートである。
【図１０Ｂ】図１０Ｂは、図１０Ａのクエリ解析処理を詳細に説明するフローチャートである。
【図１１】図１１は、図１０Ｂの配置パターン生成処理を詳細に説明するフローチャートである。
【図１２】図１２は、図１０Ａのパターンマッチング処理を詳細に説明するフローチャートである。
【図１３】図１３は、図１０Ａの変数変換処理を詳細に説明するフローチャートである。
【図１４】図１４は、画面認識装置の概要を説明するための図である。
【図１５】図１５は、画面上のオブジェクトの検索処理の例を示す図である。
【図１６】図１６は、画面認識装置の機能ブロック図である。
【図１７】図１７は、オブジェクト情報取得部の処理を説明するための図である。
【図１８】図１８は、相対位置情報取得部の処理を説明するための図である。
【図１９】図１９は、最近傍のオブジェクトを説明するための図である。
【図２０】図２０は、グリッド行の一例を示す図である。
【図２１】図２１は、グリッド行の一例を示す図である。
【図２２】図２２は、グリッド行の配置手順の一例を示す図である。
【図２３】図２３は、グリッド行の配置手順の一例を示す図である。
【図２４】図２４は、グリッド行の配置手順の一例を示す図である。
【図２５Ａ】図２５Ａは、画面認識装置の処理手順を示すフローチャートである。
【図２５Ｂ】図２５Ｂは、図２５Ａのオブジェクト情報取得処理の詳細を示すフローチャートである。
【図２６】図２６は、図２５Ａの相対位置情報取得処理の詳細を示すフローチャートである。
【図２７】図２７は、図２６の左右相対関係取得処理の詳細を示すフローチャートである。
【図２８】図２８は、図２６の上下相対関係取得処理の詳細を示すフローチャートである。
【図２９】図２９は、図２６の最近傍オブジェクト取得処理の詳細を示すフローチャートである。
【図３０】図３０は、図２９の横方向最近傍オブジェクト取得処理の詳細を示すフローチャートである。
【図３１】図３１は、図２９の縦方向最近傍オブジェクト取得処理の詳細を示すフローチャートである。
【図３２】図３２は、図２５Ａのグリッド行生成処理の詳細を示すフローチャートである。
【図３３】図３３は、図２５Ａのグリッド配置処理の詳細を示すフローチャートである。
【図３４】図３４は、図３３の列を挿入する処理の詳細を示すフローチャートである。
【図３５】図３５は、画面認識装置により認識された画面認識情報の適用例を説明するための図である。
【図３６】図３６は、画面認識装置により認識された画面認識情報の適用例を説明するための図である。
【図３７】図３７は、オブジェクト検索プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【０００９】
以下、図面を参照しながら、本発明を実施するための形態（実施形態）について説明する。本発明は、本実施形態に限定されない。
【００１０】
まず、図１を用いて、本実施形態のオブジェクト検索装置１の概要を説明する。オブジェクト検索装置１は、画面上に表示されるオブジェクト群から、操作対象のオブジェクトを検索する際、まずウィンドウ（画面）のマッチングを行い、マッチしたウィンドウ上から検索クエリに示される条件に合うオブジェクトを検索する。
【００１１】
例えば、オブジェクト検索装置１は、アプリケーションにより表示される画面上のウィンドウについて、検索クエリに示される配置パターンにマッチするウィンドウを探す（ウィンドウのマッチング）。次に、オブジェクト検索装置１は、ある配置パターンにマッチしたウィンドウ画面上から、検索クエリに示された条件に合うオブジェクトを検索する（ウィンドウ上のオブジェクト検索）。
【００１２】
例えば、オブジェクト検索装置１が、アプリケーションにより表示される画面上のウィンドウ（図１の左に示すウィンドウ群）から、検索クエリに示される配置パターンを持つウィンドウ、すなわち、タブの下側のどこかに「フィードとWebスライス」というラベルがあり、その直下にイメージとボタンが配置されているウィンドウ、かつ、タブの下側のどこかにボタンが３つ並んだウィンドウを検索する。そして、オブジェクト検索装置１は、検索したウィンドウのオブジェクトから、検索クエリに示される条件に合うオブジェクト、すなわち、イメージの相対的右にあり名前が「設定」のボタン、および、３つ並んだボタンの１番左側でかつ名前が「OK」のボタンを検索する。そして、オブジェクト検索装置１は、検索クエリに対する検索結果として、図１に示すウィンドウ１０１のオブジェクトから太線で示した２つのオブジェクトを返す。
【００１３】
具体例を挙げると、上記の検索クエリ（クエリ）は、図２に示すように２次元正規表現により記述されたオブジェクトの変数名定義および配置パターンを含む。そして、オブジェクト検索装置１は、上記のクエリに基づき、クエリに示される配置パターンを持つウィンドウ１０１を見つけると、このウィンドウ１０１上からクエリで指定された変数名定義に対応するオブジェクト（図２のウィンドウ１０１上にある太線で囲まれたオブジェクト）を検索する。そして、オブジェクト検索装置１は、上記のクエリに対する検索結果として、クエリで指定されたbutton_setは太線で囲まれたウィンドウ上の２３番目のオブジェクト（“設定”ボタン）であり、button_okは太線で囲まれたウィンドウ上の２４番目のオブジェクト（“ＯＫ”ボタン）であるという結果を出力する。
【００１４】
このようにオブジェクト検索装置１は、ウィンドウ上に配置された複数オブジェクトの相対関係を指定することで、該当するオブジェクトを検索することができる。すなわち、オブジェクト検索装置１は、検索クエリにおいて、何のオブジェクトが何個あるか等、具体的な配置パターンを指定しなくても、該当するウィンドウ上からオブジェクトを検索することができる。つまり、オブジェクト検索装置１は、何かしらのクラス（属性）の不定数のオブジェクトが繰り返し配置される旨の配置パターンが指定された検索クエリについても、この検索クエリに基づいたオブジェクトの検索を行うことができる。
【００１５】
次に、オブジェクト検索装置１が扱う検索クエリについて説明する。この検索クエリ（クエリ）は、前記したとおり、２次元正規表現によるオブジェクトの配置パターンおよび変数名定義を含む。なお、図２に示したクエリの意味は、図５に示すとおり、
【００１６】
・インターネットのプロパティのウィンドウの画面
・タブの下側のどこかに「フィードとWebスライス」というオブジェクトがあり、その直下にイメージとボタンオブジェクト（（１））が配置されている画面
・タブの下側のどこかにボタンが３つ並んだオブジェクトが配置されている画面
から、（１）かつ「設定」のボタンと３つ並んだボタンの一番左側でかつ名前が「OK」のボタンオブジェクトを検索する
【００１７】
という意味である。
【００１８】
このオブジェクト検索装置１は、上記のように画面上のオブジェクトの配置パターンとしてオブジェクト間の相対関係を指定した検索クエリにより、検索対象となるオブジェクトを検索することができる。ここで、オブジェクト間の相対関係は、例えば、正規表現におけるオブジェクトの繰り返しや、行頭、行末等のアンカーにより記述されたものも用いることができる。
【００１９】
そして、オブジェクト検索装置１は、画面情報に示されるオブジェクトから、検索クエリで指定された配置パターンに合致するオブジェクトの情報を出力し、例えば、図５に示すインターネットのプロパティのウィンドウ上の“設定”ボタンのオブジェクト（符号４０１）の情報と、“ＯＫ”ボタンのオブジェクト（符号４０２）の情報とを出力する。
【００２０】
次に、図３を用いて、オブジェクト検索装置１の構成を説明する。オブジェクト検索装置１は、画面認識部（画面認識装置）１００と、クエリ解析部１１０と、パターンマッチング部１２０と、変数変換部（出力部）１３０とを備える。また、オブジェクト検索装置１は、記憶部（図示省略）に、記号表１４１と、変数名リスト保持部１４２と、配置パターン保持部１４３と、画面認識情報保持部１４４と、マッチング結果保持部１４５と、オブジェクト変数保持部１４６とを備える。
【００２１】
記号表１４１は、例えば、検索クエリに記述されるオブジェクトのクラスやパターンの定義に関する情報を示した情報である。この記号表１４１に含まれるオブジェクトのパターンの定義は、例えば、図４に示す情報である。この記号表１４１は、クエリ解析部１１０が、検索クエリにおいて２次元正規表現で記述されるオブジェクトの変数名定義、配置パターンを解釈する際に参照される。
【００２２】
変数名リスト保持部１４２は、クエリ解析部１１０により出力された各オブジェクトの変数名定義に関する情報（例えば、変数名リスト）を記憶する。配置パターン保持部１４３は、クエリ解析部１１０により出力された各オブジェクトの配置パターンに関する情報（例えば、後記する図７に示す有限オートマトン）を記憶する。
【００２３】
画面認識情報保持部１４４は、画面認識部１００により出力された画面認識情報（例えば、後記する図６に示すグリッド行列）を記憶する。
【００２４】
マッチング結果保持部１４５は、パターンマッチング部１２０により出力された、画面認識情報とオブジェクトの配置パターンとのマッチング結果を記憶する。オブジェクト変数保持部１４６は、変数変換部１３０により出力された配置パターンにマッチするオブジェクト群に変数名を対応付けた情報（マッチしたオブジェクトの情報）を記憶する。
【００２５】
画面認識部１００は、画面情報（画面上の各オブジェクトの絶対位置座標等を示した情報）を取得すると、この画面上の各オブジェクトの相対的な位置（相対関係）を認識し、その認識結果を示す画面認識情報（グリッド行列）を生成する（図６参照）。そして、生成した画面認識情報を画面認識情報保持部１４４に記憶する。この画面認識情報は、例えば、図６に示すように、画面上の各オブジェクトの相対関係を最小のグリッド行列に配置した情報である。
【００２６】
例えば、画面認識部１００は、図６の左に示す画面の画面情報を取得すると、この画面上のオブジェクト１〜２６の相対位置を認識し、画面認識情報として、図６の右に示すようにオブジェクトを１１×８のグリッド行列に配置した情報を生成し、出力する。なお、図６に示す画面認識情報（グリッド行列）には各オブジェクトのクラス（属性）に関する情報が付されているが、クラス以外の情報（オブジェクトに含まれるテキスト情報等）が付されていてもよい。この画面認識部１００の詳細は後記する。
【００２７】
図３に戻り、クエリ解析部１１０を説明する。クエリ解析部１１０は、２次元正規表現により記述された検索クエリを解析し、オブジェクトの配置パターンと変数名定義に関する情報を抽出すると、配置パターンと変数名定義に関する情報を機械的に処理できる形式に変換する。そして、クエリ解析部１１０は、変換した配置パターンを配置パターン保持部１４３に記憶し、変換した変数名定義に関する情報（変数名リスト）を変数名リスト保持部１４２に記憶する。
【００２８】
例えば、クエリ解析部１１０は、記号表１４１に示されるオブジェクトのクラスやパターンの定義に関する情報を参照して、２次元正規表現により記述された配置パターンを、横方向の１次元の正規表現の配置パターンおよび縦方向の１次元の正規表現の配置パターンに分解する。そして、クエリ解析部１１０は、分解した横方向の１次元の正規表現の配置パターンおよび縦方向の１次元の正規表現の配置パターンそれぞれを有限オートマトンに変換する。
【００２９】
一例を挙げる。まず、クエリ解析部１１０は、図５に示す２次元正規表現により記述された配置パターンを、例えば、図７に示すパターン１の配置パターンと、パターン２の配置パターンとに分ける。次に、クエリ解析部１１０は、パターン１の配置パターン（符号７０１）の２次元正規表現を、縦方向の１次元の正規表現（符号７０２Ａ）と横方向の１次元の正規表現（符号７０３Ａ）に分解する。そして、クエリ解析部１１０は、分解した縦方向の１次元の正規表現（符号７０２Ａ）を有限オートマトン（符号７０２Ｂ）に変換し、横方向の１次元の正規表現（符号７０３Ａ）を有限オートマトン（符号７０３Ｂ）に変換する。
【００３０】
なお、図７の符号７０２Ｂに示す有限オートマトンは、オブジェクトの配置を縦方向に辿り、クラスが「^」のオブジェクトがあれば０から１の状態に遷移し、クラスが「TAB」のオブジェクトがあれば１から２の状態に遷移し、クラスが「LABEL」のオブジェクトがあれば２から３の状態に遷移し、クラスが「LABEL」以外のオブジェクトがあれば２の状態のままであり、クラスが「IMAGE」のオブジェクトがあれば３から４の状態に遷移し、４の状態で終端することを示す。
【００３１】
また、図７の符号７０３Ｂに示す有限オートマトンは、オブジェクトの配置を横方向に辿り、クラスが「^」のオブジェクトがあれば０から１の状態に遷移し、クラスが「IMAGE」のオブジェクトがあれば１から２の状態に遷移し、クラスが「BUTTON」のオブジェクトがあれば２から３の状態に遷移し、クラスが「BUTTON」以外のオブジェクトがあれば２の状態のままであり、クラスが「$」のオブジェクトがあれば３から４の状態に遷移し、４の状態で終端することを示す。
【００３２】
また、クエリ解析部１１０は、図７のパターン２についても、パターン１と同様に、配置パターン（符号７０４）の２次元正規表現を、縦方向の１次元の正規表現（符号７０５Ａ）と横方向の１次元の正規表現（符号７０６Ａ）に分解する。そして、クエリ解析部１１０は、分解した縦方向の１次元の正規表現（符号７０５Ａ）を有限オートマトン（符号７０５Ｂ）に変換し、横方向の１次元の正規表現（符号７０６Ａ）を有限オートマトン（符号７０６Ｂ）に変換する。
【００３３】
なお、図７に示す有限オートマトンに付されたΣは、クラスの集合であり、例えば、{LABEL,BUTTON,RADIOBUTTON,TEXTFIELD,TEXTAREA,COMBOBOX,CHECKBOX,IMAGE,LINK,TAB,LISTBOX,TREEVIEW,GRIDVIEW,SPACE}である。これらのクラスの集合は、記号表１４１で定義してもよいが、SPACEは必ず含むものとする。
【００３４】
また、クエリ解析部１１０において、配置パターンの２次元正規表現を、縦方向の１次元の正規表現と横方向の１次元の正規表現に分解する際、縦方向の１次元の正規表現と横方向の１次元の正規表現との組み合わせが多数考え得る場合もある。そこで、クエリ解析部１１０は、まず、縦・横いずれかの方向の１次元の配置パターンのうち最長のものを選択し、その選択した１次元の配置パターンを軸として、他の方向（例えば、選択した１次元の配置パターンの方向が縦方向であれば、横方向）で考え得る全ての１次元の配置パターンを生成し、それぞれの１次元の配置パターンを有限オートマトンに変換する。ただし、クエリ解析部１１０は、有限オートマトンのノードが１つだけのものは、後記するパターンマッチングに用いることができないので除外することとする。
【００３５】
なお、図７に示した例においては、クエリ解析部１１０は、パターン１の配置パターンについて符号７０２Ａに示す縦方向の１次元の正規表現を選択し、この縦方向の１次元の正規表現に対して横方向の１次元の正規表現は、符号７０３Ａに示す横方向の１次元の正規表現のみである場合を例に説明している。また、パターン２の配置パターンについても同様に、クエリ解析部１１０は、符号７０５Ａに示す縦方向の１次元の正規表現を選択し、この縦方向の１次元の正規表現に対して横方向の１次元の正規表現は、符号７０６Ａに示す横方向の１次元の正規表現のみである場合を例に説明している。
【００３６】
また、クエリ解析部１１０は、配置パターンの１次元の正規表現に不定数のオブジェクトが繰り返し配置される旨の記述が含まれる場合、不定数のオブジェクトが繰り返し配置される旨の情報を含む有限オートマトンに変換するものとする。
【００３７】
例えば、図７における縦方向の１次元の正規表現７０２Ａには、不定数のオブジェクトが繰り返し配置される旨の記述（[-]*）が含まれる。従って、クエリ解析部１１０は、この不定数のオブジェクトが繰り返し配置される旨の記述（[-]*）を、有限オートマトン７０２Ｂの符号７０２Ｃに示す記述に変換する。
【００３８】
図３の説明に戻る。パターンマッチング部１２０は、画面認識情報の示すオブジェクト間の相対位置（配置パターン）を参照して、当該画面認識情報の示す画面が、検索クエリから抽出されたオブジェクトの配置パターンとマッチする画面か否か判定する。
【００３９】
この画面の配置パターンのマッチングの具体例を、図８および図９を用いて説明する。なお、画面認識情報には、マッチングのため、行頭（^）、行末（$）を示すダミーオブジェクトが配置されるものとする。
【００４０】
まず、図８を用いて、図７に示したパターン１の配置パターンのマッチングについて説明する。例えば、パターンマッチング部１２０は、図８に示すように、画面認識情報（グリッド行列）上から、パターン１の縦方向の有限オートマトン７０２Ｂの示す領域（図８の破線の領域）と、パターン１の横方向の有限オートマトン７０３Ｂの示す領域（図８の一点鎖線の領域）とを探索する。
【００４１】
そして、パターンマッチング部１２０は、画面認識情報上に、有限オートマトン７０２Ｂの示す領域と、有限オートマトン７０３Ｂの示す領域とで重なるオブジェクトが１つ以上あれば、画面認識情報に示される画面が、パターン１の配置パターンとマッチする画面（ＯＫ）と判断する。
【００４２】
次に、図９を用いて、図７に示したパターン２の配置パターンのマッチングについて説明する。例えば、パターンマッチング部１２０は、図９に示すように、画面認識情報（グリッド行列）上から、パターン２の縦方向の有限オートマトン７０５Ｂの示す領域（図９の破線の領域）と、パターン２の横方向の有限オートマトン７０６Ｂの示す領域（図９の一点鎖線の領域）とを探索する。
【００４３】
そして、パターンマッチング部１２０は、画面認識情報上に、有限オートマトン７０５Ｂの示す領域と、有限オートマトン７０６Ｂの示す領域とで重なるオブジェクトが１つ以上あれば、画面認識情報に示される画面が、パターン２の配置パターンとマッチする画面（ＯＫ）と判断する。
【００４４】
図８および図９に示すように、画面認識情報の示される画面は、パターン１およびパターン２両方の配置パターンにマッチする画面（ＯＫ）である。よって、パターンマッチング部１２０は、当該画面認識情報に示される画面を、検索クエリに示される配置パターン（図５参照）にマッチする画面であると判断する。
【００４５】
図３に戻り、変数変換部１３０を説明する。変数変換部１３０は、パターンマッチング部１２０において検索クエリに示される配置パターンとマッチすると判断された画面上のオブジェクト群から、検索クエリに示される変数名の制約条件を満たすオブジェクト群を出力する。
【００４６】
このようなオブジェクト検索装置１によれば、アプリケーションにより表示される画面上に表示されるオブジェクトのうち、処理対象となるオブジェクトを、オブジェクト間の相対関係で指定して検索することができる。
【００４７】
（処理手順）
次に、図１０Ａを用いてオブジェクト検索装置１の処理手順の概要を説明する。まず、オブジェクト検索装置１のクエリ解析部１１０は、クエリを解析し（Ｓ１０５：クエリ解析）、また、画面認識部１００は、画面情報に基づき画面認識を行い、画面認識情報を生成する（Ｓ１０６：画面認識）。そして、パターンマッチング部１２０は、画面認識情報の示す画面が、検索クエリに示される配置パターンとマッチする画面か否か判定する（Ｓ１０７：パターンマッチング）。その後、変数変換部１３０は、配置パターンにマッチすると判断された画面上のオブジェクト群から、クエリの変数名定義に対応するオブジェクトを出力する（Ｓ１０８：変数変換）。
【００４８】
次に、図１０Ｂを用いて、図１０ＡのＳ１０５のクエリ解析処理を詳細に説明する。まず、クエリ解析部１１０は、クエリを読み込み（Ｓ１０５１）、クエリ（図５参照）のOBJECTと{の間にあるテキストを読み取り、空白で区切る。これを左から変数名リストとして変数名リスト保持部１４２へ出力する（Ｓ１０５２）。
【００４９】
また、クエリ解析部１１０は、クエリの{}の間にあるテキストのうち、[]で囲まれたテキスト（２次元正規表現集合）を読み取る。これをセミコロン（;）で区切り、リストで保持する（Ｓ１０５３）。つまり、クエリ解析部１１０は、クエリにおいて２次元正規表現で記述された配置パターンに関する情報のリストを生成する。さらに、クエリ解析部１１０は、クエリの{}の間にあるテキストのうち、[]で囲まれたテキスト以外のテキストを読み取る。これをセミコロン（;）で区切り、変数名リストとして変数名リスト保持部１４２へ出力する（Ｓ１０５４）。
【００５０】
そして、Ｓ１０５４の後、クエリ解析部１１０は、Ｓ１０５３で生成されたリスト（２次元正規表現で記述された配置パターンに関する情報のリスト）に基づき、配置パターンを生成し、配置パターン保持部１４３へ出力する（Ｓ１０５５：配置パターン生成）。例えば、クエリ解析部１１０は、２次元正規表現で記述された配置パターンに関する情報を、横方向の１次元の正規表現の配置パターンおよび縦方向の１次元の正規表現の配置パターンに分けた上で、それぞれの配置パターンを有限オートマトンに変換し、これを配置パターンとして配置パターン保持部１４３へ出力する。
【００５１】
次に、図１１を用いて、図１０ＢのＳ１０５５の配置パターン生成処理を詳細に説明する。まず、クエリ解析部１１０は、図１０ＢのＳ１０５３で生成された２次元正規表現（２次元正規表現で記述された配置パターンに関する情報）を読み込む（Ｓ１０５６）。
【００５２】
Ｓ１０５６の後、クエリ解析部１１０は、記号表１４１を元に、Ｓ１０５６で読み込んだ２次元正規表現をトークンに分解する。また、クエリ解析部１１０は、テキスト名については変数名リストを元にクラスを定義する（Ｓ１０５７）。
【００５３】
Ｓ１０５７の後、クエリ解析部１１０は、Ｓ１０５６で読み込んだ２次元正規表現の一番初めに記述されたトークンを起点に、トークン間の縦方向、横方向の関係を表現した１次元の正規表現を生成する（Ｓ１０５８）。そして、クエリ解析部１１０は、Ｓ１０５８で生成した縦（または横方向）の１次元正規表現を有限オートマトンに変換したときに、有限オートマトンの遷移が最長のものを採用する（Ｓ１０５９：縦（または横方向）の有限オートマトンの遷移のうち最長のものを採用する）。なお、以下の説明では、クエリ解析部１１０が縦方向の有限オートマトンについて遷移が最長のものを採用した場合を例に説明する。
【００５４】
Ｓ１０５９の後、クエリ解析部１１０は、縦方向、横方向それぞれについて１次元の正規表現を有限オートマトンに変換する（Ｓ１０６０）。具体的には、クエリ解析部１１０は、Ｓ１０５９で採用した、遷移が最長の縦方向の１次元正規表現を有限オートマトンに変換し、これに対する横方向の全ての１次元正規表現を有限オートマトンに変換する。そして、クエリ解析部１１０は、縦方向、横方向それぞれの１次元正規表現を変換した有限オートマトンを合せて、配置パターンとして配置パターン保持部１４３に出力する。
【００５５】
ただし、クエリ解析部１１０は、縦方向または横方向の１次元正規表現のうち、有限オートマトンにおけるノード数が１つのみとなってしまう１次元正規表現については有限オートマトンへの変換対象外とする。
【００５６】
次に、図１２を用いて、図１０ＡのＳ１０７のパターンマッチング処理を詳細に説明する。まず、パターンマッチング部１２０は、配置パターン保持部１４３の配置パターン（縦方向、横方向それぞれの１次元正規表現を変換した有限オートマトン）と、画面認識情報保持部１４４の画面認識情報（グリッド行列）とを読み込む（Ｓ１０２１）。
【００５７】
Ｓ１０２１の後、パターンマッチング部１２０は、グリッド行列の一番目の行と列に“^”のクラスのオブジェクトを配置し、一番最後の行と列に“$”クラスのオブジェクトを配置する（Ｓ１０２２）。
【００５８】
Ｓ１０２２の後、パターンマッチング部１２０は、Ｓ１０２２による処理後のグリッド行列の列方向について、縦方向の１次元正規表現と一致する列とその範囲を探索し（Ｓ１０２３）、また、Ｓ１０２２による処理後のグリッド行列の行方向について、未探索の横方向の１次元正規表現と一致する行とその範囲を探索する（Ｓ１０２４）。そして、パターンマッチング部１２０は、Ｓ１０２３およびＳ１０２４の探索の結果、一致した行・列の範囲が重なるオブジェクトが１つもなければ（Ｓ１０２５でＮｏ）、マッチング結果falseをマッチング結果保持部１４５へ出力する（Ｓ１０２６）。
【００５９】
一方、一致した行・列の範囲が重なるオブジェクトが１つ以上あれば（Ｓ１０２５でＹｅｓ）、パターンマッチング部１２０は、マッチング結果trueをマッチング結果保持部１４５へ出力し（Ｓ１０２７）、Ｓ１０２８へ進む。そして、パターンマッチング部１２０は、Ｓ１０２１で読み込んだ配置パターンのうち未探索のものがあれば（Ｓ１０２８でＮｏ）、Ｓ１０２４へ戻る。一方、パターンマッチング部１２０は、Ｓ１０２１で読み込んだ配置パターンすべてについて探索済みであれば（Ｓ１０２８：全パターンで探索した？でＹｅｓ）、マッチング結果trueと、重なるオブジェクトを起点に上下左右に一致した行列のグリッド集合をマッチング結果保持部１４５へ出力する（Ｓ１０２９）。例えば、パターンマッチング部１２０は、符号１２０１に示すグリッド行列のマッチング結果trueと、符号１２０２に示す列と符号１２０３に示す行とをマッチング結果保持部１４５へ出力する。
【００６０】
次に、図１３を用いて、図１０ＡのＳ１０８の変数変換処理を詳細に説明する。まず、変数変換部１３０は、マッチング結果保持部１４５からマッチング結果を読み込む（Ｓ１０４１）。その後、変数変換部１３０は、マッチング結果がマッチであれば（Ｓ１０４２でＹｅｓ）、マッチした回数、つまり、マッチング結果trueとなり、一致した行・列の範囲の重なるオブジェクトを起点に上下左右に一致した行列のグリッド集合に対し、Ｓ１０４３〜Ｓ１０４６の処理を実行する。なお、マッチング結果がマッチでなければ（Ｓ１０４２でＮｏ）、つまり、マッチング結果がfalseであれば、変数変換部１３０は、Ｓ１０４３〜Ｓ１０４６の処理を行わない。
【００６１】
Ｓ１０４２でＹｅｓだったとき、変数変換部１３０は、縦方向、横方向の１次元正規表現に従ってマッチしたときに合致するオブジェクト群（つまり、マッチング結果trueとなったグリッド行列上の行・列の組み合わせに含まれるオブジェクト群）に、変数名リスト保持部１４２に記憶される変数名リスト上の変数名を割り当てる（Ｓ１０４３）。そして、変数変換部１３０は、変数名リスト保持部１４２における変数名リストを参照して、Ｓ１０４３で割り当てた変数名に対応する制約条件があれば、この変数名に対する制約条件を判定し（Ｓ１０４４）、オブジェクトが当該変数名に対応する制約条件を満たしていれば（Ｓ１０４５でＹｅｓ）、当該変数名とオブジェクトの組み合わせをオブジェクト変数保持部１４６へ出力する（Ｓ１０４６）。一方、オブジェクトが当該変数名に対応する制約条件を満たしていなければ（Ｓ１０４５でＮｏ）、Ｓ１０４６の処理を実行しない。
【００６２】
このようにすることで、変数変換部１３０は、パターンマッチング部１２０において検索クエリに示される配置パターンとマッチすると判断された画面上のオブジェクト群から、検索クエリで指定される変数名の制約条件を満たすオブジェクト群を出力することができる。
【００６３】
次に、図３の画面認識部（画面認識装置）１００を詳細に説明する。
【００６４】
まず、図１４を用いて本実施形態の画面認識装置１００の概要を説明する。画面認識装置１００は、アプリケーションにより表示される画面上のオブジェクトの相対的な位置を認識し、その認識結果を示す情報（画面認識情報）を出力する。画面認識情報は、例えば、図１４に示すように、画面上の各オブジェクトの相対的な位置を最小のグリッド行列に配置した情報である。
【００６５】
例えば、画面認識装置１００は、図１４に示すように、画面情報（画面上の各オブジェクトの絶対位置座標等を示す情報）を取得すると、この画面情報から各オブジェクトの相対的な位置を示す、グリッド行列を生成し、出力する。
【００６６】
なお、以下の説明において、画面上のオブジェクトの相対位置（相対関係）を表現するための格子状の矩形をグリッドと呼び、グリッドを所定の行列数で並べたものをグリッド行列と呼ぶ。また、このグリッド行列上のオブジェクトに、それぞれのオブジェクトの属性（例えば、イメージやボタン、ラベル等）や、オブジェクトに記載されたテキスト情報（例えば、「別のアカウントを使用」等）を併記してもよい。
【００６７】
このように画面認識装置１００が画面上の各オブジェクトの相対位置関係を抽象的に認識することで、例えば、操作支援に必要なオブジェクトを検索しやすくなる。
【００６８】
例えば、図１５に示すように操作支援を行う装置が、操作対象となる画面上のオブジェクトの配置パターンや変数名定義を含む問い合わせ（クエリ）を受信すると、画面上から、クエリに示される配置パターンに合致するオブジェクト（図１５の太線で囲まれたウィンドウ上にあるＧＵＩ部品）を検索することができる。そして、上記の装置は、検索されたオブジェクト（操作対象となるオブジェクト）を出力する。例えば、上記の装置は、操作対象となるbutton_setが太線で囲まれたウィンドウ上の２３番目のオブジェクト（“設定”ボタン）であり、button_okが太線で囲まれたウィンドウ上の２４番目のオブジェクト（“ＯＫ”ボタン）であるという結果を出力する。
【００６９】
次に、図１６を用いて、画面認識装置１００の構成を説明する。画面認識装置１００は、オブジェクト情報取得部１１１と、相対位置情報取得部１１２と、グリッド行生成部１１３と、グリッド配置部１１４とを備える。
【００７０】
また、画面認識装置１００は、記憶部（図示省略）に、オブジェクト情報保持部１２１と、相対位置情報保持部１２２と、グリッド行保持部１２３とを備える。オブジェクト情報保持部１２１は、オブジェクト情報取得部１１１から出力されたオブジェクト情報を記憶する。相対位置情報保持部１２２は、相対位置情報取得部１１２から出力された相対位置情報を記憶する。グリッド行保持部１２３は、グリッド行生成部１１３から出力されたグリッド行を記憶する。
【００７１】
オブジェクト情報取得部１１１は、アプリケーションの表示する画面の画面情報から、画面上に表示される各オブジェクトの相対位置を認識するための情報（オブジェクト情報）を取得する。例えば、オブジェクト情報は、例えば、class（属性）、text（テキスト情報）、area（絶対座標情報）等の情報である。
【００７２】
例えば、オブジェクト情報取得部１１１は、図１７に示す画面情報から、画面上のオブジェクトそれぞれにindex（例えば、１〜４）を付け、当該オブジェクトのclass（属性）、text（テキスト情報）、area（絶対座標情報）を取得し、図１７に示すオブジェクト情報を生成する。そして、オブジェクト情報取得部１１１は生成したオブジェクト情報をオブジェクト情報保持部１２１に出力する。
【００７３】
相対位置情報取得部１１２は、オブジェクト情報に示される各オブジェクトの絶対座標情報から、画面上の任意の２つのオブジェクト間の相対位置を示す相対位置情報を取得する。つまり、相対位置情報取得部１１２は、各オブジェクトの絶対座標情報に基づき、画面上の任意の２つのオブジェクト間の相対位置を示す相対位置情報を生成し、相対位置情報保持部１２２に出力する。
【００７４】
例えば、相対位置情報取得部１１２は、図１８に示すように、オブジェクト情報に示される画面上の任意の２つのオブジェクトについて、一方のオブジェクトが他方のオブジェクトの、相対的に右／左／横方向に同位のオブジェクトか（左右相対関係）、相対的に下／上／縦方向に同位のオブジェクトか（上下相対関係）、縦／横方向に隣り合っている（最近傍の）オブジェクトか（最近傍オブジェクト）を判断する。そして、その判断結果を相対位置情報に記録する。
【００７５】
例えば、相対位置情報取得部１１２は、２つのオブジェクト（obj1とobj2）について、符号５０１に示すように、obj2がobj1の相対的右に位置するか、obj1の相対的左に位置するか、obj1と横方向に同位（つまり、obj1とobj2とでｘ座標の少なくとも一部が重なっている）かを判断する。また、相対位置情報取得部１１２は、符号５０２に示すように、obj2が、obj1の相対的下に位置するか、obj1の相対的上に位置するか、obj1と縦方向に同位（つまり、obj1とobj2とでｙ座標の少なくとも一部が重なっている）かを判断する。さらに、相対位置情報取得部１１２は、符号５０３に示すように、obj2が、obj1に隣り合っている（離れていても良い）か、obj1に隣り合っていないか判断する。なお、obj2が、obj1に隣り合っていない場合とは、obj2とobj1との間に別オブジェクト（obj3）がある場合や、obj2が、obj1の斜め（縦にも横にも同位でない）に位置する場合等が該当する。
【００７６】
例えば、obj2とobj1とが図１９の（１）に示す各位置である場合、相対位置情報取得部１１２は、obj2が、obj1に対し縦／横方向に隣り合っている（最近傍の）オブジェクトと判断する。一方、obj2とobj1とが図１９の（２）に示す各位置である場合、相対位置情報取得部１１２はobj2が、obj1に対し最近傍ではないと判断する。なお、相対位置情報取得部１１２は、図１９に示すように、obj2とobj1とが重なっているような場合については扱わないものとする。
【００７７】
図１６のグリッド行生成部１１３は、オブジェクトの相対位置情報に基づき、画面上の最左上のオブジェクトを起点に左から右へオブジェクトを配置したグリッド行を生成する。そして、グリッド行生成部１１３は、生成したグリッド行を、例えば、最左上のオブジェクトを起点に、グリッド行を生成した順序でグリッド行保持部１２３に出力する。
【００７８】
例えば、グリッド行生成部１１３は、図２０の左に示す画面上の８個のオブジェクトについて、相対位置情報において縦方向に同位にあるオブジェクトを同じグリッド行に左→右の順に並べ、図２０の右に示す５行のグリッド行を生成する。なお、図２０の右に示すグリッド行の左に付された数字は、グリッド行の取得順序または当該グリッド行が配置される行番号を示す。
【００７９】
また、例えば、グリッド行生成部１１３は、図２１の左に示す画面上の１４個のオブジェクトについて、相対位置情報において縦方向に同位にあるオブジェクトを同じグリッド行に左→右の順に並べ、図２１の右に示す９行のグリッド行を生成する。
【００８０】
このように、グリッド行生成部１１３は、相対位置情報に基づき、画面上の最左上のオブジェクトを起点に相対的に縦方向に同位であるオブジェクト群を左から右へ配置してグリッド行を生成する処理を、グリッド行の下のオブジェクトがなくなるまで順次実行することでグリッド行群を生成する。
【００８１】
図１６のグリッド配置部１１４は、グリッド行生成部１１３により生成されたグリッド行群を、相対位置情報に基づき、グリッド行に含まれるオブジェクトの上下の相対位置に従い配置することでグリッド行列を生成し、出力する。
【００８２】
例えば、グリッド配置部１１４は、グリッド行保持部１２３に記憶されるグリッド行群についてグリッド行の処理順（行番号順）に、各グリッド行に含まれるオブジェクトの上下の相対位置を保つように配置する。具体的には、グリッド配置部１１４は、相対位置情報を参照して、各グリッド行に含まれるオブジェクトのうち相対的に横方向に同位（図１８参照）のオブジェクト間で上下の相対位置を保つように配置する。
【００８３】
例えば、グリッド配置部１１４は、オブジェクトＡに対し、オブジェクトＢが相対的に横方向に同位かつ相対的上に位置する場合、グリッド行列においてオブジェクトＡの上の位置かつ同じ列にオブジェクトＢが来るように、オブジェクトＡを含むグリッド列およびオブジェクトＢを含むグリッド列を配置する。これにより、グリッド配置部１１４は、相対的に横方向に同位かつ相対的下／上に位置するオブジェクト同士を同じ列に配置したグリッド行列を生成することができる。このグリッド行の配置については、具体例を用いて後記する。
【００８４】
また、グリッド配置部１１４は、グリッド行に含まれるオブジェクトのまま配置したのでは、グリッド行に含まれるオブジェクトのうち相対的に横方向に同位（図１８参照）のオブジェクト間で上下の相対位置を保つことができない場合、グリッド行に含まれるオブジェクトの一部を増加させた上で配置する。ここでのオブジェクトの増加についても、具体例を用いて後記する。
【００８５】
ここでグリッド行の配置の具体例を説明する。なお、以下の説明において、「上位のオブジェクト」とは現在着目しているオブジェクトに対し、横方向に同位、かつ、相対的上にあるオブジェクトを指す。また、図２２、図２３および図２４に示す説明において、例えば、オブジェクト１，２，…は、適宜「１，２，…」等と略して表記している。
【００８６】
例えば、グリッド配置部１１４は、図２０に示したグリッド行について、図２２に示すようにしてグリッド行を配置し、グリッド行列を生成する。
【００８７】
まず、グリッド配置部１１４は、図２２に示すグリッド行群から、１行目のグリッド行を取り出す（図２２のＳ１）。次に、グリッド配置部１１４は、２行目のグリッド行を取り出すと、２行目のグリッド行のオブジェクト３の上位にオブジェクト１を持つため、１行目のグリッド行のオブジェクト３の上にオブジェクト１を追加する（Ｓ２）。そして、グリッド配置部１１４は３行目のグリッド行を取り出すと、それぞれのグリッド行のオブジェクトの上下の相対位置は保たれているので、配置の変更無しとして（Ｓ３）、Ｓ４へ進む。
【００８８】
Ｓ３の後、グリッド配置部１１４は、４行目のグリッド行を取り出すと、それぞれのグリッド行のオブジェクトの上下の相対位置は保たれているので、配置の変更無しとして（Ｓ４）、Ｓ５へ進む。その後、グリッド配置部１１４は、５行目のグリッド行を取り出す。ここで、５行目のグリッド行のオブジェクト７は上位にオブジェクト６を持つため、グリッド配置部１１４は、オブジェクト７がオブジェクト６の下になるように配置する。また、オブジェクト８の上位に１を持つため、グリッド配置部１１４は、オブジェクト８がオブジェクト１の下になるようにオブジェクト１を追加する（Ｓ５）。このようにすることでグリッド配置部１１４は、図２０に示したグリッド行群の配置を完了する。
【００８９】
また、例えば、グリッド配置部１１４は、図２１に示したグリッド行について、図２３、図２４に示すようにしてグリッド行を配置する。
【００９０】
すなわち、グリッド配置部１１４は、図２１に示すグリッド行群から、１行目のグリッド行を取り出し（図２３のＳ１１）、次に、２行目のグリッド行を取り出すと、オブジェクト３の上位にオブジェクト１を持つため、１行目のグリッド行の２列目にオブジェクト１を追加し（Ｓ１２）、Ｓ１３へ進む。続いて、グリッド配置部１１４は３行目のグリッド行を取り出すと、オブジェクト４の上位（相対的上）にオブジェクト１，２，３を持つため、３行目のグリッド行の２列目にオブジェクト４を追加する（Ｓ１３）。
【００９１】
Ｓ１３の後、グリッド配置部１１４は、４行目のグリッド行を取り出すと、４行目のグリッド行のオブジェクト５は上位にオブジェクト１，２，３，４を持つため、４行目のグリッド行の２列目にオブジェクト５を追加する（Ｓ１４）。
【００９２】
Ｓ１４の後、グリッド配置部１１４は、５行目のグリッド行を取り出す。ここで、５行目のグリッド行のオブジェクト６は上位にオブジェクト１，３，４を持つが、オブジェクト２，５を持たないため、グリッド配置部１１４は、新たな列（３列目）に５行目のグリッド行の行頭（オブジェクト６）が来るように配置し、また、その列（３列目）にオブジェクト１，３，４を追加する（Ｓ１５）。つまり、グリッド配置部１１４は、４行目のグリッド行を配置した上で、符号１００１に示すオブジェクトからなる列を追加する。
【００９３】
Ｓ１５の後、グリッド配置部１１４は、６行目のグリッド行を取り出す。ここで、６行目のグリッド行のオブジェクト７は上位にオブジェクト１〜５を持つため、グリッド配置部１１４は、６行目のグリッド行の２列目にオブジェクト７を追加する（Ｓ１６）。ここで、Ｓ１６の処理後、６行目のグリッド行のオブジェクト８は３列目以降にしか配置できない。更に、オブジェクト８は上位にオブジェクト１，３，４，５，６を持つため、グリッド配置部１１４は、３列目の前にオブジェクト１，３，４，５，８を追加する（Ｓ１７）。つまり、グリッド配置部１１４は、６行目のグリッド行を配置した上で、３列目に符号１００２に示すオブジェクトからなる列を挿入する。
【００９４】
Ｓ１７の後、グリッド配置部１１４は、７行目のグリッド行を取り出す。ここで、７行目のグリッド行のオブジェクト９は上位にオブジェクト１〜８を持つため、グリッド配置部１１４は、７行目のグリッド行の２〜４列目にオブジェクト９を追加する（Ｓ１８）。
【００９５】
図２４のＳ１９の説明に移る。Ｓ１８の後、７行目のグリッド行のオブジェクト１０は上位にオブジェクト１，３，４，６，８を持つため、グリッド配置部１１４は、５列目に、それら（オブジェクト１，３，４，６，８）とオブジェクト１０を配置する（Ｓ１９）。
【００９６】
Ｓ１９の後、グリッド配置部１１４は、８行目のグリッド行を取り出す。ここで、８行目のグリッド行のオブジェクト１１は上位にオブジェクト１〜１０を持つため、グリッド配置部１１４は、８行目のグリッド行の２〜４列目にオブジェクト１１を追加する（Ｓ２０）。
【００９７】
Ｓ２０の後、グリッド配置部１１４は、９行目のグリッド行を取り出す。ここで、９行目のグリッド行のオブジェクト１２は上位にオブジェクト１，３，４，５，６，８，９，１１を持つため、３，４列目にオブジェクト１２を配置する（Ｓ２１）。
【００９８】
Ｓ２１の後、９行目のグリッド行のオブジェクト１３は上位にオブジェクト１，３，４，６，８，９，１０，１１を持つが、オブジェクト９が不足し、かつオブジェクト１３は５列目以降にしか配置できない。そのため、グリッド配置部１１４は、４〜５列目の間に列を挿入してオブジェクト１，３，４，６，８，９，１１，１３の列を追加する（Ｓ２２）。
【００９９】
Ｓ２２の後、９行目のグリッド行のオブジェクト１４は上位にオブジェクト１，３，４，６，８，１０を持つが、７列目以降にしか配置できない。そのため、グリッド配置部１１４は、７列目（オブジェクト１４の上位）にオブジェクト１，３，４，６，８，１０を追加する（Ｓ２３）。
【０１００】
このようにすることで、グリッド配置部１１４は、オブジェクト間の上下左右の相対位置を反映したグリッド行列を生成することができる。また、グリッド配置部１１４は、グリッド行列を生成する際、相対的に縦方向に同位かつ相対的左／右に位置するオブジェクト同士を同じ行に配置し、また、相対的に横方向に同位かつ相対的下／上に位置するオブジェクト同士を同じ列に配置する。
【０１０１】
これにより、グリッド配置部１１４は、画面上で横方向にほぼ同じ位置に並んでいるオブジェクトを同じ行に配置し、画面上で縦方向にほぼ同じ位置に並んでいるオブジェクトを同じ列に配置したグリッド行列を得ることができる。つまり、グリッド配置部１１４は画面上でオブジェクトの配置ズレがあったとしてもこれを丸め込んだ画面認識情報（グリッド行列）を生成することができる。換言すると、グリッド配置部１１４はロバストに画面上のオブジェクトの位置関係を認識することができる。
【０１０２】
（処理手順）
次に、図２５Ａを用いて画面認識装置１００の処理手順の概要を説明する。まず、画面認識装置１００のオブジェクト情報取得部１１１は、画面情報に基づきオブジェクト情報を取得し（Ｓ１２１：オブジェクト情報取得）、相対位置情報取得部１１２は、オブジェクト情報における各オブジェクトの絶対座標情報に基づき、オブジェクト間の相対位置情報を取得する（Ｓ１２２：相対位置情報取得）。そして、グリッド行生成部１１３は、相対位置情報に基づき、グリッド行を生成し（Ｓ１２３：グリッド行生成）、グリッド配置部１１４は、生成したグリッド行を配置する（Ｓ１２４：グリッド配置）。
【０１０３】
次に、図２５Ｂを用いて、図２５ＡのＳ１２１のオブジェクト情報取得処理を詳細に説明する。まず、オブジェクト情報取得部１１１は、画面情報を読み込み（Ｓ１２１１）、画面情報から各オブジェクトのクラス（class）、絶対座標（area）、あればテキスト（text）を取得し（Ｓ１２１２）、各オブジェクトにインデックス（index）を振る（Ｓ１２１３）。そして、オブジェクト情報取得部１１１は、各オブジェクトのクラス（class）、絶対座標（area）、あればテキスト（text）、インデックス（index）を対応付けた情報（オブジェクト情報）をオブジェクト情報保持部１２１へ出力する（Ｓ１２１４）。
【０１０４】
なお、オブジェクト情報は、オブジェクトごとにクラスを生成し、プロパティとして情報を保持してもよいし、行列で保持してもよい。
【０１０５】
次に、図２６を用いて、図２５ＡのＳ１２２の相対位置情報取得処理を詳細に説明する。まず、相対位置情報取得部１１２は、オブジェクト情報保持部１２１のオブジェクト情報を読み込むと（Ｓ１２２１）、各オブジェクトの絶対座標に基づき、各オブジェクトの左右相対関係を取得し（Ｓ１２２２：左右相対関係取得）、上下相対関係を取得し（Ｓ１２２３：上下相対関係取得）、最近傍オブジェクトを取得する（Ｓ１２２４：最近傍オブジェクト取得）。そして、相対位置情報取得部１１２は、取得した情報を相対位置情報として記録し、相対位置情報保持部１２２へ出力する（Ｓ１２２５）。
【０１０６】
なお、相対位置情報は、オブジェクトごとにリストで保持してもよいし、行列で保持してもよい。また、相対位置を計算するための関数を用意しておき、相対位置情報取得部１１２が都度、オブジェクトの相対位置を計算するようにしてもよい。
【０１０７】
次に、図２７を用いて、図２６のＳ１２２２の左右相対関係取得処理を詳細に説明する。ここでは、２つのオブジェクト（obj1とobj2）の左右の相対関係（相対位置）を判断する場合を例に説明する。
【０１０８】
なお、以下の説明では、obj1の左上の座標を（px1，py1）、右下の座標を（qx1，qy1）とし、obj2の左上の座標を（px2，py2）、右下の座標を（qx2，qy2）とする。
【０１０９】
相対位置情報取得部１１２は、オブジェクト情報からオブジェクト（obj1とobj2）の座標位置の情報を読み込み（Ｓ１３１）、obj1とobj2の座標位置がｘ軸方向についてpx2≧qx1（Ｓ１３２で「px2≧qx1」）、つまり、obj1のｘ軸最大値がobj2のｘ軸最小値以下ならば、obj2はobj1の相対右（val＝1）であると判断する（Ｓ１３３）。
【０１１０】
一方、obj1とobj2の座標位置がｘ軸方向についてqx2≦px1（Ｓ１３２で「qx2≦px1」）、つまり、obj1のｘ軸最小値がobj2のｘ軸最大値以上ならば、相対位置情報取得部１１２は、obj2はobj1の相対的左（val＝-1）であると判断する（Ｓ１３４）。
【０１１１】
さらに、px2≧qx1でもqx2≦px1でもない場合（Ｓ１３２で「else」）、つまり、px1≦px2≦qx1またはpx1≦qx2≦qx1の場合、相対位置情報取得部１１２は、obj2はobj1と横方向に同位（val＝0）であると判断する（Ｓ１３５）。
【０１１２】
そして、相対位置情報取得部１１２は、Ｓ１３３〜Ｓ１３５の判断結果（val）をオブジェクトの左右相対関係に関する情報として出力する（Ｓ１３６）。
【０１１３】
次に、図２８を用いて、図２６のＳ１２２３の上下相対関係取得処理を詳細に説明する。ここでも、２つのオブジェクト（obj1とobj2）の上下の相対位置を判断する場合を例に説明する。なお、図２８に示すようにオブジェクトのｙ軸の値は画面下のオブジェクトほど高い値になるものとする。
【０１１４】
相対位置情報取得部１１２は、オブジェクト情報からオブジェクト（obj1とobj2）の座標位置の情報を読み込み（Ｓ１４１）、obj1とobj2の座標位置がｙ軸方向についてpy2≧qy1（Ｓ１４２で「py2≧qy1」）、つまり、obj1のｙ軸最大値がobj2のｙ軸最小値以下ならば、obj2はobj1の相対的下（val＝1）であると判断する（Ｓ１４３）。
【０１１５】
一方、obj1とobj2の座標位置がｙ軸方向についてqy2≦py1（Ｓ１４２で「qy2≦py1」）、つまり、obj1のｙ軸最小値がobj2のｙ軸最大値以上ならば、相対位置情報取得部１１２は、obj2はobj1の相対的上（val＝-1）であると判断する（Ｓ１４４）。
【０１１６】
さらに、py2≧qy1でもqy2≦py1でもない場合（Ｓ１４２で「else」）、相対位置情報取得部１１２は、obj2はobj1と縦方向に同位（val＝0）であると判断する（Ｓ１４５）。
【０１１７】
そして、相対位置情報取得部１１２は、Ｓ１４３〜Ｓ１４５の判断結果（val）をオブジェクトの上下相対関係に関する情報として出力する（Ｓ１４６）。
【０１１８】
次に、図２９を用いて、図２６のＳ１２２４の最近傍オブジェクト取得処理を詳細に説明する。例えば、相対位置情報取得部１１２が、オブジェクト（obj1）の左右相対関係および上下相対関係に関する情報を読み込み（Ｓ１５２）、オブジェクト（obj1）の横方向最近傍オブジェクトを取得し（Ｓ１５３）、また、オブジェクト（obj1）の縦方向最近傍オブジェクトを取得すると（Ｓ１５４）、これらをまとめてオブジェクト（obj1）の最近傍オブジェクトとして出力する（Ｓ１５５）。例えば、相対位置情報取得部１１２は、符号１６０１に示すオブジェクト（obj2）のうち、太線で囲まれたオブジェクト（obj2）をオブジェクト（obj1）の最近傍オブジェクトとして出力する。
【０１１９】
次に、図３０を用いて、図２９のＳ１５３の横方向最近傍オブジェクト取得処理を詳細に説明する。例えば、相対位置情報取得部１１２が、オブジェクト（obj1）の左右相対関係に関する情報を読み込み（Ｓ１６１）、横方向最近傍オブジェクト群neighbor={}を設定する（Ｓ１６２）。なお、Ｓ１６２の段階ではneighbor={}は空の状態である。
【０１２０】
Ｓ１６２の後、相対位置情報取得部１１２は、obj1の左右相対関係に関する情報から、obj1と縦方向に同位のオブジェクト群（Ｍ）を取得する（Ｓ１６３）。例えば、相対位置情報取得部１１２は、吹き出し１７０１に示すobj2群を取得する。
【０１２１】
Ｓ１６３の後、相対位置情報取得部１１２は、上記のＭに属するobj2それぞれについてＳ１６４〜Ｓ１７０に示す処理を実行する。すなわち、相対位置情報取得部１１２は、obj1からみたobj2の相対位置が相対的左であり（Ｓ１６４で「相対的左」）、Ｍにobj2とobj1の間に配置されるオブジェクトがなければ（Ｓ１６５でＮｏ）、当該obj2をobj1の最近傍と判断しneighborに追加する（Ｓ１６７）。
【０１２２】
一方、Ｍにobj2とobj1の間に配置されるオブジェクトがあれば（Ｓ１６５でＹｅｓ）、相対位置情報取得部１１２は、当該obj2をobj1の最近傍と判断しない（Ｓ１６８）。また、相対位置情報取得部１１２は、obj1からみたobj2の相対位置が相対的右である場合（Ｓ１６４で「相対的右」）も同様に、Ｍにobj2とobj1の間に配置されるオブジェクトがなければ（Ｓ１６６でＮｏ）、当該obj2をobj1の最近傍と判断し、neighborに追加する（Ｓ１６９）。
【０１２３】
一方、Ｍにobj2とobj1の間に配置されるオブジェクトがあれば（Ｓ１６６でＹｅｓ）、相対位置情報取得部１１２は、当該obj2をobj1の最近傍と判断しない（Ｓ１７０）。
【０１２４】
そして、相対位置情報取得部１１２は、Ｓ１６７〜Ｓ１７０の処理により、obj1の最近傍と判断されたobj2群を横方向最近傍オブジェクト群neighborとして出力する（Ｓ１７１）。
【０１２５】
例えば、相対位置情報取得部１１２は、吹き出し１７０１に示すobj2群のうち、○の付されたobj2群についてobj1の横方向最近傍オブジェクト群neighborとして出力する。一方、吹き出し１７０１に示すobj2群のうち、×の付されたobj2群はobj1との間に他のオブジェクトが配置されるので横方向最近傍オブジェクト群neighborとして出力しない。
【０１２６】
次に、図３１を用いて、図２９のＳ１５４の縦方向最近傍オブジェクト取得処理を詳細に説明する。例えば、相対位置情報取得部１１２が、オブジェクト（obj1）の上下相対関係に関する情報を読み込み（Ｓ１７２）、縦方向最近傍オブジェクト群neighbor={}を設定する（Ｓ１７３）。なお、Ｓ１７３の段階ではneighbor={}は空の状態である。
【０１２７】
Ｓ１７３の後、相対位置情報取得部１１２は、obj1の上下相対関係に関する情報から、obj1と横方向に同位のオブジェクト群（Ｍ）を取得する（Ｓ１７４）。例えば、相対位置情報取得部１１２は、吹き出し１８０１に示すobj2群を取得する。
【０１２８】
そして、相対位置情報取得部１１２は、Ｍに属するobj2それぞれについてＳ１７５〜Ｓ１８１に示す処理を実行する。すなわち、相対位置情報取得部１１２は、obj1からみたobj2の相対位置が相対的上であり（Ｓ１７５で「相対的上」）、Ｍにobj2とobj1の間に配置されるオブジェクトがなければ（Ｓ１７６でＮｏ）、当該obj2をobj1の最近傍と判断しneighborに追加する（Ｓ１７８）。
【０１２９】
一方、Ｍにobj2とobj1の間に配置されるオブジェクトがあれば（Ｓ１７６でＹｅｓ）、相対位置情報取得部１１２は、当該obj2をobj1の最近傍と判断しない（Ｓ１７９）。また、相対位置情報取得部１１２は、obj1からみたobj2の相対位置が相対的下である（Ｓ１７５で「相対的下」）場合も同様に、Ｍにobj2とobj1の間に配置されるオブジェクトがなければ（Ｓ１７７でＮｏ）、当該obj2をobj1の最近傍と判断し、neighborに追加する（Ｓ１８０）。一方、Ｍにobj2とobj1の間に配置されるオブジェクトがあれば（Ｓ１７７でＹｅｓ）、相対位置情報取得部１１２は、当該obj2をobj1の最近傍と判断しない（Ｓ１８１）。
【０１３０】
そして、相対位置情報取得部１１２は、Ｓ１７８〜Ｓ１８１の処理により、obj1の最近傍と判断されたobj2群を縦方向最近傍オブジェクト群neighborとして出力する（Ｓ１８２）。例えば、相対位置情報取得部１１２は、吹き出し１８０１に示すobj2群のうち、○の付されたobj2群についてobj1の縦方向最近傍オブジェクト群neighborとして出力する。なお、吹き出し１８０１に示すobj2群のうち、×の付されたobj2群はobj1との間に他のオブジェクトが配置されるので縦方向最近傍オブジェクト群neighborには含めない。
【０１３１】
以上の処理により、相対位置情報取得部１１２が、各オブジェクトの相対的左／右および相対的下／上の位置関係と、最近傍のオブジェクトとを示した相対位置情報を作成することができる。
【０１３２】
次に、図３２を用いて、図２５ＡのＳ１２３のグリッド行生成処理を詳細に説明する。
【０１３３】
まず、グリッド行生成部１１３は、オブジェクト群の相対位置情報を読み込む（Ｓ１９１）。次に、グリッド行生成部１１３は、オブジェクト群の相対位置情報を参照して、obj（処理対象とするオブジェクト）として最左上のオブジェクトを選択し（obj←最左上のオブジェクト）、グリッド行集合Ｓ=｛｝、探索済オブジェクト集合ＣＳ＝｛｝、未探索オブジェクト集合ＵＳ＝｛｝を設定する（Ｓ１９２）。なお、Ｓ１９２の段階で、未探索オブジェクト集合ＵＳには、Ｓ１９１で読み込んだ相対位置情報の対象となるオブジェクト群が設定される。
【０１３４】
そして、グリッド行生成部１１３は、すべてのオブジェクトを処理するまで、Ｓ１９３〜Ｓ１９９の処理を実行する。
【０１３５】
まず、グリッド行生成部１１３は、オブジェクト群の相対位置情報を参照して、objと縦方向に同位のオブジェクト群を左→右の順に取得し、これをグリッド行とする（Ｓ１９３）。次に、グリッド行生成部１１３は、Ｓ１９３で得たグリッド行をグリッド行集合Ｇに追加し（Ｓ１９４）、ＣＳ（探索済オブジェクト集合）にグリッド行を追加し、ＵＳ（未探索オブジェクト集合）からグリッド行を削除する（Ｓ１９５）。
【０１３６】
Ｓ１９５の後、グリッド行生成部１１３が、相対位置情報を参照して、objの相対的下にあり、かつ最近傍のオブジェクトが存在すると判断した場合（Ｓ１９６でＹｅｓ）、当該最近傍のオブジェクト群の中で、最も上のオブジェクト群を取得する（Ｓ１９７）。そして、グリッド行生成部１１３は、取得したオブジェクト群の中で最も左にあるオブジェクトを次のobjとする（Ｓ１９９）。例えば、グリッド行生成部１１３は、吹き出し１９０１に示すように、objの下に最近傍のオブジェクト群があれば、その中でｙ軸の値が最も小さいオブジェクト（太線で示したオブジェクト）を次のobjとする。そして、グリッド行生成部１１３は、この次のobjを対象としてＳ１９３以降の処理を行う。
【０１３７】
一方、グリッド行生成部１１３が、相対位置情報を参照して、objの相対的下にオブジェクトが存在しない、または、objの相対的下にオブジェクトが存在したとしても、当該オブジェクトはobjの最近傍のオブジェクトではないと判断した場合（Ｓ１９６でＮｏ）、グリッド行生成部１１３は、ＵＳ（未探索オブジェクト集合）から最上位のオブジェクト群を取得し（Ｓ１９８）、Ｓ１９９へ進む。
【０１３８】
グリッド行生成部１１３は、上記の処理を未探索オブジェクト集合ＵＳ＝｛｝が空になるまで実行し、生成したグリッド行集合を出力する（Ｓ２００）。
【０１３９】
以上の処理により、グリッド行生成部１１３は、横方向に同位のオブジェクト群を左から横に並べたグリッド行を生成することができる。例えば、グリッド行生成部１１３は、図２０に示す画面のオブジェクト群から、図２２に示すグリッド行群を生成する。
【０１４０】
次に、図３３を用いて、図２５ＡのＳ１２４のグリッド配置処理を詳細に説明する。例えば、グリッド配置部１１４は、グリッド行集合を読み込み（Ｓ２０１）、読み込んだグリッド行集合Ｓをｙ軸の小さい順（グリッド行の位置が高いものから低い順）にソートする（Ｓ２０２）。次に、グリッド配置部１１４は、初期グリッドＧを生成し、１行目にグリッド行集合Ｓの１行目を配置する（Ｓ２０３）。例えば、グリッド配置部１１４は、符号２００１に示す初期グリッドＧを生成すると、１行目にグリッド行集合Ｓの１行目（オブジェクト１を含むグリッド行列）を配置する。
【０１４１】
そして、グリッド配置部１１４は、グリッド行集合Ｓのすべてのグリッド行を処理するまで、Ｓ２０４〜Ｓ２０９に示す処理を実行する。
【０１４２】
まず、グリッド配置部１１４は、グリッド行集合Ｓをｘ軸の小さい順にソートし（Ｓ２０４）、グリッド行上の各オブジェクト（obj）に対して、Ｓ２０５〜Ｓ２０９の処理を実行する。つまり、グリッド配置部１１４は、グリッド行集合Ｓからobjが配置できる最小列番号ｉを取得する（Ｓ２０５）。次に、グリッド配置部１１４は、グリッド行集合Ｓにおいてobjの上位のオブジェクト群のある列群を取得し（Ｓ２０６）、以下に示す条件を満たす列群がｉ列以降に存在するか否かを判断する（Ｓ２０７）。
【０１４３】
この条件とは、上位（相対的上かつ横に同位）のオブジェクト群をｕ、グリッド列（Ｓ２０６で取得した列群）をｑ＝｛ｑ１，ｑ２，…，ｑｎ｝、ｘｉをグリッド列ｉにオブジェクトを配置するか否か（１／０）とするとき、ｑはｕの部分集合（ｑ⊆ｕ）、かつ、Σｑｉ  ｘｉ＝｜ｕ｜であるように配置する、という条件である。
【０１４４】
つまり、あるオブジェクトｉと同じ列に配置されるオブジェクトは、オブジェクトｉの上位のいずれかのオブジェクトであり、かつ、オブジェクトｉと同じ列に配置されるオブジェクトの種類の数は、オブジェクトｉの上位（オブジェクトｉの相対的上かつ横に同位）のオブジェクトの個数と同じである、という条件である。換言すると、オブジェクトｉと同じ列の上位に配置されるオブジェクト群は、相対位置情報において当該オブジェクトｉの上位に存在するすべてのオブジェクトを網羅している、という条件である。
【０１４５】
Ｓ２０７において、グリッド配置部１１４は、上記条件を満たす列群がｉ列以降に存在すると判断した場合（Ｓ２０７でＹｅｓ）、Ｇ（グリッド）のobjを上記の条件を満たす列に配置する（Ｓ２０８）。一方、グリッド配置部１１４は、上記条件を満たす列群がｉ列以降に存在しないと判断した場合（Ｓ２０７でＮｏ）、Ｇ（グリッド）に列に挿入する（Ｓ２０９）。この列の挿入処理について、図３４を用いて後記する。
【０１４６】
そして、グリッド配置部１１４は、上記の処理をグリッド行集合のすべてのグリッド行に対し行うと、生成したグリッド（グリッド行列）を出力する（Ｓ２１０）。
【０１４７】
以上の処理により、グリッド配置部１１４は、縦方向に同位のオブジェクト群が同じ列になるよう配置したグリッド行列を生成することができる。
【０１４８】
次に、図３４を用いて、図３３のＳ２０９の列の挿入処理を詳細に説明する。グリッド配置部１１４は、探索行（objの上位のオブジェクト群が存在するグリッド行）の最右列に配置されているオブジェクトをobj2とする（Ｓ２０９１）。そして、グリッド配置部１１４がobj2はobj1の相対的右であると判断した場合（Ｓ２０９２でＹｅｓ）、obj2の配置されている行の最左の左側に空の列を追加する（Ｓ２０９３）。
【０１４９】
Ｓ２０９３の後、グリッド配置部１１４は、obj2と上位のオブジェクト群を追加したときに他の各行の配置順に矛盾が発生しないようにobjの上位のオブジェクトとobjを配置する（Ｓ２０９４）。つまり、グリッド配置部１１４は、追加対象のオブジェクトの配置される行について、相対位置情報を参照して、他のオブジェクトが正しい相対位置関係であるかどうかをチェックする。そして、グリッド配置部１１４は、相対位置関係に矛盾が発生する場合は矛盾を解消するように、オブジェクトの左または右に列を追加する。
【０１５０】
一方、グリッド配置部１１４がobj2はobj1の相対的右ではなく（Ｓ２０９２でＮｏ）、相対的左と判断した場合（Ｓ２０９５でＹｅｓ）、グリッド配置部１１４は、最右列＋１列目に空の列を追加して、各行の配置順に矛盾が発生しないようにobjの上位のオブジェクトとobjを配置する（Ｓ２０９６）。なお、グリッド配置部１１４がobj2はobj1の相対的右でもなく（Ｓ２０９２でＮｏ）、相対的左でもないと判断した場合（Ｓ２０９５でＮｏ）、Ｓ２０９６の処理は行わない。
【０１５１】
以上の処理により、グリッド配置部１１４は、縦方向に同位のオブジェクト群が同じ列になるよう配置したグリッド行列を確実に生成することができる。
【０１５２】
（本実施形態の適用例）
以上説明した画面認識装置１００によれば、様々なアプリケーションにより表示される画面上の各オブジェクトに対してオブジェクト同士の相対関係を認識できる。
【０１５３】
例えば、画面認識装置１００は、図３５の符号２２００に示す旅行の予約用アプリケーションの画面上のオブジェクトの配置を認識し、符号２２０１に示す画面認識情報（グリッド行列）を得る。
【０１５４】
これにより、当該アプリケーションの画面上の情報の検索システムは、符号２２０１の画面情報におけるImage，Buttonオブジェクト削除、項目名の定義（例えば、Labelクラスを項目名とする、指定のラベル名を項目名とするなど）の処理を行うことで、符号２２０２に示す画面認識情報を得る。これにより、検索システムは、「往路に関する情報をまとめて抽出」等、項目名を利用した高度な検索ができる。
【０１５５】
さらに、上記の画面認識装置１００による画面認識技術を用いることで、アプリケーションの画面上のオブジェクトの相対位置による問い合わせ検索もできる。
【０１５６】
例えば、図３６の（１）に示すように、アプリケーションの画面上における、「決裁状況」の３つ右の画像が比較元の画像（アイコン）と同じかをチェックするというクエリ（問い合わせ）を受け付けた場合において、アプリケーションの画面上における、「決裁状況」の３つ右の画像が比較元の画像（アイコン）と同じか否かの結果を返すことができる。
【０１５７】
さらに、例えば、図３６の（２）に示すように、アプリケーションの画面上における、「備品番号」の下にある画像群の中で「95-600727」を検索するクエリ（問い合わせ）を受け付けた場合において、アプリケーションの画面上における、「備品番号」の下にある画像群の中で「95-600727」の検索結果を返すことができる。
【０１５８】
また、上記の画面認識装置１００による画面認識技術を既存の画像マッチング技術と組み合わせることで、特定し終わった各々の画像要素に対して、さらに相対位置情報を利用して絞り込んだマッチングを行い、より条件に合った正しい要素を選択する等、高精度なマッチングを実現することもできる。
【０１５９】
（プログラム）
また、上記の実施形態で述べたオブジェクト検索装置１は、オブジェクト検索装置１の機能を実現するオブジェクト検索プログラムを所望の情報処理装置（コンピュータ）にインストールすることによって実装できる。例えば、パッケージソフトウェアやオンラインソフトウェアとして提供される上記のオブジェクト検索プログラムを情報処理装置に実行させることにより、情報処理装置をオブジェクト検索装置１として機能させることができる。ここで言う情報処理装置には、デスクトップ型またはノート型のパーソナルコンピュータが含まれる。また、その他にも、情報処理装置にはスマートフォン、携帯電話機やＰＨＳ（Personal  Handyphone  System）等の移動体通信端末、さらには、ＰＤＡ（Personal  Digital  Assistants）等がその範疇に含まれる。また、オブジェクト検索装置１を、クラウドサーバに実装してもよい。
【０１６０】
以下に、上記のオブジェクト検索プログラムを実行するコンピュータの一例を説明する。図３７は、オブジェクト検索プログラムを実行するコンピュータを示す図である。図３７に示すように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ（Central  Processing  Unit）１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。
【０１６１】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ（Random  Access  Memory）１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。ディスクドライブ１１００には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１１１０およびキーボード１１２０が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１１３０が接続される。
【０１６２】
ここで、図３７に示すように、ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３およびプログラムデータ１０９４を記憶する。前記した実施形態で説明した各種データや情報は、例えばハードディスクドライブ１０９０やメモリ１０１０に記憶される。
【０１６３】
そして、ＣＰＵ１０２０が、ハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して、上述した各手順を実行する。
【０１６４】
なお、プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【０１６５】
１      オブジェクト検索装置
１００  画面認識部
１０１  ウィンドウ
１１０  クエリ解析部
１１１  オブジェクト情報取得部
１１２  相対位置情報取得部
１１３  グリッド行生成部
１１４  グリッド配置部
１２０  パターンマッチング部
１２１  オブジェクト情報保持部
１２２  相対位置情報保持部
１２３  グリッド行保持部
１３０  変数変換部
１４１  記号表
１４２  変数名リスト保持部
１４３  配置パターン保持部
１４４  画面認識情報保持部
１４５  マッチング結果保持部
１４６  オブジェクト変数保持部
【図１】
2018077763.tif 000003
【図２】
2018077763.tif 000004
【図３】
2018077763.tif 000005
【図４】
2018077763.tif 000006
【図５】
2018077763.tif 000007
【図６】
2018077763.tif 000008
【図７】
2018077763.tif 000009
【図８】
2018077763.tif 000010
【図９】
2018077763.tif 000011
【図１０Ａ】
2018077763.tif 000012
【図１０Ｂ】
2018077763.tif 000013
【図１１】
2018077763.tif 000014
【図１２】
2018077763.tif 000015
【図１３】
2018077763.tif 000016
【図１４】
2018077763.tif 000017
【図１５】
2018077763.tif 000018
【図１６】
2018077763.tif 000019
【図１７】
2018077763.tif 000020
【図１８】
2018077763.tif 000021
【図１９】
2018077763.tif 000022
【図２０】
2018077763.tif 000023
【図２１】
2018077763.tif 000024
【図２２】
2018077763.tif 000025
【図２３】
2018077763.tif 000026
【図２４】
2018077763.tif 000027
【図２５Ａ】
2018077763.tif 000028
【図２５Ｂ】
2018077763.tif 000029
【図２６】
2018077763.tif 000030
【図２７】
2018077763.tif 000031
【図２８】
2018077763.tif 000032
【図２９】
2018077763.tif 000033
【図３０】
2018077763.tif 000034
【図３１】
2018077763.tif 000035
【図３２】
2018077763.tif 000036
【図３３】
2018077763.tif 000037
【図３４】
2018077763.tif 000038
【図３５】
2018077763.tif 000039
【図３６】
2018077763.tif 000040
【図３７】
2018077763.tif 000041