(57)【特許請求の範囲】
【請求項１】
文書ページの解析を行なうアプリケーションプログラムを生成するアプリケーションプログラム生成方法であって、
文書ページを解析することによって該文書ページに含まれる属性毎の領域を識別する機能と、その識別した属性毎の領域に従って階層ツリー構造を作成する機能とを含むページ解析機能と、その作成した階層ツリー構造内の所望のノードを突き止める階層ツリー構造アクセス機能とに含まれる各機能を実現するためのライブラリを含むアプリケーションプログラムインタフェースを、ユーザに提示する提示ステップと、
前記提示したアプリケーションプログラムインタフェースの中からユーザにより選択されたライブラリと、当該選択されたライブラリによって得られるデータを所望のフォーマットに翻訳するためのデータファイルとを結合させることにより、前記文書ページの解析を行なうアプリケーションプログラムを生成する生成ステップと、
を有することを特徴とするアプリケーションプログラム生成方法。
【請求項２】
前記提示ステップにおいて提示されるアプリケーションプログラムインタフェースは、
更に、少なくとも１つの目的とするノードに、少なくとも１つのポインタをリターンする機能のためのライブラリを含む
ことを特徴とする請求項１に記載のアプリケーションプログラム生成方法。
【請求項３】
前記提示ステップにおいて提示されるアプリケーションプログラムインタフェースは、
更に、少なくとも１つの目的とするノードの属性情報を得るための問い合わせ機能のためのライブラリを含む
ことを特徴とする請求項１に記載のアプリケーションプログラム生成方法。
【請求項４】
前記提示ステップにおいて提示されるアプリケーションプログラムインタフェースは、
更に、目的とするテキストノードにおける所望のテキストラインを得る機能のためのライブラリを含む
ことを特徴とする請求項１に記載のアプリケーションプログラム生成方法。
【請求項５】
前記提示ステップにおいて提示されるアプリケーションプログラムインタフェースは、
更に、目的とする表ノードにおける所望のセルデータを得る機能のためのライブラリを含む
ことを特徴とする請求項１に記載のアプリケーションプログラム生成方法。
【請求項６】
前記提示ステップにおいて提示されるアプリケーションプログラムインタフェースは、
更に、目的とするラインノードにおけるライン情報を得る機能のためのライブラリを含む
ことを特徴とする請求項１に記載のアプリケーションプログラム生成方法。
【請求項７】
前記提示ステップにおいて提示されるアプリケーションプログラムインタフェースは、
更に、目的とする図形ノードにおける図形情報を得る機能のためのライブラリを含む
ことを特徴とする請求項１に記載のアプリケーションプログラム生成方法。
【請求項８】
文書ページの解析を行なうアプリケーションプログラムを生成するアプリケーションプログラム生成装置であって、
文書ページを解析することによって該文書ページに含まれる属性毎の領域を識別する機能と、その識別した属性毎の領域に従って階層ツリー構造を作成する機能とを含むページ解析機能と、階層ツリー構造内の所望のノードを突き止める階層ツリー構造アクセス機能とに含まれる各機能を実現するためのライブラリを含むアプリケーションプログラムインタフェースを、ユーザに提示する提示手段と、
前記提示したアプリケーションプログラムインタフェースの中からユーザにより選択されたライブラリと、当該選択されたライブラリによって得られるデータを所望のフォーマットに翻訳するためのデータファイルとを結合させることにより、前記文書ページの解析を行なうアプリケーションプログラムを生成する生成手段と、
を備えることを特徴とするアプリケーションプログラム生成装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ブロック選択プログラムにおける文書解析機能へのアクセスと、その結果得られるデータ構造へアクセスするアプリケーションプログラムインタフェース（以下、ＡＰＩ）及びその生成方法に関する。特に、本発明は、ページ解析用ＡＰＩのライブラリと、ＡＰＩライブラリを利用したページ解析プログラム及びその生成方法に関する。このＡＰＩライブラリの機能は、ブロック選択技術によって得られる階層ツリー構造のデータに対するトラバース及びアクセスを可能とする。
【０００２】
【従来の技術】
米国特許出願第０７／８７３，０１２号、及び同第０８／１７１，７２０号にて開示されたような、近年開発されたブロック選択技術は、文書ページ内の異なった形式のイメージデータを区別するために文書ページにおけるイメージを自動的に解析する。このようなブロック選択技術の結果は、光学式キャラクター認識（ＯＣＲ）、データ圧縮、データルーティング等のように、次の処理がそのイメージ上で行われるための形式を決めるために利用される。例えば、テキストデータとして指定されたイメージデータは、図形データとして指定されたイメージデータがＯＣＲ処理されない間、ＯＣＲ処理される。結果として、異なった形式のイメージデータは、オペレータが介入することなく入力され、そして自動的に処理される。
【０００３】
以下、上述のブロック選択技術がどのように動作するかについて、従来例を図１〜図３を参照して説明する。
【０００４】
図１は、従来例としての代表文書のページを示す図である。
【０００５】
図中、文書ページ１０１は、上下２つの欄を有するフォーマットに配されている。このページは、タイトル１０２、水平線１０４、テキスト領域（テキストデータの線を含む）１０５、１０６、そして１０７、ハーフトーン図形領域（テキストではないグラフィックデータを含む）１０８、表（テキスト情報を含む）１１０、枠領域１１６、見出しデータ１２６を伴うハーフトーン図形領域１２１、そして見出しデータ１３７を伴う図形領域１３２及び１３５を有する。
【０００６】
米国特許出願第０７／８７３，０１２号、及び同第０８／１７１，７２０号にて記載され、参照資料として組み入れられた開示内容のブロック選択技術に従って、文書ページ１０１のそれぞれの領域は、その内部で得られるイメージデータの形式に応じて指定される。またその時、イメージデータは、それぞれの形式に基づいて分割される。ブロック選択プログラムが文書ページを処理すると、図２に示すような階層ツリー構造が生成される。
【０００７】
図２は、従来例としての階層ツリー構造を示す図である。
【０００８】
図中、階層ツリー構造２００は、分割されたイメージデータのブロックを表わす複数のノードを有する。このツリーにおけるそれぞれのノードは、処理された文書ページにおいてイメージデータのそれぞれのブロックの特徴を定義する特徴データを有する。例えば、この特徴データは、ブロックロケーションデータ、サイズデータ、属性データ（テキスト、図形、表等のようなイメージ形式）、サブ属性データ、そして子ノード・親ノードポインタを有する。この従来例において、子または子孫ノードは、イメージデータのより大きい方のブロックの内部に存在するイメージデータを表わす。子ノードは、親またはルートノード２０１から分岐しているノード２１１と同じレベルのノードのように、階層ツリー構造において親ノードからのノード分岐として表わされている。更に、上述の特徴データに加えて、テキストブロックを表わすノードはブロックの読み込みの方向(reading orientaion)及び読み込みの順番(reading order)を定義している特徴データをも含んでいてもよい。
【０００９】
階層ツリー構造２００のような階層ツリー構造が生成されると、すぐにメモリに格納される。文書イメージでのイメージデータの処理の要求の受信において、階層ツリー構造２００は、メモリから検索され、そして互いにブロックされたイメージデータは、その相当するノード内に格納された特徴データに従って処理される。
【００１０】
更に、文書ページのイメージデータを処理するため階層ツリー構造の使用に加えて、階層ツリー構造は、図３に示す文書ページ３０１の理解し易いフォーマットの生成と表示にも利用することができる。
【００１１】
図３は、従来例としての階層ツリー構造に基づいて生成された文書ページを示す図である。結果として、文書ページのブロックテンプレート３０１は、図２に示される階層ツリー構造に格納された特徴データに基づいて、使用者に対して生成され表示される。
【００１２】
文書ページのブロックテンプレートは、格納された階層ツリー構造の各ノード内の特徴データと同様に、階層化した木の構造を直接反映する。ノード内の特徴データは、ブロックの輪郭、配置、そしてサイズの生成に利用される。更に、各ノード内の特徴データは、ブロックと、もし適当であれば、読み込みの順番及び読み込みの方向を内部に有するイメージデータの形式を見分けるために使用される。例えば、図３に示すように、ブロックテンプレート３０１は、テキストブロック３０２、３０４、３０５、そして３０９を有し、そのそれぞれはノード２０２、２０４、２０５、そして２０９に対応する。各テキストブロックは、ブロックをテキストとして指定し、更にブロックの読み込みの順番及び読み込みの方向の定義も行なう特徴データを有する。尚、図２及び図３のＲＯは、読み込みの順番を表わし、図３のＴ１〜Ｔ１４は、テキスト１〜テキスト１４を表わす。
【００１３】
【発明が解決しようとする課題】
しかしながら上記の従来例においては、使用者がブロック選択プログラムの機能を利用するため、或は生成された階層ツリー構造内の情報にアクセスするために、使用者は、生成された階層ツリー構造内にどのようにデータが格納されるかよく知らなければならない。即ち、アプリケーションの開発者は、ブロック選択プログラムとインタフェースするために、生成されたツリー構造やノード情報を理解しなければならない。
【００１４】
それゆえ、ブロック選択技術の機能ライブラリと、所望のフォーマットに翻訳変更するためのパラメータと定義を有するデータファイルとを用いることにより、容易にアプリケーションプログラムを生成できるようにする。
【００１５】
そこで本発明は、ブロック選択プログラムの機能を使用するページ解析を行なうため、そしてその結果得られるデータ構造へのアクセスを行なうための文書ページを解析する取り扱いが容易なアプリケーションプログラムの生成方法及び装置の提供を目的とする。
【００１６】
【課題を解決するための手段】
上記の目的を達成するため、本発明は以下の構成を特徴とする。
【００１７】
即ち、本発明の１つの見地として、本発明は、文書ページの解析を行なうアプリケーションプログラムを生成するアプリケーションプログラム生成方法であって、文書ページを解析することによって該文書ページに含まれる属性毎の領域を識別する機能と、その識別した属性毎の領域に従って階層ツリー構造を作成する機能とを含むページ解析機能と、その作成した階層ツリー構造内の所望のノードを突き止める階層ツリー構造アクセス機能とに含まれる各機能を実現するためのライブラリを含むアプリケーションプログラムインタフェースを、ユーザに提示する提示ステップと、前記提示したアプリケーションプログラムインタフェースの中からユーザにより選択されたライブラリと、当該選択されたライブラリによって得られるデータを所望のフォーマットに翻訳するためのデータファイルとを結合させることにより、前記文書ページの解析を行なうアプリケーションプログラムを生成する生成ステップとを有することを特徴とする。
【００１８】
また、本発明のもう１つの見地として、本発明は、文書ページの解析を行なうアプリケーションプログラムを生成するアプリケーションプログラム生成装置であって、文書ページを解析することによって該文書ページに含まれる属性毎の領域を識別する機能と、その識別した属性毎の領域に従って階層ツリー構造を作成する機能とを含むページ解析機能と、階層ツリー構造内の所望のノードを突き止める階層ツリー構造アクセス機能とに含まれる各機能を実現するためのライブラリを含むアプリケーションプログラムインタフェースを、ユーザに提示する提示手段と、前記提示したアプリケーションプログラムインタフェースの中からユーザにより選択されたライブラリと、当該選択されたライブラリによって得られるデータを所望のフォーマットに翻訳するためのデータファイルとを結合させることにより、前記文書ページの解析を行なうアプリケーションプログラムを生成する生成手段とを備えることを特徴とする。
【００１９】
【発明の実施の形態】
本願は、後述の実施例に開示されるコンピュータプログラムリスト（ソフトウエア関数の定義リスト）と共に登録される。
【００２０】
また、本明細書の開示の形態は、著作権保護を受ける題材を包含する。著作権の所有者は、特許商標庁の特許原簿または記録上に見られるどの文書またはどの特許の開示のファクシミリによる複写物にも異議は唱えない。しかし、著作権の所有者は、著作物についての全ての権利を明らかに保有する。
【００２１】
更に、"Method And apparatus For Character Recognition(米国特許出願第０７／８７３，０１２号)"、及び"Method And apparatus For Selecting Text And /Or Non-Text Blocks In A Stored Document（同第０８／１７１，７２０号）"、そして"Page analysis System（同第０８／        号）"に開示される内容が参照資料として組み入れられる。
【００２２】
はじめに、本発明の性質を迅速に理解するために本願の概要を述べれば、アプリケーションプログラムインタフェースは、ブロック選択プログラムのページ解析機能にアクセスし、それにより得られたデータ構造にアクセスする。このアプリケーションプログラムインタフェースは、ブロック選択機能を操作する複数のページ解析機能、即ち、文書ページを解析する機能、その解析された文書ページに相当する階層ツリー構造を生成する機能、そしてブロックＩＤ或は解析された文書ページのルートノード(root node)にポインタをリターンする機能を備えている。複数の階層ツリー構造へのアクセス機能は、階層ツリー構造をトラバース(traverse)し、その階層ツリー構造における目的とするノードを突き止める。本発明のより完全な理解及び本発明の有利な点は、後述の記載事項によって明らかになる。
【００２３】
以下、本発明の一実施形態を図面を参照して詳細に説明する。
【００２４】
図４は、本発明を適用するコンピュータの構成図である。
【００２５】
図中、コンピュータ１０は、MacIntosh社、IBM社製ＰＣ、或はMicrosoft社製Windowsのようなウィンドウ環境を備えるＰＣ互換コンピュータのようなコンピュータである。コンピュータ１０は、カラーモニタ等のディスプレイスクリーン１２、ユーザーコマンドを入力するキーボード１３、そしてスクリーン１２上に表示された対象を操作するマウス等のポインティング装置１４を備える。
【００２６】
また、コンピュータ１０は、圧縮されたまたは圧縮されていないフォーマットの文書イメージファイル等を有するデータファイルの格納や、ブロック選択機能を備えた少なくとも１つのブロック選択プログラム、アプリケーションプログラムインタフェース機能を備えたアプリケーションプログラムインタフェースライブラリ、そしてそれらのデータファイルを有するアプリケーションプログラムファイルの格納を行なうコンピュータディスク１１のような大容量記憶装置を備える。コンピュータディスク１１には、更に種々の階層ツリー構造データのためのブロック選択プログラム処理を行った各文書ページ、そしてブロック選択機能の種々の操作と階層ツリー構造内部のデータにアクセスする種々の要求元(claimant)ページの解析プログラムも格納されている。
【００２７】
文書イメージデータは、文書またはその他のイメージをスキャンし、それらのビットマップイメージを提供するスキャナ１６から入力される。文書イメージは、ネットワークインタフェース２４またはファクシミリ／モデムインタフェース２６を経由し、その他の外部装置のように他の色々なソースからコンピュータ１０に入力される。また、プリンタ１８は、文書イメージの出力を行なう。
【００２８】
プログラム可能な汎用のコンピュータの構成は、図４に示されるものに限られるわけではなく、スタンドアローンコンピュータまたは他の形式のデータ処理装置においても本発明を実施できることは言うまでもない。
【００２９】
図５は、本発明の一実施形態としてのコンピュータ１０の内部構成を示すブロック図である。
【００３０】
図中、コンピュータ１０は、中央処理装置（ＣＰＵ）２０、スキャナインタフェース２２、プリンタインタフェース２３、ネットワークインタフェース２４、ファクシミリ／モデムインタフェース２６、ディスプレイインタフェース２７、キーボードインタフェース２８、マウスインタフェース２９、メインメモリ３０、そしてディスク１１を備え、これらはそれぞれコンピュータバス２１によりインタフェースされている。
【００３１】
メインメモリ３０は、ページアナライザＡＰＩまたはブロック選択プログラムの種々の処理工程のように、格納されたプログラムの指令を実行する間、ＣＰＵ２０が使用するランダムアクセスメモリを提供するため、コンピュータバス２１とインタフェースされている。即ち、ＣＰＵ２０は、これらのプログラムをディスク１１からメインメモリ３０の内部にロードし、メインメモリ３０の外部でこれら格納されたプログラムを実行する。
【００３２】
使用者の命令に従って、格納されたアプリケーションプログラムは、イメージ処理とデータの操作を提供する。例えば、ブロック選択が行われる前後に、使用者が文書を生成、操作、眺めるため、Windows用のWardperfectのような卓上処理プログラムが起動されてもよい。同様に、入力された文書ページ内のイメージデータの種々の形式を解析し、Windows環境下でページ解析の結果をオペレータに対して表示するため、ページ解析プログラムがブロック選択処理を動作させるために実行されてもよい。
【００３３】
図６Ａ及び図６Ｂは、本発明の一実施形態としてのＡＰＩ機能ライブラリを示す図であり、それぞれページ解析プログラムを生成するために使用される。
【００３４】
ページ解析のためのプログラムを生成するため、ＡＰＩライブラリの内容が、ディスク１１から検索される。目的とする生成プログラムを得るため、ページ解析プログラムは、ＡＰＩライブラリ内部にある機能とデータファイルとを結合させることにより生成される。例えば、図６Ａに示されるＡＰＩ機能ライブラリ６０１は、ブロック選択プログラムを操作する機能と、その機能の結果得られるデータ構造へアクセスする機能とを備える。ＡＰＩ機能ライブラリ６０１におけるＡＰＩ機能は、単に本実施形態にて使用できるページ解析機能の一例にすぎない。従って、本発明において使用できる他の機能については、実施例にて後述する。
【００３５】
図６Ａに示すように、ＡＰＩ機能ライブラリ６０１は、ページ解析機能６０２、ノード関係機能６０９、テキストブロック機能６１４、表ブロック機能６１８、ライン機能６２３、そして図形機能６２５を備える。ページ解析機能は、要求されるタスクを行なうためにこれらの機能の一部または全部を利用することが可能である。これらの機能のそれぞれについての詳細は後述する。
【００３６】
本実施形態において、ページ解析機能６０２は、種々のブロック選択処理工程を操作するために利用される。通常、ページ解析を行なう前にページ解析プログラムは、初期化ページ解析機能６０３を実行する。この機能は、内部の変数を初期化し、処理に必要な内部のメモリをページ解析機能６０４によりコールされるブロック選択を行なうブロック選択処理に割り当てる。メモリが割り当てられ、変数が初期化されるとすぐに、ページ選択プログラムはページ解析機能６０４を実行する。この機能は、格納されている入力済みの文書のページにページ解析処理を実行する。ページ解析機能６０４の結果は、階層ツリー構造としてメモリ内に格納される。ページ解析機能６０４が完了すると、階層ツリー構造は完成され、ルートブロックＩＤがリターンされる。もしページを追加して解析したいのであれば、前のページの処理に利用されたメモリ領域をクリアするフリーページデータが実行される。
【００３７】
ページ解析の完了後、プログラムは、初期化ページ解析機能６０３により割り当てられたメモリを開放するため、そしてページ解析アプリケーションを終了するために終了ページ解析機能６０５を実行する。
【００３８】
ページ解析機能６０２は、更にブロック形式機能６０６を備える。この機能が実行されると、図形、テキスト、非テキストのような特別なブロックの属性がリターンされる。ページ傾き機能６０７が実行されると、ページ全体の傾き角の１０倍された値がリターンされる。ここで、値が０であれば傾き無しを示し、例えば、リターンされた値が１１と２２であれば、それぞれ傾き角は１．１と２．２を表わす。
【００３９】
ＡＰＩライブラリにおける種々の機能を利用してページが解析され、階層ツリー構造が生成されるとすぐに、使用者は、ツリーにおけるノード間の関係を決定するために階層ツリー構造に質問することができる。つまり、ノード関係機能６０９を利用することにより、使用者は、ツリー内のノードとそのツリー内のその他のノードとの関係を決めることができる。このようにして、例えば、全ての子ノードの獲得機能(GetAllchildren function)６１０は、指定された親またはルートノードを有するイメージデータの指定された形式における全ノードのブロックＩＤをリターンする。
子ノードの数量獲得機能(GetNumberOfchildren function)６１２を利用することにより、プログラムは、指定されたノードの子ノードの数量をリターンする。同様に、親ノードの獲得機能(GetParent function)６１３により、プログラムは、指定された子ノードの親ノードのブロックＩＤをリターンする。
【００４０】
ＡＰＩ機能ライブラリ６０１における他の機能は、使用者が各ノードについて更に細かく質問することを許可する。例えば、テキストブロック機能６１４の種々の機能を利用することにより、使用者は、テキストブロックの第１のテキストライン、最後のテキストライン、或はその次のテキストラインを得ることができる。第１のテキストライン獲得機能(GetFirstTextLine function)６１５を利用することにより、プログラムは、指定されたテキストノードにおける第１のテキストラインのブロックＩＤであるポインタをリターンする。同様に、最後のテキストライン獲得機能(GetLastTextLine function)６１６、そして次のテキストライン獲得機能(GetNextTextLine function)６１７を利用することにより、プログラムは、テキストブロックにおけるブロックＩＤ、または最後のテキストライン、そして次のテキストラインであるポインタをそれぞれリターンする。もし使用者が階層ツリー内の表ノードへの質問を望むのであれば、使用者は、表ブロック機能６１８を利用することにより、各表ノード内のデータを決定できる。この機能は、第１の表のセル獲得機能(GetFirstTableCell function)６１９、最後の表のセル獲得機能(GetLastTableCell function)６２０、次の表のセル獲得機能(GetNextTableCell function)６２１、そして表のセル数量獲得機能(GetNumberOfCellsInTable function)６２２を備えている。ライン機能６２３そして図形機能６２５のような他のＡＰＩ機能は、階層ツリー構造において使用者がラインノードと図形ノード内の情報をそれぞれ決定することを許す。
【００４１】
図６Ｂは、パラメータと定義とを有するＡＰＩデータファイルを示している。ＡＰＩデータファイル７０１の内部に備えられたパラメータと定義は、ＡＰＩ機能ライブラリ６０１内で定義され、関係付けられたＡＰＩ機能により利用される。ＡＰＩ機能は、階層ツリー内のデータにアクセスするため、そしてアクセスされたデータをユーザーフレンドリなフォーマットに翻訳するためにそれら関係付けられたデータファイルを利用する。尚、ＡＰＩデータファイル７０１に記載されたパラメータと定義は、単に本実施形態にて使用できるパラメータと定義の一例にすぎない。従って、本発明において使用できる他の定義とパラメータについては、実施例にて後述する。
【００４２】
本発明の一実施形態において、ＡＰＩデータファイル７０１はエラーコード７０３を有する。このエラーコード７０３は、ページ解析が予め定義された事象の発生を行なえない場合にエラーコードをリターンするため、初期化ページ解析機能６０３、そしてページ解析機能６０５により使用される。例えば、エラーコードは、ブロック選択処理を実行するために要求されるメモリの容量が十分でない場合、またはページの傾きがページ解析処理を正確に行なうには大きすぎる場合に出力される。
【００４３】
ブロックの関係形式の定義(Block relationship-type definitions)７０４は、親、子、そして関係なし等の指定されたノード間の関係に関する情報をリターンするため、ノード関係機能６０９により使用される。ライン形式の定義７０５は、ライン機能６２３に応じて情報をリターンする時にアクセスされる。そして図形形式の定義７０６は、図形機能６２５に応じて情報をリターンする時にアクセスされる。
【００４４】
ＡＰＩライブラリ６０１及び７０１に格納されたＡＰＩデータファイル及びＡＰＩ機能を利用し、使用者は、目的とするＡＰＩを生成する。複数のページ解析機能のうちの少なくとも１つと、少なくとも１つのデータファイルとを結合することによりページ解析プログラムを生成することができる。例えば、使用者は、ディスク１１に格納されたブロック選択プログラムを実行するために、ページ解析機能６０３を選択してもよい。使用者の最終目標に応じて、使用者は、複数の関係機能のうちの少なくとも１つ、または複数のテキスト選択機能、表ブロック機能、ラインブロック機能、または図面ブロック機能のような目的とするノードを特徴付ける機能のうちの少なくとも１つをも選択してもよい。選択されたそれぞれの機能は、それに相当するＡＰＩデータファイル７０１からのデータファイルと結合される。
【００４５】
目的とする機能とそれらの関係付けられたデータファイルとを結合させると同時に、ページ選択プログラムは形成される。新たに生成されたプログラムは、その時、その予め定義されたタスクを実行することに使用できる。例えば、使用者の最終目標は、文書ページ上に存在する全てのテキストブロックに光学的文字認識（ＯＣＲ）処理の実行であってもよい。従って、プログラムは、テキスト属性を持つルートノードの全ての子ブロックをリターンするためにページ解析機能６０３と全ての子ブロック獲得機能６１０を備える。少なくともこれら２つの機能を利用することにより、使用者は、テキストであるルートノードの全ての子ブロックを獲得することができる。そして、使用者は、その時ＯＣＲ処理プログラムに対するそのプログラムの結果を得ることができる。
【００４６】
図７は、本発明の一実施形態としてのＡＰＩによるアプリケーションプログラムの生成方法を示すフローチャートである。
【００４７】
図中、ステップＳ７０１において、図６Ａ及び図６Ｂに示されるようなＡＰＩライブラリは、ディスク１１から不図示のランダムアクセスメモリにダウンロードされる。ステップＳ７０２において、ランダムアクセスメモリにダウンロードされたＡＰＩライブラリは、使用者に対して表示される。使用者の最終目標に応じて、１つ或はそれ以上の機能とそれに対応するデータ構造が、目的とする結果をもたらすプログラムを得るためにＡＰＩライブラリから選択され、結合される。
【００４８】
このようにしてステップＳ７０４において、使用者は、１つ或はそれ以上の機能とそれに対応するデータファイルをＡＰＩライブラリから選択する。ステップＳ７０５において、機能とデータファイルは、目的とするアプリケーションプログラムを形成するためにコンパイルされる。
【００４９】
ステップＳ７０７において、新たに生成されたプログラムは、ディスク１１に格納される。そして、その目的とする機能を果すために使用者により、または他のプログラムによりディスク１１から直接実行される。
【００５０】
尚、本発明は、本実施形態のようにパーソナルコンピュータ、プリンタ、インタフェース等の複数の機器から構成されるシステムに適用しても、複写機等の１つの機器からなる装置に適用しても良い。また、本発明はシステム或は装置にプログラムを供給することによって達成される場合にも適用できることはいうまでもない。この場合、本発明を達成するためのソフトウェアによって表されるプログラムを格納した記憶媒体から、該プログラムを該システム或は装置に読み出すことによって、そのシステム或は装置が、本発明の効果を享受することが可能となる。
【００５１】
＜本実施形態の効果＞
使用者は、目的とする１つ或はそれ以上の機能とそれに対応するデータファイルをディスプレイ１２に表示されたＡＰＩライブラリから選択すれば、必要とするアプリケーションプログラムインタフェースを得られるようになる。
【００５２】
【実施例】
以下、本発明の一実施例を図面を参照して説明する。尚、以下に添付するプログラム上の”￥”は原文におけるバックスラッシュを表わす。
【００５３】
はじめにページアナライザＳＤＫは、ページイメージの論理的な構造を解析するための機能のセットを体系的に、そして統一化された方法により提供する。概念上、ページは、テキスト、表題、表、図形、枠、ライン或は単純なノイズのような種々の形態の小さな構成要素から成り立つ。これらの構成要素のうちの幾つかは、更に小さな構成要素を含むことができる。ＳＤＫは、利便性と汎用性を確保するように設計され、実行される。
【００５４】
ページアナライザＳＤＫは、ページイメージを受け入れ、ブロックに分解し（ゾーンとも呼ばれる）、形式に従ってブロックを分類し、それらの読み込み順序を決定し、そしてメモリ内にそのページを表わすツリー構造を生成する。ＡＰＩ機能は、使用者がツリーをトラバース(traverse)すること、そしてその内部の情報を利用することを許可するが、ツリーの直接的な修正は許可しない。種々のＡＰＩ機能は、メモリの割り付けと開放に責任を持つコーラ(caller)を必要とする。
【００５５】
＜ブロック選択技術＞
ブロック：ブロック選択は、文書を解析し、そしてその文書の全ての重要な領域を分類する。認識されるブロックを、以下に示す。
【００５６】
・テキスト：文章の段落がいくつ含まれるについての厳密なルールはない。テキスト領域の読み込み方向は、垂直、水平、または不明が許される。テキストは、通常のテキスト、表題、表の内部のテキスト、見出しまたは図形を伴うテキストが許される。
【００５７】
・図形：
ラインが描かれた図形：ラインアート形式の図形、これらに含まれるテキストも認識される。
ハーフトーンの図形：原稿のイメージとして、グレイスケールの図形、ハーフトーンの図形、連続したトーンの図形、または写真の認識が可能である。
【００５８】
・表：表を小さなセルに分割し、読み取り可能なラインで表わされているどの典型的な表も認識される。尚、スキャン後に不完全なラインを有する表の場合、エラーの確立は高いであろう。
【００５９】
・ライン：同一ページにおける大部分のテキストの字の太さ程度の実線や、点線や斜線も認識される。スキャン後に認識のよいものを得るため、ラインのエッジ部分は滑らかであるべきである。ラインには、以下の３つの形式がある。
【００６０】
水平線      ：水平方向の実線／点線
垂直線      ：垂直方向の実線／点線
ジョイント線：９０度に正確に交差した水平線と垂直線
ここで、ジョイント線は、時には異なる領域を分割するセパレータとして存在するため、我々はジョイント線の認識を試みる。
【００６１】
・枠：枠は、長方形により囲まれた通常のものを認識する。枠の太さと枠内の密度は、認識に影響する。
【００６２】
・部位：図面を伴う見出し及び／またはテキストと同様に、分割するイメージの構成要素を有する特別な形式の図形を認識する。
【００６３】
＜ＡＰＩの定義及び構造＞
この章は、ページ解析ＳＤＫに使用されている全ての機能とデータ構造を記述している。
【００６４】
使用者は、他の関連するインクルードファイル(include files)を含むｐａ．ｈファイルだけを含めるべきである。
【００６５】
ｐａ．ｈファイル
これは、ＰＡ  ＳＤＫの構造と機能を表現するインクルードファイルである。
#ifndef pa_h
#define pa_h
#include "rbm.h"
(種々の定義)
#ifndef TRUE
#define TRUE                     1
#endif
#ifndef FALSE
#define FALSE                    0
#endif
#ifndef NULL
#define NULL                     0
#endif
#ifndef BOOL
#define BOOL int
#endif
（ＰＡ  ＡＰＩエラーコード）
typedef int PA_ERR;
#define PA_SUCCESS                0   /* エラー無し */
#define PA_ERR_INTERNAL           1   /* SDK内部のエラー */
#define PA_ERR_OUT_OF_MEMORY      2   /* システムがメモリ外 */
#define PA_ERR_NO_INIT_CALL       3   /* 初期化コール無し */
#define PA_ERR_INVALID_BLOCK_ID   4   /* block id不良 */
#define PA_ERR_EXCEED_MAX_PAGE    5   /* 最大ページ数を超えている */
/* １つのPA間のページ */
/* セッションは１０ */
#define PA_ERR_BLOCK_NOT_LINE    21   /* ブロックがラインブロックでない */
#define PA_ERR_BLOCK_NOT_PICT    22   /* ブロックが図形ブロックでない */
（文書形式）
配置のスタイルまたは言語に応じて、文書は、英文形式では左から右、和文形式または中国語形式では上から下、或はそれらの混在を標準とすることが可能である。
0003943614.tif 000002
（ブロックの方向形式）
ページアナライザは、ブロックの境界線を識別する。また、各ブロックの方向も検知する。
0003943614.tif 000003
（ライン属性）
0003943614.tif 000004
（ライン形式）
0003943614.tif 000005
（ライン情報）
0003943614.tif 000006
（図形形式）
(グレースケール化された)PA_PICT_HALFTONE 及び(直線と曲線で構成された)PA_PICT_LINEART の２つの形式の図形が認識される。図形は、スタンドアローン、子ブロックを持たない独立した図形、または小さいイメージと見出しのような関連するテキストブロックを有する図形であってもよい。（ＡＰＩ機能のセクションにおいて述べているＰＡ子ブロックの数量獲得機能（PA_GetNumberOfChildrenBlocks）参照）。
0003943614.tif 000007
（図形情報）
0003943614.tif 000008
（基本ブロック形式）
ページアナライザは、ブロックを以下の種類に分類する。
0003943614.tif 000009
0003943614.tif 000010
（ブロック関係の形式）
ページアナラーザは、ツリーにおけるブロックの関係を決定する
0003943614.tif 000011
（ブロックＩＤの構造）
PA_BLOCK_IDの構造は、ブロックに対するハンドル(handle)である。
0003943614.tif 000012
（全体の機能）
PA_ERR         PA_AnalyzePage ();
PA_ERR         PA_EndPageAnalyzer ();
PA_ERR         PA_FreePageData ();
PA_ERR         PA_InitPageAnalyzer ();
（全体のブロック機能）
BOOL           PA_BlockIdIsNull ();
PA_ERR         PA_ExtractBlockImageBit1D ();
PA_ERR         PA_ExtractBlockImageByte2D ();
PA_ERR         PA_GetBlockBoundary ();
PA_BLOCK_TYPE  PA_GetBlockType ();
int            PA_GetPageSkew ();
BOOL           PA_SameBlocks ();
Block Hierarchy-related Functions
BOOL           PA_BlockIsComposite ();
PA_ERR         PA_GetAllChildenBlocks ();
PA_ERR         PA_GetAllDescendantBlocks ();
PA_BLOCK_ID    PA_GetAncestorBlock ();
PA_REL_TYPE    PA_GetBlockRelation ();
int            PA_GetDepthOfBlock ();
PA_BLOCK_ID    PA_GetFirstChildBlock ();
PA_BLOCK_ID    PA_GetLastChildBlock ();
PA_BLOCK_ID    PA_GetNextChildBlock ();
int            PA_GetNumberOfChildrenBlocks ();
int            PA_GetNumberOfDescendantBlocks ();
PA_BLOCK_ID    PA_GetParentBlock ();
PA_BLOCK_ID    PA_GetPreviousChildBlock ();
（ライン機能）
PA_ERR         PA_GetLineInfo ();
（図形機能）
PA_ERR         PA_GetPictureInfo ();
（テキストブロック機能）
テキストブロックは、ブロックの特別な形態である。テキストブロックの操作は、全体のブロック機能を直接コールすることにより起動することができる。テキストブロック機能は、全体のブロック機能をコールするマクロとして実行される。
0003943614.tif 000013
（表ブロック機能）
表ブロックは、ブロックの特別な形態である。表ブロックの操作は、全体のブロック機能を直接コールすることにより起動することができる。表ブロック機能は、全体のブロック機能をコールするマクロとして実行される（"PA_GetIthTableCell"を除く）。
0003943614.tif 000014
ｒｂｍ．ｈファイル
これは、生のビットマップを扱う構造と機能を記述されているインクルードファイルである。それらは、ぺージ解析ＡＰＩにより使用されるが、ＰＡ ＡＰＩとは独立しており、他の前後関係の使用に適している。詳細は、ＲＢＭ ＡＰＩ文書を参照されたい。
0003943614.tif 000015
RBM_RAW_BITMAP構造は、解析すべきイメージに関する情報を保持する。pImageのメンバは、イメージのスキャンラインの上から下までのつながりとして格納されている圧縮されていないイメージを指し示す。それぞれのスキャンラインは、左から右に１ビット／ピクセルで格納される。
0003943614.tif 000016
0003943614.tif 000017
＜ＡＰＩ機能＞
ＡＰＩ機能は、この章において論理的な種類にグループ分けされ、個々に述べられる。それぞれの分類において機能は、アルファベット順に並べられている。それぞれの分類はまた、入力されたパラメータと機能によるリターン値についての情報を有する。返されるエラーの意味については、前述のｐａ．ｈファイルにおける定義を参照されたい。
【００６６】
（共通の機能）
共通の機能を以下に示す。
【００６７】
PA_AnalyzePage
PA_AnalyzePageは、与えられた１枚のページイメージにおける１つの領域にページ解析を施す。結果は、ブロックの階層（ツリー）であるメモリに格納される。コーラ(caller)は、この機能をコールする前にPA_InitPageAnalyzerをコールすべきである。現在では、１０ページ同時に処理することができる。コーラは、各ページに対しこの機能をすぐにコールし、ルートブロックＩＤをセーブしなければならない。このコーラは、その他のページを処理する前にページを空きの状態にするためにPA_FreePageDataをコールしてはいけない。一方、コーラが、そのページの処理を一度終了したページにより使用された資源を開放するために、セーブされたルートブロックＩＤをパスしているPA_FreePageDataを呼ぶことは重要である。
パラメータ:
ImageInfoPtr     (入力)
サイズの情報をイメージするためのポインタのようなデータを有する構造を示す。
DocType          (入力)
文書の形式である。PA_DOC_TYPEの定義を参照されたい。
AreaPtr          (入力)
解析されるべき領域の範囲を記述している構造を示す。ポインタがNULLであれば、全体のイメージが解析されるであろう。
BlockIdPtr       (出力)
ページ内のブロックの分類体系におけるルートブロック（のアドレス）である。
変数をリターンした機能:
PA_SUCCESS
PA_ERR_NO_INIT_CALL
PA_ERR_EXCEED_MAX_PAGE
機能のプロトタイプ:
0003943614.tif 000018
PA_EndPageAnalyzer
PA_EndPageAnalyzerは、PA_InitPageAnalyzer機能により割り付けられたメモリを開放する。この機能は、PA_InitPageAnalyzerがコールされなければ何も行なわない。この機能は、アプリケーションを終える前にコールされるべきである。
パラメータ:
無し
変数をリターンした機能:
PA_SUCCESS
機能のプロトタイプ:
PA_ERR
PA_EndPageAnalyzer ()
PA_FreePageData
PA_FreePageDataは、PA_AnalyzePageにより生成されたページ解析のブロックの分類体系を開放する。コーラは、その他のページを解析するためにPA_AnalyzePageをコールする前にこの機能をコールしてはならない。現在では、１０ページ同時に処理することができる。一方、コーラが、そのページの処理を一度終了したページにより使用された資源を開放するために、PA_AnalyzePageによりリターンされたルートブロックＩＤをパスしているPA_FreePageDataを呼ぶことは重要である。
パラメータ:
BlockId          (入力)
PA_AnalyzePage機能によりリターンされるブロックの分類体系におけるルートブロックである。
変数をリターンした機能:
PA_SUCCESS  (0)
>0      何かエラーが起きたならば
機能のプロトタイプ:
0003943614.tif 000019
PA_InitPageAnalyzer
PA_InitPageAnalyzerは、内部の変数を初期化し、ページアナライザに必要な内部のメモリを割り付ける。この機能は、一度アプリケーション全体に対してコールされるべきである。この機能への余分なコールは、無視される。PA_EndPageAnalyzerは、この機能によって割り付けられたメモリを開放するためにコールされるべきである。
パラメータ:
無し
変数をリターンした機能:
PA_SUCCESS
PA_ERR_OUT_OF_MEMORY
機能のプロトタイプ:
PA_ERR
PA_InitPageAnalyzer ()
（共通のブロック機能）
以下の機能は、どのブロック形式に対しても有効なわけではない。
PA_BlockIdIsNull
PA_BlockIdIsNullは、ブロックＩＤがPA_NULL_BLOCK_IDかどうかをチェックする。
パラメータ:
BlockId          (入力)
チェックされるべきブロックＩＤである。
変数をリターンした機能:
TRUE    ブロックは、PA_NULL_BLOCK_IDである。
FALSE   ブロックは、PA_NULL_BLOCK_IDではない。
機能のプロトタイプ:
0003943614.tif 000020
PA_ExtractBlockImageBit1D
PA_ExtractBlockImageBit1Dは、ブロックのビットマップイメージを1-Dビット／ピクセルの配列に抽出する。使用者は、必要とされる空間の割り付けと開放に責任がある。目的とするビットマップの必要とされる最小の大きさは、PA_GetBlockBoundaryをコールすることにより決定される。
パラメータ:
BlockId          (入力)
抽出されるべきブロックである。
SourceImageInfoPtr (入力)
他のイメージの大きさの情報に対するポインタようなデータを有する構造を示す。
DestImageInfoPtr   (出力)
イメージと他のイメージの大きさの情報に対するポインタようなデータを有する目的とする構造を示す。
変数をリターンした機能:
PA_SUCCESS  (0)
> 0     何かエラーが起きたならば
機能のプロトタイプ:
0003943614.tif 000021
PA_ExtractBlockImageByte2D
PA_ExtractBlockImageByte2Dは、ブロックのビットマップイメージを2-Dバイト／ピクセルの配列に抽出する。2-Dバイト／ピクセルの配列は、ポインタの配列として定義される。
【００６８】
使用者は、必要とされる空間の割り付けと開放に責任がある。目的とするビットマップの必要とされる最小の大きさは、PA_GetBlockBoundaryをコールすることにより決定される。それぞれのポインタは、１列のイメージを表わすunsigned charの配列を示す。
【００６９】
使用者は、必要とされる空間の割り付けと開放に責任がある。目的とするビットマップの必要とされる最小の大きさは、PA_GetBlockBoundary機能をコールすることにより決定される。
パラメータ:
BlockId          (入力)
抽出されるべきブロックである。
SourceImageInfoPtr (入力)
イメージと他のイメージの大きさの情報に対するポインタようなデータを有する目的とする構造を示す。
DestImagePtr2    (出力)
抽出されたイメージのための２次元配列である。
変数をリターンした機能:
PA_SUCCESS  (0)
> 0     何かエラーが起きたならば
機能のプロトタイプ:
0003943614.tif 000022
PA_GetBlockBoundary
PA_GetBlockBoundaryは、ブロックの境界線をリターンする。
パラメータ:
BlockId          (入力)
現在のブロック
BoundaryPtr      (出力)
境界線の構造（のアドレス）
変数をリターンした機能:
PA_SUCCESS  (0)
>0      何かエラーが起きたならば
機能のプロトタイプ:
0003943614.tif 000023
PA_GetBlockType
PA_GetBlockTypeは、ブロックのブロック形式をリターンする。
パラメータ:
BlockId          (入力)
現在のブロック
変数をリターンした機能:
ブロック形式である。PA_BLOCK_...の定義を参照されたい。
機能のプロトタイプ:
0003943614.tif 000024
PA_GetPageSkew
PA_GetPageSkewは、ページ全体の傾き角の１０倍の値をリターンする。例えば、値０は、そのページが傾いていないことを示し、値１１及び２２は、傾き角１．１及び２．２をそれぞれ示す。
パラメータ:
BlockId          (入力)
PA_AnalyzePage機能によりリターンされるブロックの分類体系におけるルートブロックである。
変数をリターンした機能:
>=0  ページの傾き角（の１０倍の値）
-1   BlockIdが、PA_AnalyzePageによりリターンされるルートブロックでなければ
機能のプロトタイプ:
0003943614.tif 000025
PA_SameBlocks
PA_SameBlocksは、２つのブロックが同じかどうかをチェックする。
パラメータ:
BlockId1         (入力)
チェックされるべき第１のブロック
BlockId2         (入力)
チェックされるべき第２のブロック
変数をリターンした機能:
TRUE    ブロックが同じ。
FALSE   ブロックが同じではない。
機能のプロトタイプ:
0003943614.tif 000026
（分類体系が関連する機能）
PA_BlockIsComposite
PA_BlockIsCompositeは、ブロックが１つまたはそれ以上の子ブロックを有するかどうかをチェックする。
パラメータ:
BlockId          (入力)
チェックされるべきブロック
変数をリターンした機能:
TRUE    ブロックが合成のブロックである。
FALSE   ブロックが合成のブロックではない。
機能のプロトタイプ:
0003943614.tif 000027
PA_GetAllChildrenBlocks
PA_GetAllChildrenBlocksは、指定された形式のブロックに関係する全ての子ブロックをチェックする。コーラは、この機能をコールする前にPA_GetNumberOfChildrenBlocksをコールし、ブロックＩＤの配列のためのメモリを割り付けるべきである。
パラメータ:
BlockId          (入力)
現在のブロック
BlockType        (入力)
選択されるべきブロックの形式
ブロック形式のためのPA_BLOCK_...の定義を参照
ChildrenBlockIdPtr  (出力)
子ブロックＩＤの配列に対するポインタ
変数をリターンされた機能:
PA_SUCCESS  (0)
>0      何かエラーが起こったかどうか
機能のプロトタイプ:
0003943614.tif 000028
PA_GetAllDescendantBlocks
PA_GetAllDescendantBlocksは、指定された形式と指定されたレベルの範囲内において照合するブロックの全ての子孫ブロックを得る。
【００７０】
注釈、PA_BLOCK_TEXTの子（例えば、PA_BLOCK_TEXTLINEブロック）はカウントされない。コーラは、PA_GetNumberOfDescendantBlocksをコールし、この機能をコールする前にブロックＩＤ配列のためのメモリを割り付けるべきである。
パラメータ:
BlockId          (入力)
現在のブロック
BlockType        (入力)
選択されるべきブロックの形式
ブロック形式のためのPA_BLOCK_...の定義を参照
Levels           (入力)
含まれるべき子孫のレベルの数量
DescendantBlockIdPtr  (出力)
子孫のブロックＩＤの配列に対するポインタ
変数をリターンされた機能:
PA_SUCCESS  (0)
＞0      何かエラーが起こったかどうか
機能のプロトタイプ:
0003943614.tif 000029
PA_GetAncestorBlock
PA_GetAncestorBlockは、２つの指定されたブロックを含む最も深く配置された（一番近い）先祖ブロックをリターンする。
パラメータ:
BlockId1         (入力)
第１のブロック
BlockId2         (入力)
第２のブロック
変数をリターンされた機能:
先祖ブロックのブロックＩＤ
そのようなブロックが見つからなければ PA_NULL_BLOCK_IDがリターンされるであろう。
機能のプロトタイプ:
0003943614.tif 000030
PA_GetBlockRelation
PA_GetBlockRelationは、第２のブロックに関して指定された第１のブロックの関係をリターンする。
パラメータ:
BlockId1         (入力)
第１のブロック
BlockId2         (入力)
第２のブロック
変数をリターンされた機能:
関係の形式、PA_REL_...の定義を参照されたい。
機能のプロトタイプ:
0003943614.tif 000031
PA_GetDepthOfBlock
PA_GetDepthOfBlockは、ブロックの深さをリターンする。
パラメータ:
BlockId          (入力)
現在のブロック
変数をリターンされた機能:
ブロックの深さである。ページが空白のページ（例えば、ルートブロックがPA_NULL_BLOCK_ID）であれば、０がリターンされるであろう。
機能のプロトタイプ:
0003943614.tif 000032
PA_GetFirstChildBlock
PA_GetFirstChildBlockは、指定された形式の第１の子ブロックをリターンする。
パラメータ:
0003943614.tif 000033
選択されるべきブロックの形式
ブロック形式のためのPA_BLOCK_...の定義を参照
形式がPA_BLOCK_ANYTYPEならば、第１のPA_BLOCK_TEXT子ブロックに優先権が与えられる。
変数をリターンされる機能:
選択された子ブロックのPA_BLOCK_ID
指定された形式のブロックが見つからない場合は、PA_NULL_BLOCK_IDがリターンされるであろう。
機能のプロトタイプ:
0003943614.tif 000034
PA_GetLastChildBlock
PA_GetLastChildBlockは、指定された形式の最後の子ブロックをリターンする。
パラメータ:
BlockId          (入力)
現在のブロック
BlockType        (入力)
選択すべきブロックの形式
ブロック形式のためのPA_BLOCK_...の定義を参照
形式がPA_BLOCK_ANYTYPEであれば、最後のPA_BLOCK_TEXTの子ブロックに優先権が与えられる。
変数をリターンされた機能:
選択された子ブロックのPA_BLOCK_ID
指定された形式のブロックが見つからない場合は、PA_NULL_BLOCK_IDがリターンされるであろう。
機能のプロトタイプ:
0003943614.tif 000035
PA_GetNextChildBlock
PA_GetNextChildBlockは、現在の子ブロックにおける指定された形式の次の子ブロックをリターンする。
注釈、次の子ブロックは、現在の子ブロックと同じレベル上にある。
パラメータ:
BlockId          (入力)
現在の子ブロック
BlockType        (入力)
選択されるべきブロックの形式
ブロック形式のためのPA_BLOCK_...の定義を参照
変数をリターンされた機能:
選択された子ブロックのPA_BLOCK_ID
指定された形式のブロックが見つからない場合は、PA_NULL_BLOCK_IDがリターンされるであろう。
機能のプロトタイプ:
0003943614.tif 000036
PA_GetNumberOfChildrenBlocks
PA_GetNumberOfChildrenBlocksは、指定されたブロック形式の隣接する子ブロックの数量をリターンする。
パラメータ:
BlockId          (入力)
現在のブロック
BlockType        (入力)
選択されるべきブロックの形式
ブロック形式のためのPA_BLOCK_...の定義を参照されたい。
変数をリターンされた機能:
子ブロックの数量
機能のプロトタイプ:
0003943614.tif 000037
PA_GetNumberOfDescendantBlocks
PA_GetNumberOfDescendantBlocksは、指定されたブロック形式の子孫ブロックの数量とブロックのレベルとをリターンする。
注釈、PA_BLOCK_TEXTブロック（例えば、PA_BLOCK_TEXTLINEブロック）の子ブロックは、カウントされない。
パラメータ:
BlockId          (入力)
現在のブロック
BlockType        (入力)
選択されるべきブロックの形式
ブロック形式のためのPA_BLOCK_...の定義を参照されたい。
Levels           (入力)
検索されるべき子孫のレベル
変数をリターンされた機能:
子孫ブロックの数量
機能のプロトタイプ:
0003943614.tif 000038
PA_GetParentBlock
PA_GetParentBlockは、ブロックの親ブロックをリターンする。
パラメータ:
BlockId          (入力)
現在のブロック
変数をリターンされた機能:
親ブロックのブロックＩＤ
現在のブロックがルートブロックの場合は、PA_NULL_BLOCK_IDがリターンされるであろう。
機能のプロトタイプ:
0003943614.tif 000039
PA_GetPreviousChildBlock
PA_GetPreviousChildBlockは、現在の子ブロックにおいて指定された形式の前の子ブロックをリターンする。
注釈、前の子ブロックは、現在の子ブロックと同じレベル上にある。
パラメータ:
BlockId          (入力)
現在の子ブロック
BlockType        (入力)
選択されるべきブロックの形式
ブロック形式のためのPA_BLOCK_...の定義を参照
変数をリターンされた機能:
選択された子ブロックのPA_BLOCK_ID
指定された形式のブロックが見つからない場合は、PA_NULL_BLOCK_IDがリターンされるであろう。
機能のプロトタイプ:
0003943614.tif 000040
（テキストブロック機能）
PA_BLOCK_TEXTブロックの機能に関する詳細説明を述べる。PA_BLOCK_TEXTブロックは、小さいテキストラインブロックから成る。PA_BLOCK_TEXTブロックは、ＯＣＲに関連するアプリケーションにおいて重要である。
PA_ExtractTextLineImageByte2D
PA_ExtractTextLineImageByte2Dは、テキストラインブロックのビットマップイメージを2-Dバイト／ピクセルの配列に抽出する。2-Dバイト／ピクセルの配列は、ポインタの配列として定義される。それぞれのポインタは、１列のイメージを表わすunsigned charの配列を示す。使用者は、必要とされる空間の割り付けと開放に責任がある。目的とするビットマップの必要とされる最小の大きさは、PA_GetTextLineBoundary機能をコールすることにより決定される。
パラメータ:
BlockId          (入力)
抽出されるべきブロックである。
SourceImageInfoPtr (入力)
イメージと他のイメージの大きさの情報に対するポインタようなデータを有する目的とする構造を示す。
DestImagePtr2    (出力)
抽出されたイメージのための２次元配列である。
変数をリターンした機能:
PA_SUCCESS  (0)
＞ 0     何かエラーが起きたならば
機能のプロトタイプ:
0003943614.tif 000041
PA_GetFirstTextLine
PA_GetFirstTextLineは、テキストブロックの第１のテキストラインブロックをリターンする。
パラメータ:
BlockId          (入力)
テキストブロック
変数をリターンした機能:
選択されたテキストラインブロックのPA_BLOCK_ID
入力されたブロックがPA_BLOCK_NON_TEXTブロックであれば、PA_NULL_BLOCK_IDがリターンされるであろう。
機能のプロトタイプ:
0003943614.tif 000042
PA_GetLastTextLine
PA_GetLastTextLineは、テキストブロックの最後のテキストラインをリターンする。
パラメータ:
BlockId          (入力)
テキストブロック
変数をリターンした機能:
選択されたテキストラインブロックのPA_BLOCK_ID
入力されたブロックが、PA_BLOCK_NON_TEXTブロックであればPA_NULL_BLOCK_IDがリターンされるであろう。
機能のプロトタイプ:
0003943614.tif 000043
PA_GetNextTextLine
PA_GetNextTextLineは、現在のテキストラインブロックの次のテキストラインブロックをリターンする。
注釈、次のテキストラインブロックは、現在のテキストラインブロックと同じレベル上にある。
パラメータ:
BlockId          (入力)
テキストラインブロック
変数をリターンした機能:
選択されたテキストラインブロックのPA_BLOCK_ID
ブロックが見つからなければ、PA_NULL_BLOCK_IDがリターンされるであろう。
機能のプロトタイプ:
0003943614.tif 000044
PA_GetNumberOfTextLinesInBlock
PA_GetNumberOfTextLinesInBlockは、テキストブロックにおけるテキストラインブロックの数量をリターンする。
パラメータ:
BlockId          (入力)
テキストブロック
変数をリターンした機能:
テキストラインブロック
入力されたブロックがPA_BLOCK_NON_TEXTブロックであれば０がリターンされるであろう。
機能のプロトタイプ:
0003943614.tif 000045
PA_GetPreviousTextLine
PA_GetPreviousTextLineは、現在のテキストラインブロックの前のテキストラインブロックをリターンする。
注釈、前のテキストラインブロックは、現在のテキストラインブロックと同じレベル上にある。
パラメータ:
BlockId          (入力)
現在のテキストラインブロック
変数をリターンした機能:
選択されたテキストラインブロックのPA_BLOCK_ID
ブロックが見つからなければ、PA_NULL_BLOCK_IDがリターンされるであろう。
機能のプロトタイプ:
0003943614.tif 000046
PA_GetTextLineBoundary
PA_GetTextBoundaryは、テキストラインブロックの境界線の情報をリターンする。
パラメータ:
BlockId          (入力)
テキストラインブロック
BoundaryPtr      (出力)
境界線の構造（のアドレス）
変数をリターンした機能:
PA_SUCCESS  (0)
＞0      何かエラーが起こったかどうか
機能のプロトタイプ:
0003943614.tif 000047
（表機能）
PA_GetFirstTableCell
PA_GetFirstTableCellは、表ブロックの指定された形式における第１の表のセルブロックをリターンする。
パラメータ:
BlockId          (入力)
表ブロック
BlockType        (入力)
選択されるべきブロックの形式
ブロック形式のためのPA_BLOCK_...の定義を参照
変数をリターンされた機能:
選択された表のセルブロックのPA_BLOCK_ID
指定された形式のブロックが見つからない場合は、PA_NULL_BLOCK_IDがリターンされるであろう。
機能のプロトタイプ:
0003943614.tif 000048
PA_GetIthTableCell
PA_GetIthTableCellは、テキストブロック内の指定されたセルの位置における表のセルブロックをリターンする。
パラメータ:
BlockId          (入力)
表ブロック.
Order            (入力)
表ブロック内のセルの位置（１次元）
変数をリターンした機能:
表のセルブロックのPA_BLOCK_ID
PA_NULL_BLOCK_IDは、その他が範囲外であればリターンされるであろう。機能のプロトタイプ:
0003943614.tif 000049
PA_GetLastTableCell
PA_GetLastTableCellは、表ブロックの指定された形式における最後の表のセルブロックをリターンする。
パラメータ:
BlockId          (入力)
表ブロック
BlockType        (入力)
選択されるべきブロックの形式
ブロック形式のためのPA_BLOCK_...の定義を参照
変数をリターンされた機能:
選択された表のセルブロックのPA_BLOCK_ID
指定された形式のブロックが見つからない場合は、PA_NULL_BLOCK_IDがリターンされるであろう。
機能のプロトタイプ:
0003943614.tif 000050
PA_GetNextTableCell
PA_GetNextTableCellは、現在の表のセルブロックの指定された形式における次のセルブロックをリターンする。
注釈、次の表のセルブロックは、現在の表のセルブロックと同じレベル上にある。
パラメータ:
BlockId          (入力)
現在の表のセルブロック
BlockType        (入力)
選択されるべきブロックの形式
ブロック形式のためのPA_BLOCK_...の定義を参照
変数をリターンされた機能:
選択された表のセルブロックのPA_BLOCK_ID
指定された形式のブロックが見つからない場合は、PA_NULL_BLOCK_IDがリターンされるであろう。
機能のプロトタイプ:
0003943614.tif 000051
PA_GetNumberOfCellsInTable
PA_GetNumberOfCellsInTableは、表ブロックの指定された形式の表のセルブロックの数量をリターンする。
パラメータ:
BlockId          (入力)
表ブロック
BlockType        (入力)
選択されるべきブロックの形式
ブロック形式のためのPA_BLOCK_...の定義を参照
変数をリターンされた機能:
子ブロックの数量
入力されたブロックがPA_BLOCK_TABLEブロックであれば、０がリターンされるであろう。
機能のプロトタイプ:
0003943614.tif 000052
PA_GetPreviousTableCell
PA_GetPreviousTableCellは、現在の表のセルブロックの指定された形式の前のセルブロックをリターンする。
注釈、前の表のセルブロックは、現在の表のセルブロックと同じレベル上にある。
パラメータ:
BlockId          (入力)
The current table cell block.
BlockType        (入力)
選択されるべきブロックの形式
ブロック形式のためのPA_BLOCK_...の定義を参照
変数をリターンされた機能:
選択された表のセルブロックのPA_BLOCK_ID
指定された形式のブロックが見つからない場合は、PA_NULL_BLOCK_IDがリターンされるであろう。
機能のプロトタイプ:
0003943614.tif 000053
（ライン機能）
以下の機能がPA_BLOCK_LINEブロックに与えられる。
PA_GetLineInfo
PA_GetLineInfoは、ライン形式、ライン属性、ラインの傾斜角等のようなライン情報の構造をリターンする。
パラメータ:
BlockId          (入力)
ラインブロック
LineInfoPtr      (出力)
ライン情報の構造（のアドレス）
詳細はPA_LINE_INFOを参照されたい。
入力されたブロックがPA_BLOCK_LINEブロックでなければ、エラーとしてPA_ERR_BLOCK_NOT_LINEがリターンされるであろう。傾斜角が０であれば、そのラインは、水平方向または垂直方向への直線であることを意味する（ラインの形式による）。
変数をリターンした機能:
PA_SUCCESS
PA_ERR_BLOCK_NOT_LINE
機能のプロトタイプ:
0003943614.tif 000054
（図形機能）
以下の機能は、PA_BLOCK_PICTブロックに与えられる。
PA_GetPictureInfo
PA_GetPictureInfoは、図形の形式のような図形情報の構造をリターンする。パラメータ:
BlockId          (入力)
図形ブロック
PictInfoPtr      (出力)
図形情報の構造（のアドレス）
詳細は、PA_PICT_INFOを参照されたい。
入力されたブロックがPA_BLOCK_PICTブロックでなければ、エラーとしてPA_ERR_BLOCK_NOT_PICTがリターンされるであろう。
変数をリターンした機能:
PA_SUCCESS
PA_ERR_BLOCK_NOT_PICT
機能のプロトタイプ:
0003943614.tif 000055
【００７１】
【発明の効果】
以上説明したように、本実施形態によれば、ブロック選択プログラムのＡＰＩ機能ライブラリを用いることによりページ解析を行なうことができ、更にＡＰＩデータファイルを用いることによりその解析結果を所望のフォーマットに変更できるので、前記ブロック選択プログラムの機能を用いて文書ページを解析するアプリケーションプログラムを生成できる。
【図面の簡単な説明】
【図１】従来例としての代表文書のページを示す図である。
【図２】従来例としての階層ツリー構造を示す図である。
【図３】従来例としての階層ツリー構造に基づいて生成された文書ページを示す図である。
【図４】本発明を適用するコンピュータの構成図である。
【図５】本発明の一実施形態としてのコンピュータ１０の内部構成を示すブロック図である。
【図６Ａ】本発明の一実施形態としてのＡＰＩ機能ライブラリを示す図であ
【図６Ｂ】本発明の一実施形態としてのＡＰＩ機能ライブラリを示す図であ
【図７】本発明の一実施形態としてのＡＰＩによるアプリケーションプログラムの生成方法を示すフローチャートである。
【符号の説明】
１０  コンピュータ
１１  コンピュータディスク
１２  ディスプレイスクリーン
１３  キーボード
１４  ポインティング装置
１６  スキャナ
１８  プリンタ
２０  中央処理装置（ＣＰＵ）
２１  コンピュータバス
２２  スキャナインタフェース
２３  プリンタインタフェース
２４  ネットワークインタフェース
２６  ファクシミリ／モデムインタフェース
２７  ディスプレイインタフェース
２８  キーボードインタフェース
２９  マウスインタフェース
３０  メインメモリ
１０１  文書ページ
１０２  タイトル
１０４  水平線
１０５〜１０７  テキスト領域
１０８  ハーフトーン図形領域
１１０  表
１１６  枠領域
１２１  ハーフトーン図形領域
１２６  見出しデータ
１３７  見出しデータ
１３２，１３５  図形領域
２００  階層ツリー構造
２０１  親またはルートノード
２０２，２０４，２０５，２０９  ノード
２１１  ノード
３０１  文書ページのブロックテンプレート
３０２，３０４，３０５，３０９    テキストブロック
Ｔ１〜Ｔ１４  テキスト１〜テキスト１４
【図１】
0003943614.tif 000056
【図２】
0003943614.tif 000057
【図３】
0003943614.tif 000058
【図４】
0003943614.tif 000059
【図５】
0003943614.tif 000060
【図６Ａ】
0003943614.tif 000061
【図６Ｂ】
0003943614.tif 000062
【図７】
0003943614.tif 000063