(57)【要約】【課題】    空白文字コードが含まれていない文書ファイルから抽出した文字列に対して、各文字間に空白文字を挿入するかどうか判断し、挿入するべきと判断した文字間に空白文字コードを挿入する文書処理装置および文書処理方法を提供する。【解決手段】  均等割付された文字列であるか、見出し文字列であるか、和文・欧文などの文字種判断などの結果に基づいて、空白文字を挿入するか否かの判断に用いる条件を変更するようにしたので、より正確に空白文字を挿入することができる。空白文字を挿入することにより、フレーズ検索や完全一致単語検索などが行えるようになる。【選択図】    図２
2008171400.tif 000002
【特許請求の範囲】
【請求項１】
レイアウト情報を含む文書から文字列を抽出する文字抽出手段と、
空白文字の文字幅情報を取得する文字幅取得手段と、
前記文字抽出手段で抽出した文字列と前記レイアウト情報とに基づいて、各文字間のスペーシング量を取得するスペーシング量取得手段と、
前記スペーシング量取得手段で取得した前記各文字間のスペーシング量と前記文字幅取得手段で取得した空白文字の文字幅情報とに基づいて、前記各文字間に空白文字が含まれるべきか判定し、空白文字が含まれるべきであると判定された文字間に空白文字コードを挿入する挿入手段と、
を有することを特徴とする文書処理装置。
【請求項２】
前記挿入手段は、前記スペーシング量取得手段で取得した前記各文字間のスペーシング量と前記文字幅取得手段で取得した空白文字の文字幅情報とに基づいて、前記各文字間に空白文字またはタブが含まれるべきか判定し、空白文字またはタブが含まれるべきであると判定された文字間に空白文字コードまたはタブコードを挿入することを特徴とする請求項１に記載の文書処理装置。
【請求項３】
更に、前記抽出された文字列が、均等割付されているか否かを判断する均等割付判断手段を有し、
前記挿入手段は、均等割付されている文字列か否かに基づいて、前記空白文字コードを挿入するか否かの判断に用いる条件を変更することを特徴とする請求項１に記載の文書処理装置。
【請求項４】
更に、前記抽出された文字列が、見出しであるか否かを判断する見出し判断手段を有し、
前記挿入手段は、見出しである文字列か否かに基づいて、前記空白文字コードを挿入するか否かの判断に用いる条件を変更することを特徴とする請求項１に記載の文書処理装置。
【請求項５】
前記挿入手段は、前記各文字間の直前の文字が欧文であるか和文であるかに応じて、前記空白文字コードを挿入するか否かの判断に用いる条件を変更することを特徴とする請求項１に記載の文書処理装置。
【請求項６】
前記空白文字コードが挿入された文字列に対して、完全一致単語検索及び／又はフレーズ検索を行なう検索手段を、更に有することを特徴とする請求項１に記載の文書処理装置。
【請求項７】
前記文字幅取得手段は、前記空白文字の文字幅情報を、前記文書内に含まれているフォントの空白文字の文字幅情報、あるいは文書処理装置に格納されているフォントの空白文字の文字幅情報、あるいは外部デバイスに格納されているフォントの空白文字の文字幅情報から取得することを特徴とする請求項１に記載の文書処理装置。
【請求項８】
前記文字幅取得手段は、前記空白文字の文字幅情報をフォントから取得できなかった場合、直前の文字の文字幅に基づいて前記空白文字の文字幅情報を取得することを特徴とする請求項７に記載の文書処理装置。
【請求項９】
レイアウト情報を含む文書から文字列を抽出する文字抽出ステップと、
空白文字の文字幅情報を取得する文字幅取得ステップと、
前記文字抽出ステップで抽出した文字列と前記レイアウト情報とに基づいて、各文字間のスペーシング量を取得するスペーシング量取得ステップと、
前記スペーシング量取得ステップで取得した前記各文字間のスペーシング量と前記文字幅取得手段で取得した空白文字の文字幅情報とに基づいて、前記各文字間に空白文字が含まれるべきか判定し、空白文字が含まれるべきであると判定された文字間に空白文字コードを挿入する挿入ステップと、
を有することを特徴とする文書処理方法。
【請求項１０】
レイアウト情報を含む文書から文字列を抽出する文字抽出ステップと、
空白文字の文字幅情報を取得する文字幅取得ステップと、
前記文字抽出ステップで抽出した文字列と前記レイアウト情報とに基づいて、各文字間のスペーシング量を取得するスペーシング量取得ステップと、
前記スペーシング量取得ステップで取得した前記各文字間のスペーシング量と前記文字幅取得手段で取得した空白文字の文字幅情報とに基づいて、前記各文字間に空白文字が含まれるべきか判定し、空白文字が含まれるべきであると判定された文字間に空白文字コードを挿入する挿入ステップと、
の各ステップをコンピュータに実行させるためのプログラム。
【請求項１１】
レイアウト情報を含む文書から文字列を抽出する文字抽出ステップと、
空白文字の文字幅情報を取得する文字幅取得ステップと、
前記文字抽出ステップで抽出した文字列と前記レイアウト情報とに基づいて、各文字間のスペーシング量を取得するスペーシング量取得ステップと、
前記スペーシング量取得ステップで取得した前記各文字間のスペーシング量と前記文字幅取得手段で取得した空白文字の文字幅情報とに基づいて、前記各文字間に空白文字が含まれるべきか判定し、空白文字が含まれるべきであると判定された文字間に空白文字コードを挿入する挿入ステップと、
の各ステップをコンピュータに実行させるためのプログラムを格納したコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は文書処理方法及び文書処理装置、特に、文書レイアウト情報を保持した文書から文字列を抽出するための文書処理方法及び文書処理装置に関するものである。
【背景技術】
【０００２】
従来、文書における文字列の検索は、文書内に含まれる文字列を抽出し、その中に検索キーが含まれるかどうかを判定することによって行っている。検索手法としては、抽出された文字の中に検索キーが一部でも含まれるかどうかによって判定する方法（以降、通常検索と呼ぶ）が一般的である。より限定的な検索手法としては、単語が完全に含まれるかどうかで判定する完全一致単語検索、空白を含めた複数の単語などからなるフレーズを検索キーとするフレーズ検索がある。
【０００３】
たとえば、入力された検索キーが、"the"であり、文書から抽出される文字列が、"This theory was confirmed."であった場合、通常検索では"theory"に含まれる"the"がヒットするが、完全一致単語検索ではヒットしない。一方、検索キーとして"theory"を与えた時には、完全一致単語検索で"theory"がヒットする。これは、単語の取り出しに空白を利用するためである。
【０００４】
同様に、入力された検索キーが、"thistheory"であり、文書から抽出される文字列が、"This theory was confirmed."であった場合、フレーズ検索ではヒットしない。検索キーとして空白を正しく入れた"this theory"を与えた時に、ヒットする。
【０００５】
従って、これらの完全一致単語検索やフレーズ検索では、抽出された文字に空白が正しく入っている必要がある。
【０００６】
一方、文字のレイアウトを保持する文書において、空白文字を文字の描画位置をずらすことで表現することがある。例えば、PDF(Portable Document Format)やPDL(Page Description Language)などでそのような表現がなされる場合がある。例えば、ＰＤＦを作成するソフトウェアの１つに、プリンタドライバ型のソフトウェアがある。これは、元の原稿を作成したワープロアプリケーションやドローアプリケーションにおいて、印刷指示を行う際、通常のプリンタドライバの代わりに、このＰＤＦ作成用ドライバを選択すると、印刷コマンドからＰＤＦファイルを作成するソフトウェアである。このとき、元の原稿を作成したアプリケーションが、空白文字を含む文字列をどのような印刷コマンドをＰＤＦ作成ドライバに渡すかは、そのアプリケーションに依存する。すなわち、そのアプリケーションが印刷時に空白文字コードを出力しないようにしている場合、ＰＤＦ作成ドライバで作成されるＰＤＦファイルには空白文字コードが含まれずに、文字の描画位置で空白を表現することがある。そのようなPDF文書やPDL文書から文字を抽出しても空白文字の文字コードが含まれず、完全一致単語検索、フレーズ検索においてヒットしないという問題がある。
【０００７】
例えば、元原稿が、"this is a pen"の文字列を含み、この原稿をPDF文書に変換する。この変換されたPDF文書では、スペースが描画位置をずらした記述を用いて、[(This)-833.4(is)-833.4(a)-833.4(pen.)]TJ、という記述に変換されたものとする。
【０００８】
このとき、そのPDF文書から文字コードに基づいて文字を抽出すると、"thisisapen."となる。これに対して、検索キーとして"a pen"が入力された場合、文書から抽出される文字には空白の文字コードが含まれないので、フレーズ検索ではヒットしない。また、完全一致単語検索のときもヒットしない。
【０００９】
また、文字毎に描画位置が細かく指定された記述に変換される場合もある。例えば、元原稿で均等割付された文字列を変換したとき、文字毎に描画位置が記述されることがある。例えば、"[(T)-833.4(h)-833.4(i)-833.4(s)-848.4(i)-833.4(s)-848.4(a)-848.5(p)-833.4(e)-833.4(n.)]TJ"という記述に変換される場合もある。このとき、そのＰＤＦ文書から文字コードのみを抽出すると、"thisisapen."となってしまい、フレーズ検索や完全一致単語検索ではヒットしないことになる。
【００１０】
一方、紙文書をスキャンして取り込んだイメージに対する文字認識結果に空白を挿入する技術がある。例えば、特許文献１では、イメージ内の文字領域を切り出し、文字幅の分布から空白文字幅候補を出す。そして、それぞれの候補によって文字間隔を空白としたときの単語長の分布が、あらかじめ持っている単語長分布に近くなるような空白文字幅を選択して、空白をいれる。
【特許文献１】特開平５−６７２３７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかしながら、特許文献１のような方法は、スキャンイメージなどを処理対象としたものであり、文字コードで記述されている文書を処理対象とするものではない。また、特許文献１のような方法では、空白文字幅を正確に取得できない（空白文字幅を間違う）ことがあり、空白判定精度が落ちてしまう。また、文字認識処理を行った際に文字画像を誤認識して、認識結果の文字コードが間違っている場合がある。そのため、完全一致単語検索、フレーズ検索においてヒットしないことが起こりやすいという問題がある。
【００１２】
なお、上記説明では、問題点を明瞭にするため、完全一致単語検索、フレーズ検索における従来技術の問題を示したが、本発明は検索処理の前処理に限定されるものではない。本発明は、文書における空白文字やタブを調整することで、空白文字やタブを正確に判定できるようにするための技術である。
【００１３】
本発明は、前記従来の問題点に鑑み、正確に空白文字幅を検出して、均等割り付け、見出しなどレイアウトや文書構造の解析を入れる。これにより、正確に空白文字の有無の判定を行なう文書処理方法及び文書処理装置を提供する。
【課題を解決するための手段】
【００１４】
上記の問題点を解決するため、例えば、本発明の文書処理装置は、レイアウト情報を含む文書から文字列を抽出する文字抽出手段と、空白文字の文字幅情報を取得する文字幅取得手段と、前記文字抽出手段で抽出した文字列と前記レイアウト情報とに基づいて、各文字間のスペーシング量を取得するスペーシング量取得手段と、前記スペーシング量取得手段で取得した前記各文字間のスペーシング量と前記文字幅取得手段で取得した空白文字の文字幅情報とに基づいて、前記各文字間に空白文字が含まれるべきか判定し、空白文字が含まれるべきであると判定された文字間に空白文字コードを挿入する挿入手段と、を有することを特徴とする。
【００１５】
また、本発明の文書処理方法は、レイアウト情報を含む文書から文字列を抽出する文字抽出ステップと、空白文字の文字幅情報を取得する文字幅取得ステップと、前記文字抽出ステップで抽出した文字列と前記レイアウト情報とに基づいて、各文字間のスペーシング量を取得するスペーシング量取得ステップと、前記スペーシング量取得ステップで取得した前記各文字間のスペーシング量と前記文字幅取得手段で取得した空白文字の文字幅情報とに基づいて、前記各文字間に空白文字が含まれるべきか判定し、空白文字が含まれるべきであると判定された文字間に空白文字コードを挿入する挿入ステップと、を有することを特徴とする。
【００１６】
また、本発明のプログラムは、レイアウト情報を含む文書から文字列を抽出する文字抽出ステップと、空白文字の文字幅情報を取得する文字幅取得ステップと、前記文字抽出ステップで抽出した文字列と前記レイアウト情報とに基づいて、各文字間のスペーシング量を取得するスペーシング量取得ステップと、前記スペーシング量取得ステップで取得した前記各文字間のスペーシング量と前記文字幅取得手段で取得した空白文字の文字幅情報とに基づいて、前記各文字間に空白文字が含まれるべきか判定し、空白文字が含まれるべきであると判定された文字間に空白文字コードを挿入する挿入ステップと、の各ステップをコンピュータに実行させるためのプログラムである。
【００１７】
また、本発明の記憶媒体は、レイアウト情報を含む文書から文字列を抽出する文字抽出ステップと、空白文字の文字幅情報を取得する文字幅取得ステップと、前記文字抽出ステップで抽出した文字列と前記レイアウト情報とに基づいて、各文字間のスペーシング量を取得するスペーシング量取得ステップと、前記スペーシング量取得ステップで取得した前記各文字間のスペーシング量と前記文字幅取得手段で取得した空白文字の文字幅情報とに基づいて、前記各文字間に空白文字が含まれるべきか判定し、空白文字が含まれるべきであると判定された文字間に空白文字コードを挿入する挿入ステップと、の各ステップをコンピュータに実行させるためのプログラムを格納したコンピュータ読み取り可能な記憶媒体である。
【発明の効果】
【００１８】
本発明によれば、空白文字幅をドキュメント内、あるいはシステム内、あるいはデバイス内蔵フォントから取得することにより、正確に空白文字幅を検出することが可能となる。また、和文・欧文の判断や、均等割り付け、見出しなどレイアウトなどの文書構造の解析に基づいて、判断条件を変えることにより、正確に空白文字を挿入するか否かの判定を可能とする。
【００１９】
このことにより、文字検索のフレーズ検索・完全一致単語検索でヒットできなかった文字をヒットさせることが可能となる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明の実施形態について、図面を参照して詳細に説明する。
【００２１】
＜本実施形態の文書処理装置の構成例＞
図１Ａは、本実施形態の文書処理装置の構成例を示すブロック図である。
【００２２】
１は演算制御用のＣＰＵである。２はデータ及び指示入力のためのキーボードである。３は文書画像を表示するディスプレイである。４は文書を格納するハードディスクである。５は装置を制御するプログラムや必要な情報をあらかじめ記憶するＲＯＭである。６は様々なワークエリアとして利用されるＲＡＭである。７は、文書構造を解析する解析手段に相当する、空白・タブ判定のために文書のレイアウトを判定する文書レイアウト判定部である。８は文書から文字を抽出する際に空白・タブを判定して挿入する空白判定部である。９は各種データを転送するデータバスである。
【００２３】
尚、文書レイアウト判定部７や空白判定部８は、ＲＯＭ５に格納されたコンピュータプログラムをＣＰＵ１が実行することで実現される。すなわち、コンピュータプログラムは、コンピュータを、文書レイアウト判定部７や空白判定部８として機能させることができる。なお、コンピュータプログラムが記憶されるコンピュータ読み取り可能な記憶媒体は、ＲＯＭ５に限るものではなく、例えばハードディスク４であってもよい。
【００２４】
図１Ｂは、文書レイアウト判定部７や空白判定部８の処理を含む本実施形態の全体フローチャートである。
【００２５】
ステップS200は、以下の図２に示す本発明に係る文書処理を行なうステップである。ステップS200は、文書レイアウト判定部７の処理に相当する文書レイアウト処理S203, S204と、空白判定部８の処理に相当する空白判定S207-S209とを含んでいる。かかるステップS203, S204, S207-S209は、図２の同じステップに対応している（詳細は、図２以降で示す）。
【００２６】
ステップS100では、ステップS200で空白やタブの調整（挿入処理）がされた文書に対して、例えば、完全一致単語検索、フレーズ検索を含む文字列検索処理などが行われる。
【００２７】
図１Ｃは、本実施形態の文書処理を実行するためのRAM6の記憶領域の構成例を示す図である。なお、図１Ｃには、本実施形態の文書処理に直接関連しないデータや、図２の各ステップ内での処理で使用される変数などは省略している。
【００２８】
図１Ｃで、60aは、本実施形態での文書処理の対象となる、例えばPDFのTJオペレータ形式の文書である。60bは、上記文書で使用されるフォントを示すフォント情報である。フォント情報60bには、フォントのコードページ（国別情報）も含まれる。フォント自体は、ROM5やハードディスク4、あるいは図示しないCDやメモリチップに格納されてよい。
【００２９】
61, 62,…は、抽出された各行を表わす行番号である。各行61, 62,…に対応して、夫々以下のデータ、フラグなどが記憶される領域が確保される。ここでは、行61の内容について説明する。以下の行も同様である。
【００３０】
61aは、ステップS203で判断された均等割り付けか否かを示すフラグである。61bは、ステップS204で判断された見出しか否かを示すフラグである。61cは、ステップS207-S209で処理の対象とする文字間位置を示すポインタである。61dは、ステップS207で抽出された空白文字幅を記憶する領域である。61eは、ステップS208で抽出された文字スペーシング量Δ／Δpreを記憶する領域である。61fは、ステップS209の処理結果で、空白を挿入するか否かのフラグである。
【００３１】
かかるRAM6の領域を使用しながら、ROM5に格納されたプログラム、あるいはハードディスク4に格納されたプログラムをRAM6にロードして、図２以下の処理がCPU1により実行される。
【００３２】
＜本実施形態の文書処理装置の動作例＞
図２は、本実施形態の文書処理装置における文書処理S200の手順例を示すフローチャートである。
【００３３】
以下、文書レイアウト情報を持つ文書、例えばPDF文書から文字を抽出する際に、横書き文章から文字を抽出後に空白判定を行って適切に空白を挿入して抽出結果とする処理に関して詳細に説明する。なお、縦書き文章であっても同様に行える。
【００３４】
まず初めに、ステップS201で文書内の文字をすべて抽出する。
【００３５】
例えば、PDF文書で"This is a pen."を表示するためには、(This is a pen.) Tj のように表現されているので、Tjオペレータの文字を順に抽出していけば文書内の文字を抽出することができる。これは、空白文字コードを含んでいる例である。文字を抽出すると、通常の文字と空白文字とが抽出されるので、"This is a pen."となる。
【００３６】
次に、本実施形態で対応しようとしている空白文字コードを含まない例を説明する。
【００３７】
PDFのTJオペレータという別の表現方法では、個々の文字と文字との間の空間（文字スペーシング）を指定することができる。
【００３８】
TJを用いて、"This is a pen."について、空白文字の代わりに文字スペーシング量で記述すると、[(This)-833.4(is)-833.4(a)-833.5(pen.)] TJ のように表現され、次の文字を描画する位置を示す文字スペーシング量が記載されている。この例では、空白文字の代わりに使用されているが、空白文字の有無にかかわらず文字のレイアウトに従って文字スペーシング量が指定される場合もある。このように空白文字の代わりに文字スペーシング量が記載されている場合は、空白文字コードが記載されていないので、文字コードを抽出すると"Thisisapen."となって、空白文字が含まれない。すなわち完全一致単語検索、フレーズ検索ではヒットしないという問題がある。
【００３９】
なお、Tjオペレータが使われるか、TJオペレータが使われるかは、PDFを作成するソフトウェアもしくは元々の原稿を作成したソフトウェアの出力によって異なる。また、ソフトウェアによっては、TJオペレータを使う場合であっても、空白文字が含まれている場合もありうる。例えば、ＰＤＦを作成するソフトウェアの１つに、プリンタドライバ型のソフトウェアがある。これは、元の原稿を作成したワープロアプリケーションやドローアプリケーションにおいて、印刷指示を行う際に、通常のプリンタドライバの代わりにＰＤＦ作成用ドライバを選択すると、印刷コマンドからＰＤＦファイルを作成するソフトウェアである。このとき、元の原稿を作成したアプリケーションが、空白文字を含む文字列をどのような印刷コマンドで出力するかは、そのアプリケーションに依存する。そのため、結果として作成されるＰＤＦファイルには空白文字が含まれていたり含まれていなかったりする。
【００４０】
このようにステップS201では、文字が含まれるTjやTJなどのオペレータ内の文字を文書内から全て抽出する。
【００４１】
ステップS202以降で、空白・タブ判定及び挿入処理を行う。すなわち、ステップS201で抽出した文字の間に挿入すべき空白文字やタブがないかどうかを判定して、挿入すべきと判断した場合は自動的に空白文字コードやタブコードを挿入する。
【００４２】
ステップS202では、ステップS201で文書内から抽出された文字に空白以外の文字が３文字以上あるかどうか判定する。存在すればステップS203に進む。ない場合は、空白判定処理をスキップしてステップS201で抽出した文字を出力して終了する。空白・タブを判定するのに必要な文字数に達していないためである。なお、ここで、Tjオペレータの部分から抽出した文字列に関しては、空白文字が挿入されている状態と見なして、当該抽出した文字列を出力するようにしてもよい。更に、TJオペレータで空白文字コードが含まれていない場合にステップS203に進み、TJオペレータの部分から抽出した文字列に空白文字コードが含まれていれば、空白文字が挿入されている状態と見なして、当該抽出した文字列をそのまま出力するようにしてもよい。
【００４３】
ステップS203では、文書内の各行の均等割り付けの判断を行う（かかる処理が均等割付判断の処理に相当する。詳細は、図３及び図４を用いて後述する）。次に、ステップS204で見出しの判定を行う（かかる処理が見出し判断の処理に相当する。詳細は、図５及び図６を用いて後述する）。
【００４４】
ステップS205-S209では、空白・タブの挿入判定を行う。ステップS205で判定対象の文字間（対象文字間）を選択する。最初は、先頭文字と次の文字の間の文字間が対象文字間となる。なお、ステップS210からS205に戻ってきたときは、次の文字間が対象になるので、文字間ごとに順にひとつずつ空白・タブの挿入判定を行っていくことになる。
【００４５】
ステップS206で、対象文字間の前後の文字が空白・タブ以外か判定する。空白文字コードもしくはタブコードであれば、当該対象文字間に空白・タブがあるか否かの空白・タブ判定は行わずに、ステップS210に進む。対象文字間の前後の文字コードが共に空白やタブ以外であればステップS207に進む。ステップS207では、空白文字コードの文字幅情報を取得する（かかる処理が文字幅取得の処理に相当する。詳細は、図７を用いて後述する）。
【００４６】
ステップS208では、対象文字間の文字スペーシング量Δ、ひとつ前の文字間の文字スペーシング量Δpreを取得する（かかる処理がスペーシング量取得の処理に相当する。詳細は、図８及び図９を用いて後述する）。
【００４７】
ステップS209では、和文・英文（欧文）の均等割り付けや見出しの判断を行った後、空白・タブ判定を行う。そして、空白文字を挿入すべきと判定した場合は、必要な空白文字コードやタブコードを挿入する（詳細は、図１０以降を用いて後述する）。
【００４８】
ステップS210では、全ての文字間をチェックしたか判定し、未チェックの文字間があればステップS205に戻って、次の文字間に対して前述の説明と同様に空白・タブ判定を繰り返す。全ての文字間のチェックが終了した場合は、文字抽出結果に空白・タブ判定結果を付与した全ての結果を出力して、本実施形態の文書処理を終了する。
【００４９】
尚、かかる図２の処理によって、正確な空白やタブが文書に挿入されるので、ステップS100の検索処理の精度がよくなる。このように、空白文字やタブが文字コードの代わりに文字描画位置で記述されている文書に対する文字列の検索処理、とりわけ完全一致単語検索、フレーズ検索における問題点が解消することが明らかである。なお、ステップS100の検索処理の詳細説明については省略する。
【００５０】
＜図２の各ステップの詳細手順例＞
以下に、上記図２のフローチャートの各ステップの詳細手順例に従い、各処理を詳細に説明する。
【００５１】
（均等割り付けの判断手順例：S203）
図３は、ステップS203における、文書内の各行の均等割付判断の詳細手順を示すフローチャートである。図４Ａおよび図４Ｂの均等割付判断例を元に説明する。図４Ａは英語文書（欧文）の例、図４Ｂは日本語文書（和文）の例である。
【００５２】
ステップS301で文字ブロックが複数存在するか判定する。ここで、文字ブロックとは文書内に存在する文字の集まりである。すなわち、TjやTJの各オペレータに対して記載されている文字列ごとに、文字ブロックとして判定される。
【００５３】
例えば、PDFで(This is a pen.) Tj と記載されていれば、"This is a pen."がひとつの文字ブロックとなる。また、[(This)-833.4(is)-833.4(a)-833.5(pen.)] TJ と記載されている場合は、"Thisisapen"がひとつの文字ブロックとなる。また、[(This)-833.4(is)] TJ 12Td [(a)-833.5(pen.)] TJ と記載されている場合は、"Thisis"と、"apen"の２つの文字ブロックとなる。
【００５４】
文字ブロックが複数存在しなければ均等割り付けの判断は行わなくて構わないため、均等割り付け処理を終了する。複数存在する時は、ステップS302に進む。
【００５５】
ステップS302では、一番先頭の文字ブロックを開始文字ブロックとする。図４Ａ、図４Ｂの(4-1)が開始文字ブロックを指定したところである。ステップS303で、次の文字ブロックを対象文字ブロックとする。図４Ａ、図４Ｂの例では、(4-2)で示す文字ブロックが対象文字ブロックとなる。
【００５６】
ステップS304では、開始文字ブロックと対象文字ブロックの位置を比較して、同じ行かどうかを判定する。判定手段としては、例えば行が変更されたことを示すT*や縦方向のオフセットを伴うTDオペレータが文字ブロックと次の文字ブロックの間に存在すれば、行が変わっていると判断する。一方、それらのオペレータがなければ同一行と判断する。同じ行であればステップS311へ進む。同じ行でなければステップS305へ進む。図４Ａの欧文例では、「Book」と「Bus」は同一行である。また、図４Ｂの和文例では、「あき」と「あり」は同一行である。
【００５７】
以下、開始文字ブロックと対象文字ブロックとが同じ行である場合の説明をする。ステップS311で、対象文字ブロックの次の文字ブロックがあるか判定する。次の文字ブロックがあればステップS303へ進み、同一行かどうかの判定を行う。次の文字ブロックがない場合は、ステップS312へ進む。
【００５８】
図４Ａの例では、(4-3)で示す次の文字ブロック「Block」があるので、ステップS303へ進む。そして、(4-3)の「Block」を対象文字ブロックとしてステップS304にすすむ。ステップS304では、(4-3)の「Block」は、開始文字ブロック「Book」と同じ行と判断されて、ステップS311に進む。ステップS311では、更に次の文字ブロック(4-4)「This is a pen.」を対象文字ブロックとして、ステップS303に進む。
【００５９】
なお、もし図４Ａの例で文字ブロック(4-3)の後に、文字ブロック(4-4)が無かったとすれば、ステップS311で次の文字ブロックが無いと判断されてステップS312に進む。ステップS312で、対象文字ブロック(4-3)を行の右端の文字ブロックと決定し、開始文字ブロック(4-1)から対象文字ブロック(4-3)までを同じ行として記憶する。対象文字ブロック(4-3)の右端位置を、行の右端位置として記憶する。開始文字ブロックの左端位置を、行の左端位置として記憶する。そして、ステップS313に進み、同じ行と判定された文字ブロック群について、文字スペーシング量（文字間のスペース量）の分布を求めて記憶する。
【００６０】
文字間の文字スペーシング量は、TJオペレータ内で指定されている量、Tcオペレータで指定されている文字スペーシング、TDオペレータ（もしくはTdオペレータ）で指定された横方向のオフセット量、に基づいて計算する。TJやTDオペレータなど文字スペーシング量を指定するようなオペレータが特にない時、文字スペーシング量は０となる。文字スペーシング量が０の場合、文字はフォントの指定に従って配置される。次に、ステップS315に進む。
【００６１】
ステップS304に戻って、開始文字ブロックと対象文字ブロックとが違う行の場合の説明をする。ステップS305で、対象文字ブロックの１つ前の文字ブロックを行の右端の文字ブロックと決定し、開始文字ブロックから対象文字ブロックの１つ前の文字ブロックまでを同じ行と記憶する。また、１つ前の文字ブロックの右端位置に基づいて、行の右端位置も記憶する。開始文字ブロックの左端位置を、行の左端位置として記憶する。図４Ａの文字ブロック(4-4)が対象文字ブロックになったとき、開始文字ブロック「Book」と対象文字ブロック「This is a pen.」の行が異なる行と判断されて、ステップS305へ進む。そして、ステップS305で、図４Ａの(4-5)に示すように、１つ前の文字ブロック(4-3)が右端の文字ブロックと決定し、開始ブロック(4-1)から右端文字ブロック(4-3)までを同じ行に含まれる文字ブロック（「Book」「Bus」「Block」）であると決定する。更に、その行の右端位置・左端位置、文字スペーシング量を記憶する(4-5)。
【００６２】
また、ステップS306で、同じ行と判定された文字ブロック「Book」「Bus」「Block」内の文字スペーシング量の分布を求めて記憶する。
【００６３】
ステップS307で、対象文字ブロック（すなわち、次の行と判定された文字ブロック）を開始文字ブロックとする。図４Ａの例では、文字ブロック(4-4)「This is a pen.」が開始文字ブロックにされる。ステップS308で、開始文字ブロックの次の文字ブロックがあるか判定する。次の文字ブロックがある場合は、ステップS314に進み、同じ行に属する文字ブロックであるかどうかの判定を続ける。一方、次の文字ブロックがない場合は、ステップS309に進む。図４Ａの例では、文字ブロック(4-4)「This is a pen.」の次の文字ブロックが無いので、ステップS309に進む。
【００６４】
次の文字ブロックがあれば、ステップS314で、開始文字ブロックの次の文字ブロックを対象文字ブロックとして、ステップS304に戻る。そして、前述のように同じ行に属する文字ブロックであるかどうかの判定を行う。
【００６５】
ステップS308で、開始文字ブロックの次の文字ブロックがないと判断された場合は、ステップS309に進み、開始文字ブロックを行の右端の文字ブロックと確定する。また、当該文字ブロックの右端位置を、行の右端位置として記憶する。開始文字ブロックの左端位置を、行の左端位置として記憶する。次にステップS310で、開始文字ブロック内の文字スペーシング量の分布を求めて記憶する。図４Ａの例では、(4-6)に示すように、「This is a pen.」の行の右端位置・左端位置と文字スペーシング量とが記憶される。
【００６６】
ここまでの処理で、全ての文字ブロックが行ごとに分類され、各行ごとに右端位置・左端位置および文字スペーシング量が記憶された。
【００６７】
ステップS315-S317では、これらの行を段落（文字領域）ごとにまとめる。これは、同じ段落（文字領域）単位で均等割付するかどうか設定されていることが多いためである。まず、最初の行から順に処理が行われ、ステップS315では、次の行が最初の行と同じ段落であるかどうかが、行間スペースや文字サイズが同じかどうかに基づいて判断される。同じ段落であると判断された場合は、ステップS316において、更に次の行があるかどうか判断され、次の行があれば、ステップS315に戻って同じ段落であるかどうかが判断される。一方、ステップS315で同じ段落でないと判断された場合は、ステップS317に進んで、当該行を新たな段落として作成し、更に次の行との間で当該新たな段落と同じ段落であるかの判断が行われる。
【００６８】
ステップS318では、各段落について、以下の条件により、各段落の行が均等割り付けされているかどうかを判定する。
（１）各段落に含まれる各行の右端位置がほぼ同じ位置である。
（２）１行目の左端位置と、その他の行の左端位置との差が所定範囲内（字下げの距離内）に収まる。
（３）各行の文字スペーシング量の分布に基づいて、各行の文字スペーシング量の値が１つまたは２つである。（ただし、所定誤差内の文字スペーシング量は、同じ文字スペーシング量であるとして扱う。）
の条件を満たす段落の場合、当該段落に含まれる行を均等割付された行として判定する。
【００６９】
図４Ａの欧文例では、１行目と２行目の行間が所定距離以内（例えば、文字の高さの２倍以内）で、かつ文字サイズがほぼ等しいため、同じ段落と判断する。更に、１行目の右端位置と２行目の右端位置がほぼ等しい。また、左端位置もほぼ等しく、所定範囲内に収まっている。更に、各行の文字間のスペーシング量が２種類（文字間の距離と、単語間の距離との２種類）になっている。したがって、図４Ａの例の各行は均等割付されていると判断する(4-7)。なお、図４Ｂの和文例においても同様の処理が行われ、均等割付判断の結果は図４Ａと同じとなる。
【００７０】
このようにして、文書内の全ての行・段落に対して均等割付判断を行い、図２の全体フローチャートに戻って、ステップS204に進む。
【００７１】
（見出しの判断手順例：S204）
図５は、図２のステップS204における見出しの判断の詳細手順を示すフローチャートである。
【００７２】
ステップS501で、行が２行以上あるか否かを判定する。行に関しては、ステップS203の均等割り付け判定処理において行が抽出されているので、それを用いる。２行以上あればステップS502へ進む。１行しかない場合は、見出しの判断が不可能なため処理を終えて、図２のステップS205へ進む。
【００７３】
ステップS502で、処理対象となる文字行を選択する。最初は、１行目の文字行が選択される。次にステップS503で、当該選択された行に含まれる文字ブロックが見出しであるかどうかを、見出しタグがあるかどうかに基づいて判定する。すなわち、文書によっては、見出しかどうかの情報をタグで記述しているものがあるため、その確認を行う。本実施形態では、PDFなので見出しかどうかの情報が見出しタグとして記載されているかどうか判定する。また、文書がHTMLファイルである場合は、/Hタグ（H1〜H6のタグ）があるかどうかで判定する。
【００７４】
見出しである場合は、ステップS504に進み、該当する文字ブロックを見出しと判定する。この場合は、同一行の中に見出しの文字ブロックとそうではない文字ブロックが混在する場合もある。次にステップS506に進む。
【００７５】
ステップS503で見出しタグが無い場合は、ステップS505に進む。ステップS505では、以下のような文字行による見出しか否かの判断を行なう。
【００７６】
まず、選択された文字行、前の行、後の行からそれぞれ平均文字サイズを抽出してS、Spre、Spostとする。そして、選択された文字行の文字の大きさSを、前の行の文字の大きさSpre、後の行の文字の大きさSpostと比較する。なお、選択された処理対象の行が先頭の行であった場合は、後の行の文字の大きさSpostだけを比較対象にする。
【００７７】
また、選択された文字行と次の行の行間スペースをSS、次の行と更に次の行との間の行間スペースをSSpostとする。行間スペースSSを、次の行間スペースSSpostと比較する。
【００７８】
このとき、S ≧ Spre × 1.2 、且つ、S ≧ Spost × 1.2  （ただし、先頭行の場合はSpostとのみ比較）、且つ、SS ≧ SSpost × 1.2 の場合に、選択された文字行を見出しとする。この場合、選択された文字ブロックの行に属する文字ブロック全てを見出しとする。
【００７９】
なお、行間スペースは、縦方向のオフセットを指定したTDオペレータなど行間スペースを示す値から求める。
【００８０】
図６Ａ及び図６Ｂは、見出しの判定例を説明する図である。ここで、図６Ａは欧文フォントの例、図６Ｂは和文フォントの例である。(6-1)で文字大きさの比較をしている。まず最初は、先頭行が処理対象として選択され、次行との文字大きさの比較を行う。図６Ａ及び図６Ｂの例では、S ≧ Spost × 1.2を満たしている。次に、(6-2)で行間スペースの比較を行う。図６Ａ及び図６Ｂの例では、SS ≧ SSpost × 1.2を満たしている。これらの結果から、１行目は見出しであると判断されることになる。
【００８１】
次にステップS506で、すべての文字行について見出し判断を行ったか判定する。未判定の行が残っていればステップS502に戻って、次の文字行を選択し、次の行の見出し判断を行う。一方、全ての文字行を判断していれば、見出し判断処理を終了して、図２のステップS205に進む。
【００８２】
（空白文字幅Wsの取得手順例：S207）
図７は、図２のステップS207における空白文字幅の取得の詳細手順を示すフローチャートである。
【００８３】
ステップS701で、対象文字間の直前の文字のフォントの種類を判別し、当該判別したフォントの種類を対象フォントとする。次にステップS702で、ドキュメント内の対象フォントが空白文字幅情報を持っているかどうか判定する。PDFの場合は、フォント辞書のWidths情報にグリフ幅の情報が格納されている場合があり、その中に空白文字幅情報がないか確認する。また、文書内に含まれている同一フォントの文字で空白文字コードが存在すれば、その文字幅情報を用いるようにしてもよい。空白文字幅情報を得ることができればステップS708に進む。ステップS708で、空白文字幅をWsとする。
【００８４】
一方、ステップS702でドキュメント内から空白文字幅情報を得ることができなかった場合は、ステップS703に進む。ステップS703で、対象フォントがシステム（文書処理装置のＯＳなどのシステム）内に存在するか判定する。対象フォントがシステムにインストールされていれば、そこから情報を得られる可能性がある。システム内に対象フォントが格納されていればステップS707に進み、システム内の対象フォントが空白文字幅情報を持っているか判定する。持っていればステップS708に進んで、空白文字幅をWsとする。持っていない場合は、ステップS705に進む。
【００８５】
ステップS703で、対象フォントがシステム（当該文書処理装置）内に存在しない場合は、ステップS704に進む。ステップS704では、対象フォントがネットワーク等を介して接続された外部デバイス（例えば、プリンタ）内に格納されているか否か（外部デバイスにデバイス内蔵フォントがあるか否か）判定する。対象フォントが外部デバイス内に存在していればステップS707に進む。ステップS707で、対象フォントが空白文字幅情報を持っているか判定する。持っていればステップS708に進んで、空白文字幅をWsとする。持っていない場合は、ステップS705に進む。
【００８６】
ステップS704では、対象フォントが外部デバイス内に存在しない場合は、ステップS705に進む。ステップS705では、対象文字間の前後両方の文字のフォントを対象フォントとしたか判定する。直前の文字のフォントのみ判定が終了し、直後の文字のフォントの判定が終わっていない場合は、ステップS706にて対象文字間の直後の文字のフォントを対象フォントとして、ステップS702に進んで前述と同様に空白文字幅情報の取得を試みる。対象文字間の前後両方の文字の判定を行った場合（つまり、前後の文字のフォントから空白文字幅情報の取得を試みたが取得できなかった場合）は、ステップS709に進む。
【００８７】
ステップS709では、空白文字幅の推定を行う。直前の文字の文字幅Wpとした場合に、空白文字幅Wsは以下のように推定する。
（１）直前の文字が２バイトコードの場合は、Ws = Wp（全角）、Ws = Wp/2（半角）とする。
（２）直前の文字が１バイトコードのプロポーショナルフォントの場合は、Ws =（直前の文字のem値）/4  とする（em値とは日本語（和文）フォントの全角文字幅に値する文字幅情報）。
（３）直前の文字が１バイトコードの固定ピッチフォントの場合は、Ws =（直前の文字のem値）とする。
【００８８】
これで、空白文字幅の取得を終了し、図２のステップS208に進む。
【００８９】
（文字スペーシングの取得手順例：S208）
図２のステップS208の文字スペーシングの取得について、図８のフローチャートに従って説明する。図９Ａ及び図９Ｂは、文字スペーシング量Δに関しての概略図である。例えば、図９Ａでは、「This」の"s"と、「is」の"i"との間の文字スペーシング量Δを求める場合を示している。図９Ｂでは、「あき」の"き"と、「あり」の"あ"との間の文字スペーシング量Δを求める場合を示している。
【００９０】
ステップS801で、対象文字間の文字スペーシング量Δを求める。例えば、Tcオペレータで設定される文字スペーシングをΔTc、TDオペレータで設定される横方向のオフセットをΔTD、TJオペレータで設定される文字スペーシングをΔTJとする。
【００９１】
このとき、文字スペーシングは次の式に基づいて求められる。
【００９２】
Δ = ΔTD + (ΔTc - ΔTJ×(直前の文字のフォントサイズ)/1000)×100
次に、ステップS802で、１つ前の対象文字間があるか判定する。ある場合は、ステップS803に進む。ない場合は、ステップS804に進む。
【００９３】
ステップS803で、１つ前の対象文字間の文字スペーシング量Δpreを、１つ前の文字スペーシングΔTc_pre、TDで設定するオフセットΔTD_pre、TJで設定する文字スペーシングΔTJ_preから求める。
【００９４】
Δpre = ΔTD_pre+ (ΔTc_pre - ΔTJ_pre×(２文字前の文字のフォントサイズ)/1000)×100
Δpreを求めた後、文字スペーシングの取得処理を終了して、図２のステップS209に進む。
【００９５】
ステップS804で、１つ後の対象文字間の文字スペーシング量Δpostを求めて、１つ前のΔpreの代用とする。１つ後の対象文字間の文字スペーシング量Δpostを、文字スペーシングΔTc_post、TDで設定するオフセットΔTD_post、TJで設定する文字スペーシングΔTJ_postから求める。そして、求めたΔpostをΔpreに代入する。
【００９６】
Δpost = ΔTD_post+ (ΔTc_post - ΔTJ_post×(直後の文字のフォントサイズ)/1000)×100
Δpre ←  Δpost  （ΔpreをΔpostで代用）
Δpreを求めた後、文字スペーシングの取得処理を終了して、図２のステップS209に進む。
【００９７】
なお、図９Ａの欧文例では、１つ前の対象文字間（「This」の"i"と"s"の間）があるので、ステップS803でΔpreを求めることになる。図９Ｂの和文例においても、１つ前の対象文字間（「あき」の"あ"と"き"の間）があるので、ステップS803でΔpreを求めることになる。
【００９８】
（空白・タブ判定手順例：S209）
図１０は、図２のステップS209の空白・タブ判定の詳細な手順例を示すフローチャートである。
【００９９】
まず、ステップS1001で、対象文字間を含む行は均等割り付けか判定する。均等割り付けの場合は、ステップS1006へ進み、均等割り付け用の空白判定を行う（図１１参照）。均等割り付けでない場合は、ステップS1002へ進む。
【０１００】
ステップS1002で、対象文字間を含む文字ブロックもしくは隣接する文字ブロックは見出しか判定する。いずれかが見出しの場合は、ステップS1007へ進み、見出し用の空白判定へ進む（図１２参照）。見出しではない場合は、ステップS1003へ進む。
【０１０１】
ステップS1003で、直前の文字が欧文フォントか否かを判定する。欧文フォントの場合は、S1004へ進む。欧文フォントでない（和文フォントの）場合は、ステップS1008へ進む。
【０１０２】
ステップS1004で、欧文フォント用の空白判定を行う。すなわち、空白文字幅Ws, 文字スペーシング量Δが、Ws × 0.8 ≦  （Δ-Δpre×２）  ≦ Ws × 1.2 を満たすか判定する。
【０１０３】
この条件式の意味するところは、図９Ａの文字スペーシングΔと空白文字幅Ws、文字スペーシングΔpreの関係をみると分かりやすいであろう。すなわち、"This"と"空白文字"との間の文字スペーシングをΔpreと推定し、"空白文字"と"is"との間の文字スペーシングもΔpreと推定する。すると、計算により求められる空白文字幅は、"This"と"is"の間の文字スペーシングΔから、文字スペーシングΔpreの２個分を引いたものとなる。よって、（Δ-Δpre×２）が空白文字幅Wsに近い、すなわち上記条件式を満たせば、空白が１個あると判定する。ここで、欧文ではスペースのみ幅が可変となる場合があるが、その場合はΔpre=0となるので、スペースのみ幅が可変となる場合も、単語内の文字間が可変となる場合も同一の判定式で対応できる。
【０１０４】
条件を満たす場合は、ステップS1005へ進み、空白１個が存在すると判定し、対象文字間に挿入する。条件を満たさない場合は、ステップS1017へ進む。
【０１０５】
ステップS1017で、文字スペーシングが空白１個があるとした場合よりも大きい場合に関して、さらに調査する。
【０１０６】
Δ ＞ Ws × 1.2 を満たす場合は、ステップS1018に進んでタブ判定／複数空白判定に進む。満たさない場合は、空白なしと判定し、空白判定処理を終了して、図２のステップS210に進む。
【０１０７】
ステップS1003で、直前の文字が欧文フォントでない（和文フォントの）場合について説明する。
【０１０８】
ステップS1008に進み、全角空白文字幅Ws, 文字スペーシング量Δが、
Ws × 0.9 ≦  （Δ- Δpre × 2）  ≦ Ws × 1.1 を満たすか判定する。
【０１０９】
この条件式の意味するところは、図９Ｂの文字スペーシングΔと空白幅Ws、文字スペーシングΔpreの関係をみると分かりやすい。すなわち、１文字の空白が入っていた場合の推定空白幅は、文字スペーシングΔから文字スペーシングΔpreの２個分を引いたものとなる。推定空白幅が実際の空白幅に近ければ、空白が１個あると判定できる。欧文対応のステップS1004に比べて、日本語（和文）の場合、全角空白文字幅Wsに近い大きさになることが多いので、条件式の閾値を厳しくしている。
【０１１０】
条件式をみたす場合は、ステップS1009へ進み、全角空白１個が存在すると判定して対象文字間に挿入する。満たさない場合は、ステップS1010へ進む。
【０１１１】
ステップS1010では、全角空白１個が存在するよりは文字間が小さい場合かどうか判定する。すなわち、（Δ - Δpre × 2）＜ Ws × 0.8 を満たすか判定する。満たす場合は、ステップS1011に進み、半角空白の文字幅をWsとする。満たさない場合は、ステップS1016に進みタブ判定／複数空白判定を行う。
【０１１２】
満たす場合を説明する。ステップS1012で、半角空白文字幅Ws, 文字スペーシング量Δが、Ws × 0.8 ≦  （Δ- Δpre × 2）  ≦ Ws × 1.2 を満たすか判定する。満たす場合は、ステップS1013に進み、半角空白１個が存在すると判定して対象文字間に挿入する。満たさない場合は、ステップS1020に進み空白なしと判定して、空白判定処理を終了する。
【０１１３】
（均等割り付け用の空白判定手順例：S1006）
図１０のステップS1006の均等割り付け用の空白判定の詳細を、図１１のフローチャートに従って説明する。
【０１１４】
ステップS1100で、均等割り付け量を算出し、それをもとに空白文字幅Wsの補正を行う。
【０１１５】
（行の幅）＝（行の右端）−（行の左端）
（標準の行の幅）＝（各文字の幅の合計）
（補正した空白文字幅）＝（空白文字幅Ws）×（行の幅）÷（標準の行の幅）
（空白文字幅Ws）を（補正した空白文字幅）に置き換える。
【０１１６】
次に、ステップS1101で、直前の文字が欧文フォントか判定する。欧文フォントであればステップS1102に進む。欧文フォントでない（和文フォントの）場合は、ステップS1104に進む。
【０１１７】
欧文フォントの場合を説明する。ステップS1102で、空白文字幅Ws, 文字スペーシング量Δが、Ws × 0.8≦ （Δ - Δpre × 2） ≦ Ws × 1.2 を満たすか判定する。条件を満たす場合は、ステップS1103に進み、空白１個と判定し対象文字間に挿入して、空白判定処理を終了する。満たさない場合は、ステップS1105に進み、空白なしと判定して、空白判定処理を終了する。
【０１１８】
ステップS1101で、欧文フォントでない（和文フォントの）場合の説明をする。ステップS1104で、全角空白文字幅Ws, 文字スペーシング量Δが、
Ws × 0.9≦ （Δ - Δpre × 2） ≦ Ws × 1.1 を満たすか判定する。満たす場合は、ステップS1103に進み、空白１個と判定し対象文字間に挿入して、空白判定処理を終了する。満たさない場合は、ステップS1105に進み、空白なしと判定して、空白判定処理を終了する。
【０１１９】
日本語（和文）の場合、（Δ - Δpre×2）は全角空白文字幅Wsに近い大きさになることが多いので、ステップS1102の条件式に比べて、条件式の閾値を厳しくしている。
【０１２０】
（見出し用の空白判定手順例：S1007）
図１０のステップS1007の見出し用の空白判定の説明を、図１２のフローチャートに従って説明する。
【０１２１】
ステップS1200で空白文字幅Wsの補正を行う。見出しの場合は、文字に変形がかかって縦長や横長になっていることが多いが、必要に応じて、空白文字幅Wsの補正を行う。
【０１２２】
例えば、PDFの場合はX,Y座標を行列変換により変形を表現する。
【０１２３】
(X,Y)が行列変換(a,b,c,d)で(X´,Y´)になるとすると、
X´= aX + bY
Y´= cX + dY
で表現される。
【０１２４】
通常は、Δ、Δpreも同一の座標変換がおこなわれているので空白文字幅Wsの補正は必要ないが、見出しの途中で座標変換を変えているような場合は、切り替え前の変換行列を用いて空白文字幅Wsの補正を行い、切り替え前と切り替え後の座標から空白判定を行う。
【０１２５】
（補正した空白文字幅）＝a×（空白文字幅Ws）+ b×（空白文字高さ）
Δ＝(文字の開始位置)−（前の文字の終了位置）
Δpreは、すでに座標変換されているのでそのままの値を使用する。
【０１２６】
ステップS1201で、直前の文字が欧文フォントか判定する。欧文フォントであればステップS1202に進む。欧文フォントでない場合は、ステップS1204に進む。
【０１２７】
欧文フォントの場合を説明する。ステップS1202で、空白文字幅Ws, 文字スペーシング量Δが、Ws × 0.8≦ （Δ - Δpre × 2） ≦ Ws × 1.2 を満たすか判定する。条件を満たす場合は、ステップS1203に進み、空白１個と判定し対象文字間に挿入して、空白判定処理を終了する。満たさない場合は、ステップS1205に進み、空白なしと判定して、空白判定処理を終了する。
【０１２８】
ステップS1201で、欧文フォントでない（和文フォントの）場合の説明をする。ステップS1204で、全角空白文字幅Ws, 文字スペーシング量Δが、
Ws × 0.9≦ （Δ - Δpre × 2） ≦ Ws × 1.1 を満たすか判定する。満たす場合は、ステップS1203に進み、空白１個と判定し対象文字間に挿入して、空白判定処理を終了する。満たさない場合は、ステップS1205に進み、空白なしと判定して、空白判定処理を終了する。
【０１２９】
（タブ判定手順例：S1016, S1018）
図１０のステップS1016、S1018のタブ判定／複数空白判定の内のタブ判定の説明を、図１３のフローチャートに従って、図１４Ａ（欧文）及び図１４Ｂ（和文）のタブ判定例を参照して説明する。
【０１３０】
ステップS1301で、対照文字間の次の文字の開始位置（左端）をB（X座標）とする（図１４Ａ及び図１４Ｂ参照）。
【０１３１】
次に、ステップS1302で、前行があるかどうか判定する。ある場合は、ステップS1304に進む。ない場合は、ステップS1303に進み、タブはないと判断し、複数空白判定に進む（図１５参照）。
【０１３２】
ステップS1304では、前行の先頭文字の開始位置をBpreとする（図１４Ａ及び図１４Ｂ参照）。次に、ステップS1305で、Bpre - α  ≦  B  ≦ Bpre + α （αは閾値）を満たすか判定する。満たす場合は、ステップS1306に進む。ステップS1306では、前行のBpreとした対象文字の前に空白もしくはタブがあるか判定する。対象文字とは、図１４Ａ及び図１４Ｂであれば「500」の「5」を指す。タブか空白がある場合は、ステップS1314にてタブと判定してタブを挿入する。
【０１３３】
ステップS1305もしくはステップS1306で、条件を満たさない場合は、ステップS1307に進み、前行のすべての文字に対して調べたか判定する。全て調べた場合は、ステップS1309へ進む。一方、残っている場合は、ステップS1308に進み、前行の次の文字の開始位置をBpreとしてステップS1305に戻って、前述のように判定を行う。これを繰り返す。
【０１３４】
ステップS1309では、次行があるか判断する。次行がない場合は、ステップS1310に進み、タブはないと判断し、複数空白判定へ進む。次行がある場合は、ステップS1311に進む。ステップS1311で、次行の先頭文字の開始位置をBpreとする。
【０１３５】
次に、ステップS1312で、Bpre - α  ≦  B  ≦ Bpre + α （αは閾値）を満たすか判定する。満たす場合は、ステップS1313に進む。ステップS1313では、次行のBpreとした対象文字の前に空白もしくはタブがあるか判定する。タブか空白がある場合は、ステップS1314にてタブと判定してタブを挿入する。
【０１３６】
一方、ステップS1312もしくはステップS1313で、条件を満たさない場合は、ステップS1315に進み、次行のすべての文字に対して調べたか判定する。次行の文字すべて調べた場合は、ステップS1317へ進む。一方、残っている場合は、ステップS1316に進み、次行の次の文字の開始位置をBpreとしてステップS1312に戻って、前述のように判定を行う。これを繰り返す。
【０１３７】
ステップS1317では、タブはないと判断し、複数空白判定へ進む。
【０１３８】
（複数空白判定手順例：S1303, S1310, S1317）
図１３のステップS1303、S1310, S1317における複数空白判定に関して、図１５のフローチャートに従って、図１６を参照して説明する。
【０１３９】
ステップS1501で、空白の数NをN=2とする。
【０１４０】
次にステップS1502で、
Ws × 0.8 ≦ (Δ - (N+1) × Δpre) / N ≦ Ws × 1.2 を満たすか判定する。
【０１４１】
図１６では、空白が３個の例であるが、文字スペーシングから推定する空白幅は、(Δ - (N+1) × Δpre) / N で求められることが分かる。この推定空白幅が実際の空白幅にほぼ近ければ、その数の空白が入っていると考えられる。
【０１４２】
条件を満たす場合は、ステップS1503に進んでNを１つ増やして、ステップS1502に戻る。この場合は、N=2で条件を満たしたのでN=3になる。
【０１４３】
これを繰り返して、最後にS1502で条件を満たさなくなると、ステップS1504に進む。ステップS1504では、Nの値から１を引く。これによって、ステップS1502の条件を満たした最も大きなNが求まる。
【０１４４】
次にステップS1505で、N ≧ ２ か判定する。満たしていれば、ステップS1506で、空白N個と判定し、対象文字空間に挿入して、空白・タブ判定処理を終了する。満たさない場合は、ステップS1507に進み、空白なしと判定し、対象文字空間に挿入して、空白・タブ判定処理を終了する。
【０１４５】
前述の説明によりステップS209の空白・タブ判定処理が終了すると、次にステップS210に進む。
【０１４６】
このように、文書から文字間の空白やタブを判定して挿入することで、例えば、完全一致単語検索、フレーズ検索を含む文字列検索処理などが間違いなく正確に行われるようになる。
【０１４７】
＜その他の実施形態＞
尚、上記実施形態では、文書レイアウトを保持した文書としてＰＤＦの例を示したが、ＰＤＬやＨＴＭＬなどでも同様な効果を得ることができる。
【０１４８】
又、上述した実施形態では、英文（欧文）と和文との両方に対応できるように構成したが、これに限るものではなく、例えば、英文（欧文）だけまたは和文だけに対応するようにしてもよい。
【０１４９】
英文だけを対象とした文書処理装置を構成する場合、上述した各フローチャートにおいて、英文であるか和文であるかの判断ステップは行わずに、常に英文に対する処理ステップが行われるようにすればよい。その場合、和文に対する処理部分は省略できるので、上述した各フローチャートは単純化することができる。その逆の和文だけの場合も同様である。
【０１５０】
又、本発明は、複数の機器（例えばホストコンピュータ、インタフェース機器、プリンタなど）から構成されるシステムあるいは統合装置に適用しても、ひとつの機器からなる装置に適用してもよい。
【０１５１】
又、本発明の目的が、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体（または記録媒体）を、システムあるいは装置に供給することによって、達成されることは言うまでもない。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。又、コンピュータが読み出したプログラムコードの指示に基づき、オペレーティングシステム（OS）などが実際の処理の一部または全部を行い、前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１５２】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれる。その後、そのプログラムコードの指示に基づき、機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１５３】
本発明を上記記憶媒体に適用する場合、その記憶媒体には、先に説明したフローチャートに対応するプログラムコードが格納されることになる。
【図面の簡単な説明】
【０１５４】
【図１Ａ】本実施形態の文書処理装置の構成例を示すブロック図である。
【図１Ｂ】本実施形態の文書処理装置の概略動作例を示すフローチャートである。
【図１Ｃ】図１ＡのRAM6の記憶領域の構成例を示す図である。
【図２】本実施形態の文書処理の手順例を示すフローチャートである。
【図３】図２の均等割り付けの判断S203の手順例を示すフローチャートである。
【図４Ａ】欧文フォントにおける、図３の均等割り付けの判断の一例を示す図である。
【図４Ｂ】和文フォントにおける、図３の均等割り付けの判断の一例を示す図である。
【図５】図２の見出し判断S204の手順例を示すフローチャートである。
【図６Ａ】欧文フォントにおける、図５の見出しの判断の一例を示す図である。
【図６Ｂ】和文フォントにおける、図５の見出しの判断の一例を示す図である。
【図７】図２の空白文字幅の取得S207の手順例を示すフローチャートである。
【図８】図２の文字スペーシングの取得S208の手順例を示すフローチャートである。
【図９Ａ】欧文フォントにおける、図８の文字スペーシングの一例を示す図である。
【図９Ｂ】和文フォントにおける、図８の文字スペーシングの一例を示す図である。
【図１０】図２の空白・タブの判定S209の手順例を示すフローチャートである。
【図１１】図１０の均等割り付け用の空白の判定S1006の手順例を示すフローチャートである。
【図１２】図１０の見出し用の空白判定S1007の手順例を示すフローチャートである。
【図１３】図１０のタブ判定／複数空白判定S1016,S1018の内のタブ判定の手順例を示すフローチャートである。
【図１４Ａ】欧文フォントにおける、図１３のタブ判定の一例を示す図である。
【図１４Ｂ】和文フォントにおける、図１３のタブ判定の一例を示す図である。
【図１５】図１３の複数空白判定S1303,S3013,S1315の手順例を示すフローチャートである。
【図１６】図１５の複数空白判定の一例を示す図である。
【図１Ａ】
2008171400.tif 000003
【図１Ｂ】
2008171400.tif 000004
【図１Ｃ】
2008171400.tif 000005
【図２】
2008171400.tif 000006
【図３】
2008171400.tif 000007
【図４Ａ】
2008171400.tif 000008
【図４Ｂ】
2008171400.tif 000009
【図５】
2008171400.tif 000010
【図６Ａ】
2008171400.tif 000011
【図６Ｂ】
2008171400.tif 000012
【図７】
2008171400.tif 000013
【図８】
2008171400.tif 000014
【図９Ａ】
2008171400.tif 000015
【図９Ｂ】
2008171400.tif 000016
【図１０】
2008171400.tif 000017
【図１１】
2008171400.tif 000018
【図１２】
2008171400.tif 000019
【図１３】
2008171400.tif 000020
【図１４Ａ】
2008171400.tif 000021
【図１４Ｂ】
2008171400.tif 000022
【図１５】
2008171400.tif 000023
【図１６】
2008171400.tif 000024