(57)【特許請求の範囲】
【請求項１】
文書に含まれる文字にルビを付すことによりルビ付き文書を生成する文書生成装置であって、
前記文書のレイアウトの特徴を示す、前記文書に含まれる各文字の文字サイズ、各行の間隔、各行の文字数の何れかを特徴量として記憶する記憶部と、
前記記憶部から前記特徴量を読み出し、読み出した該特徴量の分散値を算出し、算出した分散値が所定の値以上であるか否かを判定する統一度判定部と、
前記分散値が前記所定の値以上でない場合、前記ルビの表示形態を統一し、前記分散値が前記所定の値以上である場合、前記ルビの表示形態を前記文書の各部の特徴に応じて個別に設定するルビ設定部と、
を備えることを特徴とする文書生成装置。
【請求項２】
前記ルビの表示形態は、前記ルビの文字サイズであることを特徴とする請求項１に記載の文書生成装置。
【請求項３】
前記統一度判定部は、前記記憶部から読み出される特徴量が前記文書に含まれる各文字の文字サイズである場合、前記文書に含まれる各文字の文字サイズの平均値を行ごとに算出し、算出した平均値の分散値を前記文書に含まれる各文字の文字サイズの分散値として算出し、前記記憶部から読み出される特徴量が前記各行の文字数である場合、前記各行の文字数の平均値を行ごとに算出し、算出した平均値の分散値を前記各行の文字数の分散値として算出することを特徴とする請求項１または２に記載の文書生成装置。
【請求項４】
前記統一度判定部は、前記文書が複数の領域に分割されている場合に、領域ごとに前記特徴量の平均値を算出し、算出した平均値の分散値を前記特徴量の分散値として算出することを特徴とする請求項１に記載の文書生成装置。
【請求項５】
前記統一度判定部は、前記文書の複数のページ全体における前記特徴量の平均値を算出し、算出した平均値を用いて前記特徴量の分散値を算出することを特徴とする請求項１に記載の文書生成装置。
【請求項６】
ユーザから前記文書に含まれる文字の大きさがほぼ揃っているか否かについての情報の入力を受け付ける入力部をさらに備え、前記統一度判定部は、前記入力部が入力を受け付けた情報に基づいて、前記ルビの表示形態を統一するか否かを判定し、前記ルビ設定部は、前記ルビの表示形態を統一すると判定された場合に、前記ルビの表示形態を統一し、前記ルビの表示形態を統一しないと判定された場合に、前記ルビの表示形態を前記文書の各部の特徴に応じて個別に設定することを特徴とする請求項１〜５のいずれか１項に記載の文書生成装置。
【請求項７】
前記ルビ設定部は、前記文字により構成される単語あるいは連語の近傍の前記ルビを配置すべき領域の大きさに対する該ルビの大きさの割合が、所定の閾値よりも大きい場合であって、前記単語あるいは連語の前または後ろにある単語あるいは連語に対して前記ルビを付す必要がないか、前記単語あるいは連語の前または後ろにある単語あるいは連語に対して付されるルビの大きさにルビ間に設けられる空白の大きさを加えた大きさが前記単語あるいは連語の前または後ろにある単語あるいは連語の大きさに比べて小さい場合に、前記単語あるいは連語の前または後ろにある単語あるいは連語の近傍の領域を前記ルビを配置する領域として設定することを特徴とする請求項１〜６のいずれか１項に記載の文書生成装置。
【請求項８】
前記文書の画像を読み取る画像読取部と、前記画像読取部により読み取られた画像に前記ルビ設定部により設定された表示形態で表示されたルビの画像を合成したルビ付き文書を生成するルビ付き文書生成部とをさらに備えることを特徴とする請求項１〜７のいずれか１項に記載の文書生成装置。
【請求項９】
コンピュータを、請求項１に記載の文書生成装置として機能させるコンピュータプログラム。
【請求項１０】
請求項９に記載のコンピュータプログラムを記録したことを特徴とするコンピュータが読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文書に含まれる文字にルビを付すことによりルビ付き文書を生成する文書生成装置、文書生成方法、その文書生成方法をコンピュータに実行させることを特徴とするコンピュータプログラム、および、そのコンピュータプログラムを記録したことを特徴とするコンピュータが読み取り可能な記録媒体に関する。
【背景技術】
【０００２】
従来、文書に含まれる文字列に対してルビを付すことが一般的に行われている。ルビとは、文字列の読み方や意味などを示す注釈であり、その文字列の近傍に文字列との対応関係が分かるように配置されるものである（例えば、特許文献１、２を参照）。
【０００３】
一般に、ルビの文字の大きさは、もとの文書の文字のサイズや行間隔の大きさにより決定される。この場合、もとの文書の文字のサイズや行間隔の大きさが似通っていたとしても、それらが同一でない限りルビの文字の大きさが変わってしまい、文書が統一感のないものとなる。
【０００４】
そのため、文書を複数の領域に分割し、文字のサイズや行間隔が類似する領域を同一のグループとして分類し、同一のグループに含まれる領域間で、文字列に付される翻訳文の文字サイズを統一する技術が提案されている（例えば、特許文献３および特許文献４を参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−７２５９４号公報
【特許文献２】特開２００９−５３８３８号公報
【特許文献３】特開２００９−１９３２８３号公報
【特許文献４】特開２０１０−１２８５９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、もとの文書の文字サイズや行間隔のばらつきが小さく、翻訳文の文字サイズを文書全体で統一した方がよいと思われる文書と、意図的にさまざまなサイズの文字が用いられていて、それぞれの文字のサイズに対応したそれぞれのサイズで翻訳文を付した方がよいと思われる文書がある場合に、特許文献３および特許文献４の従来技術では、前者に対して翻訳文の文字サイズを統一するだけでなく、後者に対しても文字サイズが類似する領域間で翻訳文の文字サイズを統一してしまう可能性があるので、後者に対して翻訳文の文字サイズを統一しないという要請に応えることができない。
【０００７】
本発明は、上記課題に鑑み、ルビを付す対象である文書のレイアウトの特徴に応じて、適切な表示形態でルビを表示することが可能な文書生成装置、文書生成方法、その文書生成方法をコンピュータに実行させることを特徴とするコンピュータプログラム、および、そのコンピュータプログラムを記録したことを特徴とするコンピュータが読み取り可能な記録媒体を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決する為に、本発明の第１の技術手段は、文書に含まれる文字にルビを付すことによりルビ付き文書を生成する文書生成装置であって、前記文書のレイアウトの特徴を示す、前記文書に含まれる各文字の文字サイズ、各行の間隔、各行の文字数の何れかを特徴量として記憶する記憶部と、前記記憶部から前記特徴量を読み出し、読み出した該特徴量の分散値を算出し、算出した分散値が所定の値以上であるか否かを判定する統一度判定部と、前記分散値が前記所定の値以上でない場合、前記ルビの表示形態を統一し、前記分散値が前記所定の値以上である場合、前記ルビの表示形態を前記文書の各部の特徴に応じて個別に設定するルビ設定部と、を備えることを特徴としたものである。
【００１０】
本発明の第２の技術手段は、第１の技術手段において、前記ルビの表示形態は、前記ルビの文字サイズであることを特徴としたものである。
【００１２】
本発明の第３の技術手段は、第１または第２の技術手段において、前記統一度判定部は、前記記憶部から読み出される特徴量が前記文書に含まれる各文字の文字サイズである場合、前記文書に含まれる各文字の文字サイズの平均値を行ごとに算出し、算出した平均値の分散値を前記文書に含まれる各文字の文字サイズの分散値として算出し、前記記憶部から読み出される特徴量が前記各行の文字数である場合、前記各行の文字数の平均値を行ごとに算出し、算出した平均値の分散値を前記各行の文字数の分散値として算出することを特徴としたものである。
【００１３】
本発明の第４の技術手段は、第１の技術手段において、前記統一度判定部は、前記文書が複数の領域に分割されている場合に、領域ごとに前記特徴量の平均値を算出し、算出した平均値の分散値を前記特徴量の分散値として算出することを特徴としたものである。
【００１４】
本発明の第５の技術手段は、第１の技術手段において、前記統一度判定部は、前記文書の複数のページ全体における前記特徴量の平均値を算出し、算出した平均値を用いて前記特徴量の分散値を算出することを特徴としたものである。
【００１８】
本発明の第６の技術手段は、第１〜第５のいずれかの技術手段において、ユーザから前記文書に含まれる文字の大きさがほぼ揃っているか否かについての情報の入力を受け付ける入力部をさらに備え、前記統一度判定部は、前記入力部が入力を受け付けた情報に基づいて、前記ルビの表示形態を統一するか否かを判定し、前記ルビ設定部は、前記ルビの表示形態を統一すると判定された場合に、前記ルビの表示形態を統一し、前記ルビの表示形態を統一しないと判定された場合に、前記ルビの表示形態を前記文書の各部の特徴に応じて個別に設定することを特徴としたものである。
【００１９】
本発明の第７の技術手段は、第１〜第６のいずれかの技術手段において、前記ルビ設定部は、前記文字により構成される単語あるいは連語の近傍の前記ルビを配置すべき領域の大きさに対する該ルビの大きさの割合が、所定の閾値よりも大きい場合であって、前記単語あるいは連語の前または後ろにある単語あるいは連語に対して前記ルビを付す必要がないか、前記単語あるいは連語の前または後ろにある単語あるいは連語に対して付されるルビの大きさにルビ間に設けられる空白の大きさを加えた大きさが前記単語あるいは連語の前または後ろにある単語あるいは連語の大きさに比べて小さい場合に、前記単語あるいは連語の前または後ろにある単語あるいは連語の近傍の領域を前記ルビを配置する領域として設定することを特徴としたものである。
【００２０】
本発明の第８の技術手段は、第１〜第７のいずれかの技術手段において、前記文書の画像を読み取る画像読取部と、前記画像読取部により読み取られた画像に前記ルビ設定部により設定された表示形態で表示されたルビの画像を合成したルビ付き文書を生成するルビ付き文書生成部とをさらに備えることを特徴としたものである。
【００２２】
本発明の第９の技術手段は、コンピュータを、第１の技術手段における文書生成装置として機能させるコンピュータプログラムである。
【００２３】
本発明の第９の技術手段は、上記コンピュータプログラムを記録したことを特徴とするコンピュータが読み取り可能な記録媒体である。
【発明の効果】
【００２４】
本発明によれば、ルビを付す対象である文字を含む文書について、文書のレイアウトの統一度を判定し、その判定結果に基づいてルビの表示形態を設定するので、ルビを付す対象である文書のレイアウトの統一度に応じて、ユーザの希望通りに適切な表示形態でルビを表示することができる。
【図面の簡単な説明】
【００２５】
【図１】本発明の実施形態に係る文書生成装置の機能ブロック図である。
【図２】文字認識結果データの一例を示す図である。
【図３】文書レイアウトデータの一例を示す図である。
【図４】文字の大きさがほぼ揃えられた文書の一例を示す図である。
【図５】文字の大きさが揃えられていない文書の一例を示す図である。
【図６】本発明の実施形態に係る文書生成処理の処理手順の一例を示すフローチャートである。
【図７】図６に示したルビ設定処理の処理手順の一例を示すフローチャートである。
【図８】分散値Ｖｓが所定の閾値ＶｓＴ以上である場合の文字サイズ分布の一例を示す図である。
【図９】分散値Ｖｓが所定の閾値ＶｓＴ未満である場合の文字サイズ分布の一例を示す図である。
【図１０】ルビサイズを統一しない場合のルビサイズ・配置設定処理の処理手順の一例を示すフローチャートである。
【図１１】ルビサイズを統一しない場合のルビサイズ・配置設定処理の処理手順の一例を示すフローチャートである。
【図１２】ルビサイズを統一しない場合のルビサイズ・配置設定処理の処理手順の一例を示すフローチャートである。
【図１３】ルビサイズを統一しない場合のルビサイズ・配置設定処理の処理手順の一例を示すフローチャートである。
【図１４】ルビサイズを統一しない場合のルビサイズ・配置設定処理の処理手順の一例を示すフローチャートである。
【図１５】ルビサイズを統一しない場合のルビサイズ・配置設定処理の処理手順の一例を示すフローチャートである。
【図１６】ルビサイズを統一しない場合のルビサイズ・配置設定処理の処理手順の一例を示すフローチャートである。
【図１７】ルビサイズを統一しない場合のルビサイズ・配置設定処理の処理手順の一例を示すフローチャートである。
【図１８】各種の変数について説明する図である。
【図１９】単語ｋ＋１あるいは連語ｋ＋１の下部の一部にある空白部分を利用するルビの配置の一例について説明する図である。
【図２０】単語ｋ＋１あるいは連語ｋ＋１の下部の一部にある空白部分を利用するルビの配置の一例について説明する図である。
【図２１】単語ｋ−１あるいは連語ｋ−１の下部の一部にある空白部分、および、単語ｋ＋１あるいは連語ｋ＋１の下部の一部にある空白部分を利用するルビの配置の一例について説明する図である。
【図２２】単語ｋ−１あるいは連語ｋ−１の下部の一部にある空白部分を利用するルビの配置の一例について説明する図である。
【図２３】単語ｋ−１あるいは連語ｋ−１の下部の一部にある空白部分を利用するルビの配置の一例について説明する図である。
【図２４】ルビサイズを統一する場合のルビサイズ・配置設定処理の処理手順の一例を示すフローチャートである。
【図２５】ルビサイズを統一する場合のルビサイズ・配置設定処理の処理手順の変形例を示すフローチャートである。
【図２６】ルビサイズを統一する場合のルビサイズ・配置設定処理の処理手順の変形例を示すフローチャートである。
【図２７】ルビサイズを統一する場合のルビサイズ・配置設定処理の処理手順の変形例を示すフローチャートである。
【図２８】ルビサイズを統一する場合のルビサイズ・配置設定処理の処理手順の変形例を示すフローチャートである。
【図２９】ルビサイズを統一する場合のルビサイズ・配置設定処理の処理手順の変形例を示すフローチャートである。
【図３０】ルビサイズを統一する場合のルビサイズ・配置設定処理の処理手順の変形例を示すフローチャートである。
【図３１】ルビサイズを統一する場合のルビサイズ・配置設定処理の処理手順の変形例を示すフローチャートである。
【図３２】ルビサイズを統一する場合のルビサイズ・配置設定処理の処理手順の変形例を示すフローチャートである。
【図３３】ルビサイズを統一する場合のルビサイズ・配置設定処理の処理手順の変形例を示すフローチャートである。
【発明を実施するための形態】
【００２６】
以下、本発明の実施形態について図面を参照して詳細に説明する。図１は、本発明の実施形態に係る文書生成装置１の機能ブロック図である。文書生成装置１は、文書に含まれる単語や連語にルビを付すことによりルビ付き文書を生成する装置である。ルビとは、単語や連語の読み方や意味などを示す注釈（例えば、読み仮名や発音記号、ピンイン記号、訳語、専門用語や難解な語句の説明）であり、その単語や連語の近傍に単語や連語との対応関係が分かるように配置されるものである。
【００２７】
なお、以下では、単語や連語にルビとして単語や連語の訳語を付す場合を例に挙げて、文書生成装置１についての説明を行う。また、以下では、ルビを付す対象である単語や連語の下部にルビを付す場合について説明するが、これに限られず、単語や連語の上部に付すこととしてもよいし、縦書きの文書の場合は、単語や連語の左側あるいは右側にルビを配置することとしてもよい。
【００２８】
図１に示すように、文書生成装置１は、入力部２、表示部３、画像読取部４、印刷処理部５、記憶部６、制御部７を備える。入力部２は、キーボードやマウスなど、ユーザから情報の入力を受け付ける入力装置である。表示部３は、ディスプレイなど、各種の情報を表示する表示装置である。画像読取部４は、紙の文書をスキャンして、文書の画像を読み取るスキャナ装置である。印刷処理部５は、文書などを紙に印刷する印刷装置である。記憶部６は、メモリやハードディスク装置などの記憶装置である。この記憶部６は、翻訳用辞書データ６ａ、ルビ文字データ６ｂ、文書画像データ６ｃ、文字認識結果データ６ｄ、文書レイアウトデータ６ｅ、ルビ付き文書データ６ｆを記憶する。
【００２９】
翻訳用辞書データ６ａは、翻訳対象である言語の文法や、単語や連語の訳などが登録されたデータである。ここで、連語とは、２つ以上の単語が連結し、１つのまとまった意味を示す語句（例えば、名詞句、動詞句、熟語、慣用句など）のことである。ルビ文字データ６ｂは、ルビとして用いられる文字や文字間隔の情報を登録したデータである。文書画像データ６ｃは、画像読取部４により読み取られた文書の画像データである。文字認識結果データ６ｄは、文書画像データ６ｃに対して文字認識処理が行われた結果得られた文字のデータである。
【００３０】
図２は、文字認識結果データ６ｄの一例を示す図である。図２に示すように、この文字認識結果データ６ｄは、文字番号、認識結果、左側Ｘ座標、上側Ｙ座標、右側Ｘ座標、下側Ｙ座標、領域番号、行内位置情報、サイズの情報を登録している。
【００３１】
文字番号は、認識した各文字に割り当てられた番号である。認識結果は、文字認識の結果得られた文字である。ここでは空白も文字として認識される（文字番号６２２を参照）。左側Ｘ座標、上側Ｙ座標、右側Ｘ座標、下側Ｙ座標は、それぞれ文字に外接する矩形の左側の辺のＸ座標、上側の辺のＹ座標、右側の辺のＸ座標、下側の辺のＹ座標である。領域番号は、文書に対して領域ごとに文字認識が行われる場合に、各文字が属する領域を特定するために用いられる識別番号である。行内位置情報は、各文字の行内での位置を示す情報である。行頭の文字には番号「１」が、行末の文字には番号「２」が、行中の文字には番号「０」が割り当てられる。サイズは、ポイントで表した各文字のフォントサイズの情報である。
【００３２】
図１の説明に戻ると、文書レイアウトデータ６ｅは、レイアウト解析により得られた文書中の文字領域のレイアウトの情報を含むデータである。図３は、文書レイアウトデータ６ｅの一例を示す図である。図３に示すように、この文書レイアウトデータ６ｅは、領域番号、左側Ｘ座標、上側Ｙ座標、右側Ｘ座標、下側Ｙ座標、開始文字番号、文字数、行数、平均原文文字サイズ、平均行間の情報を登録している。
【００３３】
領域番号は、認識された各文字領域に割り当てられた番号である。左側Ｘ座標、上側Ｙ座標、右側Ｘ座標、下側Ｙ座標は、矩形状の各文字領域の左側の辺のＸ座標、上側の辺のＹ座標、右側の辺のＸ座標、下側の辺のＹ座標である。開始文字番号は、各文字領域に含まれる文字の範囲を示す情報である。この番号は、図２に示した文字認識結果データ６ｄの文字番号と対応している。例えば、領域番号「１」の開始文字番号が「１」であり、領域番号「２」の開始文字番号が「２６」である場合には、文字認識結果データ６ｄにおいて「１」から「２５」までの文字番号に対応する文字が領域番号「１」の文字領域に含まれることになる。文字数は、各文字領域に含まれる文字の数である。行数は、各文字領域に含まれる行の数である。平均原文文字サイズは、各文字領域に含まれる文字の文字サイズの平均値である。平均行間は、各文字領域に含まれる行の行間の平均値である。なお、図３の例では、各領域の原文文字サイズの代表値として平均原文文字サイズを、各領域の行間の代表値として平均行間を採用しているが、原文文字サイズや行間の平均値を求める方法以外の方法で、各領域の原文文字サイズや行間の代表値を設定することとしてもよい。
【００３４】
ルビ付き文書データ６ｆは、文書データに含まれる単語や連語の近傍に、その単語や連語の訳がルビとして付されたＰＤＦ（Portable Document Format）形式の文書のデータである。
【００３５】
制御部７は、文書生成処理を制御する制御部である。制御部７は、読取制御部７ａ、文字領域抽出部７ｂ、文字認識処理部７ｃ、翻訳処理部７ｄ、統一度判定部７ｅ、ルビ設定部７ｆ、画像形式変換処理部７ｇ、ルビ付き文書データ生成部７ｈ、印刷制御部７ｉを有する。
【００３６】
読取制御部７ａは、画像読取部４を制御して、紙の文書の画像を読み取り、読み取った画像の画像データを生成する制御部である。読取制御部７ａは、生成した画像データを記憶部６に文書画像データ６ｃとして記憶する。
【００３７】
文字領域抽出部７ｂは、記憶部６から文書画像データ６ｃを読み出して、読み出した文書画像データ６ｃのレイアウト解析を行い、文字がある領域を抽出する処理部である。文字認識処理部７ｃは、文字領域抽出部７ｂにより抽出された領域に含まれる文字を認識する処理部である。この文字認識処理部７ｃは、文字認識の結果を文字認識結果データ６ｄとして記憶部６に記憶する。また、文字認識処理部７ｃは、文字領域抽出部７ｂにより抽出された各文字領域について、文字サイズの平均値や行間隔の平均値を算出し、算出した結果を各文字領域の座標、開始文字番号、文字数、行数の情報とともに、文書レイアウトデータ６ｅとして記憶部６に記憶する。なお、上述したように、文字認識処理部７ｃは、文字領域抽出部７ｂにより抽出された各文字領域について、文字サイズや行間隔の平均値を求める方法以外の方法で文字サイズや行間隔の代表値を設定し、その結果を各文字領域の座標、開始文字番号、文字数、行数の情報とともに、文書レイアウトデータ６ｅとして記憶部６に記憶することとしてもよい。
【００３８】
翻訳処理部７ｄは、文字認識結果データ６ｄとして記憶された文字認識結果の情報を記憶部６から読み出し、読み出した情報を用いて、画像データに含まれる単語や連語の翻訳を実行する処理部である。この翻訳処理部７ｄは、記憶部６に記憶された翻訳用辞書データ６ａを読み出し、読み出した翻訳用辞書データ６ａに登録されている言語の文法や、単語や連語の訳などの情報を参照して、翻訳を実行する。
【００３９】
統一度判定部７ｅは、記憶部６に記憶された文字認識結果データ６ｄを読み出し、読み出した文字認識結果データ６ｄを用いて、ルビを付す文書のレイアウトの統一度を判定する処理部である。具体的には、統一度判定部７ｅは、文字認識結果データ６ｄに含まれる文字サイズの情報を用いて、ルビを付す文書が、文字の大きさがほぼ揃った文書か否かを判定する。
【００４０】
図４は、文字の大きさがほぼ揃った文書１０の一例を示す図である。図５は、文字の大きさが揃っていない文書２０の一例を示す図である。図４に示す文書１０には、３つの文字領域１０ａ〜１０ｃが、図５に示す文書２０には、７つの文字領域２０ａ〜２０ｇがある。この場合、図３に示した文書レイアウトデータ６ｅには、各文字領域１０ａ〜１０ｃ、２０ａ〜２０ｇについての情報が記憶される。また、図４、５において、「○」は文書１０、２０に含まれる文字を表し、「○」の大きさは各文字の大きさを表す。図４に示す文書１０では、各文字領域１０ａ〜１０ｃの文字の大きさがほぼ揃っている。一方、図５に示す文書２０では、各文字領域２０ａ〜２０ｇの文字の大きさが揃っていない。
【００４１】
統一度判定部７ｅは、文字の大きさの分散値を算出することにより、文字の大きさがほぼ揃った文書か否かを判定する。この分散値は文書のレイアウトの統一度に対応するものであり、分散値が所定の値よりも小さいことは、統一度が所定の値よりも高いことに相当し、分散値が所定の値よりも小さくないことは、統一度が所定の値よりも高くないことに相当する。
【００４２】
図１の説明に戻ると、ルビ設定部７ｆは、文字認識結果データ６ｄや文書レイアウトデータ６ｅを参照して、単語や連語の近傍にルビとして表示される訳の文字の大きさや配置を設定する処理部である。図４に示す文書１０では文字の大きさがほぼ揃っているので、ルビ設定部７ｆは、文書に付すルビの文字の大きさを統一し、文字の大きさを一定の大きさに設定する。一方、図５に示す文書２０では文字の大きさが揃っていないので、ルビ設定部７ｆは、単語あるいは連語に含まれる文字の大きさと行間隔に応じてルビの文字の大きさを変化させる。
【００４３】
図１の説明に戻ると、画像形式変換処理部７ｇは、画像データのファイル形式を所定の形式に変換する処理部である。例えば、画像形式変換処理部７ｇは、画像データのファイル形式をＪＰＥＧ（Joint Photographic Experts Group）形式に変換する。
【００４４】
ルビ付き文書データ生成部７ｈは、画像読取部４により読み取られた文書の画像データに含まれる単語や連語にルビとして訳を付した文書データを、ＰＤＦ形式で生成する処理部である。具体的には、ルビ付き文書データ生成部７ｈは、ルビ設定部７ｆにより設定されたルビのサイズや配置の情報に基づいてルビの画像を生成し、生成したルビの画像と画像形式変換処理部７ｇによりファイル形式が変換された画像データとを合成することにより、文書データを生成する。このルビ付き文書データ生成部７ｈは、生成した文書データを記憶部６にルビ付き文書データ６ｆとして記憶する。
【００４５】
このように、ルビ付き文書データ生成部７ｈは、読み取られた文書の画像データにルビの画像を合成するので、読み取られた文書のレイアウトが損なわれることがなく、文書に含まれる単語や連語にルビを適切に付すことができる。また、広く普及しているＰＤＦ形式でルビ付き文書を生成することにより、紙媒体への印刷やさまざまなＯＳ（Operating System）の下で稼働するコンピュータでの閲覧ができるようになり、適切なサイズおよび配置でルビが付されたルビ付き文書を容易に利用することができる。
【００４６】
印刷制御部７ｉは、記憶部６ｅからルビ付き文書データ６ｆを読み出し、印刷処理部５を制御して、読み出したルビ付き文書データ６ｆの印刷を行う処理部である。
【００４７】
つぎに、本発明の実施形態に係る文書生成処理の処理手順について説明する。図６は、本発明の実施形態に係る文書生成処理の処理手順の一例を示すフローチャートである。
【００４８】
図６に示すように、まず、文書生成装置１の画像読取部４は、文書画像の読み取りを実行する（ステップＳ１０１）。そして、読取制御部７ａは、画像読取部４が読み取った画像の画像データを生成する（ステップＳ１０２）。
【００４９】
その後、文字領域抽出部７ｂは、読取制御部７ａにより生成された画像データから文字を含む文字領域を抽出する（ステップＳ１０３）。そして、文字認識処理部７ｃは、文字領域抽出部７ｂにより抽出された文字領域に含まれる文字を認識する文字認識処理を実行する（ステップＳ１０４）。続いて、翻訳処理部７ｄは、文字認識処理部７ｃにより認識された文字により構成される単語や連語の訳を生成する翻訳処理を実行する（ステップＳ１０５）。
【００５０】
そして、ルビ設定部７ｆは、翻訳処理により得られた訳をルビとして表示する際の、文字の大きさや配置を設定する処理を行う（ステップＳ１０６）。この設定処理については後に詳しく説明する。
【００５１】
その後、ルビ設定部７ｆは、ルビとして付される文字の文字コード、文字の大きさ、配置、文字の傾き、文字フォントの種類などのルビの設定情報を所定のデータ形式で生成する（ステップＳ１０７）。ここで、所定のデータ形式とは、ルビ付き画像データを生成するために適したデータ形式である。たとえば、ルビ付き画像データをＰＤＦ形式で生成する場合には、ルビの設定情報もＰＤＦ形式に適合するデータ形式で生成される。また、文字の傾きや文字フォントの種類は、ユーザからそれらの情報の入力を受け付けることにより設定される。
【００５２】
続いて、画像形式変換処理部７ｇは、ルビが付される画像データのファイル形式を所定の形式に変換する（ステップＳ１０８）。ここで、所定のデータ形式とは、例えば、ＪＰＥＧ形式である。
【００５３】
その後、ルビ付き文書データ生成部７ｈは、ルビ設定部７ｆにより生成されたルビ設定情報を用いて、画像形式変換処理部７ｇによりファイル形式が変換された画像データにルビを付し、ルビ付き画像データをＰＤＦ形式で生成する（ステップＳ１０９）。そして、印刷処理部５は、ルビ付き文書データ生成部７ｈにより生成されたルビ付き画像データを印刷し（ステップＳ１１０）、この文書生成処理を終了する。
【００５４】
つぎに、図６に示したルビ設定処理の処理手順について説明する。図７は、図６に示したルビ設定処理の処理手順の一例を示すフローチャートである。
【００５５】
図７に示すように、まず、文書生成装置１の統一度判定部７ｅは、文字サイズの分散値の算出用パラメータを取得する（ステップＳ２０１）。具体的には、統一度判定部７ｅは、各文字のサイズの情報、文字数の情報、行数の情報を記憶部６に記憶された文字認識結果データ６ｄから取得する。ここで、行数の情報は、図２に示した文字認識結果データ６ｄの行内位置情報において、行頭の文字を表す番号「１」の数を数えることにより得ることができる。統一度判定部７ｅは、文書レイアウトデータ６ｅに記憶された各文字領域における行数を足し合わせることにより、行数の情報を取得することとしてもよい。
【００５６】
そして、統一度判定部７ｅは、行ごとに平均化された文字サイズの分散値を算出する（ステップＳ２０２）。具体的には、統一度判定部７ｅは、行ｉ（１≦ｉ≦ｎ、ｎは行数）の平均文字サイズＳｉを、
Ｓｉ＝ｓｕｍ（Ｓｊｉ）／ｍｉ
により算出する。ここで、Ｓｊｉは行ｉに含まれる文字ｊ（１≦ｊ≦ｍｉ）のサイズであり、ｍｉは行ｉに含まれる文字の個数であり、ｓｕｍ（Ｓｊｉ）は、行ｉに含まれる各文字のサイズＳｊｉ（１≦ｊ≦ｍｉ）の総和である。
【００５７】
また、統一度判定部７ｅは、各行ｉの平均文字サイズＳｉの平均値Ｓａｖを
Ｓａｖ＝ｓｕｍ（Ｓｉ）／ｎ
により算出する。ここで、ｓｕｍ（Ｓｉ）は、各行ｉの平均文字サイズＳｉの総和（１≦ｉ≦ｎ）である。
【００５８】
そして、統一度判定部７ｅは、各行ｉの平均文字サイズＳｉの分散値Ｖｓを、
Ｖｓ＝ｓｕｍ（（Ｓａｖ−Ｓｉ）＾２）／ｎ
により算出する。ここで、（Ｓａｖ−Ｓｉ）＾２は、Ｓａｖ−Ｓｉの２乗を示し、ｓｕｍ（（Ｓａｖ−Ｓｉ）＾２）は、値（Ｓａｖ−Ｓｉ）＾２の総和（１≦ｉ≦ｎ）である。
【００５９】
その後、統一度判定部７ｅは、分散値Ｖｓが所定の閾値ＶｓＴ以上であるか否かを調べる（ステップＳ２０３）。図８は、分散値Ｖｓが所定の閾値ＶｓＴ以上である場合の文字サイズ分布の一例を示す図であり、図９は、分散値Ｖｓが所定の閾値ＶｓＴ未満である場合の文字サイズ分布の一例を示す図である。
【００６０】
図８に示すように、分散値Ｖｓが所定の閾値ＶｓＴ以上である場合（ステップＳ２０３においてＹＥＳの場合）、ルビ設定部７ｆは、ルビサイズを統一しない場合のルビサイズ・配置設定処理を実行し（ステップＳ２０４）、このルビ設定処理を終了する。ルビサイズを統一しない場合のルビサイズ・配置設定処理については後に詳しく説明する。
【００６１】
図９に示すように、分散値Ｖｓが所定の閾値ＶｓＴ以上でない場合（ステップＳ２０３においてＮＯの場合）、ルビ設定部７ｆは、ルビサイズを統一する場合のルビサイズ・配置設定処理を実行し（ステップＳ２０５）、このルビ設定処理を終了する。ルビサイズを統一する場合のルビサイズ・配置設定処理についても後に詳しく説明する。このように分散値を用いると、文書のレイアウトの統一度の判定を容易におこなうことができるようになる。また、分散値Ｖｓを算出するのに各行ｉ（１≦ｉ≦ｎ）の平均文字サイズＳｉを用いることとしたので、各行の特徴を重視してレイアウトの統一度の判定を行うことができる。
【００６２】
なお、ここでは、統一度判定部７ｅが、平均文字サイズＳｉを一旦算出し、算出した平均文字サイズＳｉを用いて分散値Ｓｉを算出することとしたが、平均文字サイズＳｉを算出することなく、文字サイズの分散値を算出することとしてもよい。これにより、分散値の算出を容易に行うことができる。
【００６３】
具体的には、統一度判定部７ｅは、文字サイズの分散値Ｖｓ１を
Ｖｓ１＝ｓｕｍ（（Ｓａｖ１−Ｓｑ）＾２）／ｐ
により算出する。ここで、ｐは、文書に含まれる文字の総数であり、Ｓｑ（１≦ｑ≦ｐ）は、各文字のサイズであり、Ｓａｖ１は、文字サイズＳｑ（１≦ｑ≦ｐ）の平均値であり、（Ｓａｖ１−Ｓｑ）＾２は、Ｓａｖ１−Ｓｑの２乗であり、ｓｕｍ（（Ｓａｖ１−Ｓｑ）＾２）は、値（Ｓａｖ１−Ｓｑ）＾２の総和（１≦ｑ≦ｐ）である。
【００６４】
また、文書中に複数の文字領域がある場合には、文字領域ごとに平均文字サイズを算出し、算出した平均文字サイズの分散値を算出することとしてもよい。これにより、各文字領域の特徴を重視してレイアウトの統一度の判定を行うことができる。
【００６５】
具体的には、統一度判定部７ｅは、文字サイズの分散値Ｖｓ２を
Ｖｓ２＝ｓｕｍ（（Ｓａｖ２−Ｓｔ）＾２）／ｓ
により算出する。ここで、ｓは、文書に含まれる文字領域の数であり、Ｓｔ（１≦ｔ≦ｓ）は、各文字領域ｓにおける文字サイズの平均値であり、Ｓａｖ２は、値Ｓｔ（１≦ｔ≦ｓ）の平均値であり、（Ｓａｖ２−Ｓｔ）＾２は、Ｓａｖ２−Ｓｔの２乗であり、ｓｕｍ（（Ｓａｖ２−Ｓｔ）＾２）は、値（Ｓａｖ２−Ｓｔ）＾２の総和（１≦ｔ≦ｓ）である。
【００６６】
そして、ルビ設定部７ｆは、分散値Ｖｓ１あるいはＶｓ２が所定の閾値以上である場合に、ルビサイズを統一しない場合のルビサイズ・配置設定処理を実行し、分散値Ｖｓ１あるいは分散値Ｖｓ２が所定の閾値以上でない場合に、ルビサイズを統一する場合のルビサイズ・配置設定処理を実行する。
【００６７】
さらに、ここでは、統一度判定部７ｅが、文字サイズの分散値を算出することにより、ルビサイズを統一するか否かの判定をすることとしたが、統一度判定部７ｅが、文書の行間隔や各行に含まれる文字の数の分散値を算出することにより、ルビサイズを統一するか否かの判定をすることとしてもよい。
【００６８】
この場合、文書の行間隔の分散値ＶＩは
ＶＩ＝ｓｕｍ（（Ｉａｖ−Ｉｉ）＾２）／（ｎ−１）
を用いて算出される。ここで、Ｉｉは、行ｉ（１≦ｉ≦ｎ−１）と行ｉ＋１との間の間隔であり、Ｉａｖは、行間隔Ｉｉの平均値
Ｉａｖ＝ｓｕｍ（Ｉｉ）／（ｎ−１）
（ここで、ｓｕｍ（Ｉｉ）は、行間隔Ｉｉの総和（１≦ｉ≦ｎ−１））であり、（Ｉａｖ−Ｉｉ）＾２は、Ｉａｖ−Ｉｉの２乗であり、ｓｕｍ（（Ｉａｖ−Ｉｉ）＾２）は、値（Ｉａｖ−Ｉｉ）＾２の総和（１≦ｉ≦ｎ−１）である。
【００６９】
また、各行に含まれる文字の数の分散値ＶＮは
ＶＮ＝ｓｕｍ（（Ｎａｖ−Ｎｉ）＾２）／ｎ
を用いて算出される。ここで、ｎは、文書に含まれる行の数であり、Ｎｉは、各行ｉ（１≦ｉ≦ｎ）に含まれる文字の数であり、Ｎａｖは、文字の数Ｎｉの平均値
Ｎａｖ＝ｓｕｍ（Ｎｉ）／ｎ
（ここで、ｓｕｍ（Ｎｉ）は、文字の数Ｎｉの総和（１≦ｉ≦ｎ））であり、（Ｎａｖ−Ｎｉ）＾２は、Ｎａｖ−Ｎｉの２乗であり、ｓｕｍ（（Ｎａｖ−Ｎｉ）＾２）は、値（Ｎａｖ−Ｎｉ）＾２の総和（１≦ｉ≦ｎ）である。
【００７０】
そして、ルビ設定部７ｆは、分散値ＶＩあるいはＶＮが所定の閾値以上である場合に、ルビサイズを統一しない場合のルビサイズ・配置設定処理を実行し、分散値ＶＩあるいは分散値ＶＮが所定の閾値以上でない場合に、ルビサイズを統一する場合のルビサイズ・配置設定処理を実行する。このように、文書の行間隔や各行に含まれる文字の数などの分散を用いることにより、文書のレイアウトの統一度の判定を柔軟に行うことができる。
【００７１】
また、図７では、統一度判定部７ｅは、文字サイズの分散値を算出することにより文書に含まれる文字の大きさがほぼ揃っているか否かを判定したが、文書に含まれる文字の大きさがほぼ揃っているか否かについての情報の入力をユーザから受け付けることにより上記判定を行うこととしてもよい。これにより、ルビの表示にユーザの意図をより的確に反映することができる。
【００７２】
さらに、ここでは、文書が１ページの文書である場合について説明したが、文書が複数のページからなる文書であっても、複数のページ全体に対して文字サイズや各行の間隔、各行の文字数の平均値を算出し、複数のページ全体に対する文字サイズや各行の間隔、各行の文字数の分散値を算出することにより、複数のページからなる文書のレイアウトの統一度を判定し、ルビサイズを統一するか否かを判定することとしてもよい。
【００７３】
つぎに、図７に示したルビサイズを統一しない場合のルビサイズ・配置設定処理の処理手順について説明する。図１０〜図１７は、ルビサイズを統一しない場合のルビサイズ・配置設定処理の処理手順の一例を示すフローチャートである。また、図１８は、以降の説明で用いられる各種の変数について説明する図である。
【００７４】
図１８には、単語「color」の訳としてルビ「色」が付され、連語「identified as」の訳としてルビ「〜が〜であると認識する」が付され、単語「vermilion」の訳としてルビ「橙」が付された状態が示されている。単語あるいは連語には、番号が割り振られる。以下では、ｋ番目の単語あるいは連語を単語ｋあるいは連語ｋと呼び（１≦ｋ≦Ｎ，Ｎは、ルビのサイズおよび配置が設定される単語あるいは連語の数）、単語ｋあるいは連語ｋに付されるルビをルビｒ（ｋ）と呼ぶ。
【００７５】
ここで、Ｘ（ｋ−１）、Ｘ（ｋ）、Ｘ（ｋ＋１）は、それぞれ単語ｋ−１あるいは連語ｋ−１、単語ｋあるいは連語ｋ、単語ｋ＋１あるいは連語ｋ＋１の最初の文字に外接する矩形領域の左端のＸ座標である（以下、単語あるいは連語の左端のＸ座標と呼ぶ。）。Ｌ（ｋ−１）、Ｌ（ｋ）、Ｌ（ｋ＋１）は、それぞれ単語ｋ−１あるいは連語ｋ−１、単語ｋあるいは連語ｋ、単語ｋ＋１あるいは連語ｋ＋１の最初の文字に外接する矩形領域の左端のＸ座標と、最後の文字に外接する矩形領域の右端のＸ座標との差（以下、単語あるいは連語の長さと呼ぶ。）である。Ｌｇは、単語間、連語間、あるいは単語と連語との間に設けられる空白の幅である。
【００７６】
また、Ｘｒ（ｋ−１）、Ｘｒ（ｋ）、Ｘｒ（ｋ＋１）は、それぞれ単語ｋ−１あるいは連語ｋ−１、単語ｋあるいは連語ｋ、単語ｋ＋１あるいは連語ｋ＋１に対応するルビの最初の文字に外接する矩形領域の左端のＸ座標（以下、ルビの左端のＸ座標と呼ぶ。）である。Ｌｒ（ｋ−１）、Ｌｒ（ｋ）、Ｌｒ（ｋ＋１）は、それぞれ単語ｋ−１あるいは連語ｋ−１、単語ｋあるいは連語ｋ、単語ｋ＋１あるいは連語ｋ＋１に対応するルビの最初の文字に外接する矩形領域の左端のＸ座標と、最後の文字に外接する矩形領域の右端のＸ座標との差（以下、ルビの長さと呼ぶ。）である。
【００７７】
図１０に示すように、まず、文書生成装置１のルビ設定部７ｆは、ルビの文字サイズを設定する（ステップＳ３０１）。具体的には、ルビ設定部７ｆは、単語あるいは連語の行間隔と、単語あるいは連語に含まれる文字のフォントの縦方向の長さとを比較する。
【００７８】
そして、行間隔が文字のフォントの縦方向の長さの４０％に満たないときは、ルビ設定部７ｆは、ルビとして付される文字のフォントの縦方向の長さが、単語あるいは連語に含まれる文字のフォントの縦方向の長さの４０％となるよう、ルビとして付される文字のサイズを設定する。行間間隔が文字のフォントの縦方向の長さの８０％を超えるときは、ルビ設定部７ｆは、ルビとして付される文字のフォントの縦方向の長さが、単語あるいは連語に含まれる文字のフォントの縦方向の長さの８０％となるよう、ルビとして付される文字のサイズを設定する。また、行間隔が文字のフォントの縦方向の長さの４０〜８０％であるときは、ルビ設定部７ｆは、ルビとして付される文字のフォントの縦方向の長さが行間隔と同じ長さとなるよう、ルビとして付される文字のサイズを設定する。なお、この設定方法において、４０％、８０％とは別の閾値が用いられることとしてよい。
【００７９】
続いて、ルビ設定部７ｆは、ルビの左端のＸ座標Ｘｒ（ｋ）（１≦ｋ≦Ｎ）を設定する（ステップＳ３０２）。具体的には、ルビ設定部７ｆは、ルビの左端のＸ座標Ｘｒ（ｋ）を単語あるいは連語の左端のＸ座標Ｘ（ｋ）に設定する。
【００８０】
そして、ルビ設定部７ｆは、ルビの長さＬｒ（ｋ）（１≦ｋ≦Ｎ）を算出する（ステップＳ３０３）。具体的には、ルビ設定部７ｆは、ルビｒ（ｋ）に含まれる文字の幅と、文字間に設けられる空白の幅、文字の数の情報から、ルビｒ（ｋ）の長さＬｒ（ｋ）を算出する。その後、ルビ設定部７ｆは、単語あるいは連語の識別番号ｋを１に設定する（ステップＳ３０４）。
【００８１】
続いて、ルビ設定部７ｆは、単語ｋあるいは連語ｋの長さＬ（ｋ）が、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも短いか否かを判定する（ステップＳ３０５）。長さＬ（ｋ）が長さＬｒ（ｋ）よりも短くない場合（ステップＳ３０５においてＮＯの場合）、単語ｋあるいは連語ｋの下部にルビｒ（ｋ）を横方向に縮小することなく配置することが可能であるので、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定する（ステップＳ３０６）。ここで、圧縮率ｃ（ｋ）とは、ルビｒ（ｋ）を配置する十分なスペースが無い場合に、ルビを横方向に縮小するために用いられる値である。ルビｒ（ｋ）を配置する十分なスペースが無い場合、ルビｒ（ｋ）は、長さがＬｒ（ｋ）／ｃ（ｋ）に修正され、修正された長さで配置される。
【００８２】
その後、図１７に示されるように、ルビ設定部７ｆは、ルビｒ（ｋ）の下端のＹ座標を設定する（ステップＳ１００７）。具体的には、ルビ設定部７ｆは、行間の中央部分にルビｒ（ｋ）が配置されるように、ルビｒ（ｋ）の下端のＹ座標を設定する。単語ｋあるいは連語ｋが最下行である場合には、ルビ設定部７ｆは、単語ｋあるいは連語ｋとルビｒ（ｋ）との間の間隔が、その上にある行における間隔と同じ間隔となるようルビｒ（ｋ）の下端のＹ座標を設定する。行が１行しかない場合は、ルビ設定部７ｆは、単語ｋあるいは連語ｋとルビｒ（ｋ）との間に所定の間隔が空くように、ルビｒ（ｋ）の下端のＹ座標を設定する。
【００８３】
あるいは、ルビ設定部７ｆは、単語ｋあるいは連語ｋの下端のＹ座標からルビｒ（ｋ）を表示するフォントの高さ方向のサイズの分だけ下にずれた位置をルビｒ（ｋ）の下端のＹ座標として設定することとしてもよい。
【００８４】
そして、ルビ設定部７ｆは、ｋがＮであるか否かを調べる（ステップＳ１００８）。ｋがＮである場合（ステップＳ１００８においてＹＥＳの場合）、ルビサイズを統一しない場合のルビサイズ・配置設定処理を終了する。ｋがＮでない場合（ステップＳ１００８においてＮＯの場合）、ルビ設定部７ｆは、ｋを１だけ増やし（ステップＳ１００９）、図１０のステップＳ３０５に移行して、その後の処理を継続する。
【００８５】
図１０のステップＳ３０５において、長さＬ（ｋ）が長さＬｒ（ｋ）よりも短い場合（ステップＳ３０５においてＹＥＳの場合）、単語あるいは連語ｋの下部にルビｒ（ｋ）を配置するにはルビｒ（ｋ）を横方向に縮小する必要があるので、ルビ設定部７ｆは、ルビの圧縮率ｃ（ｋ）を単語ｋあるいは連語ｋの長さに対するルビｒ（ｋ）の長さの比Ｌｒ（ｋ）／Ｌ（ｋ）に設定する（ステップＳ３０７）。
【００８６】
そして、ルビ設定部７ｆは、圧縮率ｃ（ｋ）が所定の閾値よりも大きいか否かを判定する（ステップＳ３０８）。この閾値は、ルビｒ（ｋ）の文字サイズが必要以上に小さくなり、ルビｒ（ｋ）の読み易さが悪化するのを抑制するために設定される値である。圧縮率ｃ（ｋ）が所定の閾値よりも大きくない場合（ステップＳ３０８においてＮＯの場合）、図１７のステップＳ１００７に移行し、ルビ設定部７ｆは、それ以降の処理を継続する。
【００８７】
図１０のステップＳ３０８において、圧縮率ｃ（ｋ）が所定の閾値よりも大きい場合（ステップＳ３０８においてＹＥＳの場合）、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）が無いか否かを判定する（ステップＳ３０９）。
【００８８】
単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）が無い場合（ステップＳ３０９においてＹＥＳの場合）、ルビ設定部７ｆは、単語ｋあるいは連語ｋの長さＬ（ｋ）と、単語ｋ＋１あるいは連語ｋ＋１の長さＬ（ｋ＋１）と、空白の幅Ｌｇとの和Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ３１０）。
【００８９】
和Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ３１０においてＮＯの場合）、単語ｋあるいは連語ｋの下部にある部分に加えて、単語ｋ＋１あるいは連語ｋ＋１の下部にある空白部分を利用することにより、ルビｒ（ｋ）を横方向に縮小することなく配置することが可能であるので、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定し（ステップＳ３０６）、図１７のステップＳ１００７に移行して、それ以降の処理を継続する。
【００９０】
和Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ３１０においてＹＥＳの場合）、たとえ単語ｋ＋１あるいは連語ｋ＋１の下部にある空白部分を利用したとしても、横方向に縮小することなくルビｒ（ｋ）を配置することはできないので、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を比Ｌｒ（ｋ）／（Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇ）に再設定する（ステップＳ３１１）。
【００９１】
そして、ルビ設定部７ｆは、圧縮率ｃ（ｋ）が所定の閾値よりも大きいか否かを判定する（ステップＳ３１２）。圧縮率ｃ（ｋ）が所定の閾値よりも大きくない場合（ステップＳ３１２においてＮＯの場合）、図１７のステップＳ１００７に移行して、ルビ設定部７ｆは、その後の処理を継続する。
【００９２】
図１０のステップＳ３１２において、圧縮率ｃ（ｋ）が所定の閾値よりも大きい場合（ステップＳ３１２においてＹＥＳの場合）、図１１に示すように、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無いか否かを判定する（ステップＳ４０１）。
【００９３】
単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無い場合（ステップＳ４０１においてＹＥＳの場合）、ルビ設定部７ｆは、単語ｋ−１あるいは連語ｋ−１の長さＬ（ｋ−１）と、単語ｋあるいは連語ｋの長さＬ（ｋ）と、単語ｋ＋１あるいは連語ｋ＋１の長さＬ（ｋ＋１）と、２つの空白の幅２Ｌｇとの和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ４０２）。
【００９４】
和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ４０２においてＮＯの場合）、単語ｋあるいは連語ｋの下部にある部分に加えて、単語ｋ−１あるいは連語ｋ−１の下部にある空白部分、および、単語ｋ＋１あるいは連語ｋ＋１の下部にある空白部分を利用することにより、ルビｒ（ｋ）を横方向に縮小することなく配置することが可能であるので、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定する（ステップＳ４０３）。
【００９５】
そして、ルビ設定部７ｆは、単語ｋあるいは連語ｋの中央の下部にルビｒ（ｋ）が配置されるようにするため、Ａ＝Ｘ（ｋ）＋Ｌ（ｋ）／２−Ｌｒ（ｋ）／２を算出する（ステップＳ４０４）。ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）をＡに設定することにより、単語ｋあるいは連語ｋの中央のＸ座標と、ルビｒ（ｋ）の中央のＸ座標とを一致させることができる。
【００９６】
その後、ルビ設定部７ｆは、Ａの値に応じて、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）を設定する（ステップＳ４０５）。具体的には、ルビ設定部７ｆは、Ａが単語ｋ−１あるいは連語ｋ−１の左端のＸ座標Ｘ（ｋ−１）よりも小さい場合、Ｘｒ（ｋ）をＸ（ｋ−１）に設定する。また、ルビ設定部７ｆは、Ａが、Ｘ（ｋ−１）以上で、Ｘ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ）未満である場合、Ｘｒ（ｋ）をＡに設定する。また、ルビ設定部７ｆは、Ａが、Ｘ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ）以上である場合、Ｘｒ（ｋ）をＸ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ）に設定する。
【００９７】
その後、図１７のステップＳ１００７に移行し、ルビ設定部７ｆは、それ以降の処理を継続する。
【００９８】
図１１のステップＳ４０２において、和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ４０２においてＹＥＳの場合）、たとえ単語ｋ−１あるいは連語ｋ−１の下部にある空白部分、および、単語ｋ＋１あるいは連語ｋ＋１の下部にある空白部分を利用したとしても、ルビｒ（ｋ）を横方向に縮小することなく配置することができないので、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を比Ｌｒ（ｋ）／（Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ）に設定する（ステップＳ４０６）。
【００９９】
そして、ルビ設定部７ｆは、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）をＸ（ｋ−１）に設定する（ステップＳ４０７）。その後、図１７のステップＳ１００７に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１００】
図１１のステップＳ４０１において、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無いという条件が満たされない場合（ステップＳ４０１においてＮＯの場合）、図１２に示すように、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たすか否かを判定する（ステップＳ５０１）。
【０１０１】
ここで、Ｌｒｇは、ルビの配置位置を設定する場合にルビ間に設けるべき空白の幅の最小値である。すなわち、式Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇは、単語ｋ−１あるいは連語ｋ−１の下部に、ルビｒ（ｋ−１）およびルビ間に設けるべき空白を配置したとしても、依然としてルビｒ（ｋ）を配置するために使用可能な領域が残っているということを示している。
【０１０２】
単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たす場合（ステップＳ５０１においてＹＥＳの場合）、ルビ設定部７ｆは、和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇから、ルビｒ（ｋ−１）の長さＬｒ（ｋ−１）、および、ルビ間に設けるべき空白の幅の最小値Ｌｒｇを差し引いた値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ５０２）。
【０１０３】
値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ５０２においてＮＯの場合）、単語ｋあるいは連語ｋの下部にある部分に加えて、単語ｋ−１あるいは連語ｋ−１の下部の一部にある空白部分、および、単語ｋ＋１あるいは連語ｋ＋１の下部にある空白部分を利用することにより、ルビｒ（ｋ）を横方向に縮小することなく配置することが可能であるので、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定する（ステップＳ５０３）。
【０１０４】
そして、ルビ設定部７ｆは、Ａ＝Ｘ（ｋ）＋Ｌ（ｋ）／２−Ｌｒ（ｋ）／２を算出する（ステップＳ５０４）。続いて、ルビ設定部７ｆは、Ａの値に応じて、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）を設定する（ステップＳ５０５）。具体的には、ルビ設定部７ｆは、値Ａが、Ｘ（ｋ−１）＋Ｌｒ（ｋ−１）＋Ｌｒｇよりも小さい場合、Ｘｒ（ｋ）をＸ（ｋ−１）＋Ｌｒ（ｋ−１）＋Ｌｒｇに設定する。また、ルビ設定部７ｆは、値Ａが、Ｘ（ｋ−１）＋Ｌｒ（ｋ−１）＋Ｌｒｇ以上で、Ｘ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ）未満である場合、Ｘｒ（ｋ）をＡに設定する。また、ルビ設定部７ｆは、値Ａが、Ｘ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ）以上である場合、Ｘｒ（ｋ）をＸ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ）に設定する。
【０１０５】
その後、図１７のステップＳ１００７に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１０６】
図１２のステップＳ５０２において、値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ５０２においてＹＥＳの場合）、たとえ単語ｋ−１あるいは連語ｋ−１の下部の一部にある空白部分、および、単語ｋ＋１あるいは連語ｋ＋１の下部にある空白部分を利用したとしても、ルビｒ（ｋ）を横方向に縮小することなく配置することができないので、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を比Ｌｒ（ｋ）／（Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇ）に設定する（ステップＳ５０６）。
【０１０７】
そして、ルビ設定部７ｆは、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）をＸ（ｋ−１）＋Ｌｒ（ｋ−１）＋Ｌｒｇに設定する（ステップＳ５０７）。その後、図１７のステップＳ１００７に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１０８】
図１２のステップＳ５０１において、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たさない場合（ステップＳ５０１においてＮＯの場合）、図１７のステップＳ１００７に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１０９】
図１０のステップＳ３０９において、単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）が無いという条件が満たされない場合（ステップＳ３０９においてＮＯの場合）、図１３に示すように、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無いか否かを判定する（ステップＳ６０１）。
【０１１０】
単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無い場合（ステップＳ６０１においてＹＥＳの場合）、ルビ設定部７ｆは、単語ｋ−１あるいは連語ｋ−１の長さＬ（ｋ−１）と、単語ｋあるいは連語ｋの長さＬ（ｋ）と、空白の幅Ｌｇとの和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ６０２）。
【０１１１】
和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ６０２においてＮＯの場合）、単語ｋあるいは連語ｋの下部にある部分に加えて、単語ｋ−１あるいは連語ｋ−１の下部にある空白部分を利用することにより、ルビｒ（ｋ）を横方向に縮小することなく配置することが可能であるので、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定する（ステップＳ６０３）。
【０１１２】
そして、ルビ設定部７ｆは、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）をＸ（ｋ）＋Ｌ（ｋ）−Ｌｒ（ｋ）に設定する（ステップＳ６０４）。その後、図１７のステップＳ１００７に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１１３】
図１３のステップＳ６０２において、和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ６０２においてＹＥＳの場合）、たとえ単語ｋ−１あるいは連語ｋ−１の下部にある空白部分を利用したとしても、ルビｒ（ｋ）を横方向に縮小することなく配置することはできないので、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を比Ｌｒ（ｋ）／（Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇ）に再設定する（ステップＳ６０５）。
【０１１４】
そして、ルビ設定部７ｆは、圧縮率ｃ（ｋ）が所定の閾値よりも大きいか否かを判定する（ステップＳ６０６）。圧縮率ｃ（ｋ）が所定の閾値よりも大きくない場合（ステップＳ６０６においてＮＯの場合）、図１７のステップＳ１００７に移行して、ルビ設定部７ｆは、その後の処理を継続する。
【０１１５】
図１３のステップＳ６０６において、圧縮率ｃ（ｋ）が所定の閾値よりも大きい場合（ステップＳ６０６においてＹＥＳの場合）、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）があり、Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇという条件を満たすか否かを判定する（ステップＳ６０７）。式Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇは、単語ｋ＋１あるいは連語ｋ＋１の下部に、ルビｒ（ｋ＋１）およびルビ間に設けるべき空白を配置したとしても、依然としてルビｒ（ｋ）を配置するために使用可能な領域が残っているということを示している。
【０１１６】
単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）があり、Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇという条件を満たす場合（ステップＳ６０７においてＹＥＳの場合）、図１４に示すように、ルビ設定部７ｆは、和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇから、ルビｒ（ｋ＋１）の長さＬｒ（ｋ＋１）、および、ルビ間に設けるべき空白の幅の最小値Ｌｒｇを差し引いた値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ７０１）。
【０１１７】
値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ７０１においてＮＯの場合）、単語ｋあるいは連語ｋの下部にある部分に加えて、単語ｋ−１あるいは連語ｋ−１の下部にある空白部分、および、単語ｋ＋１あるいは連語ｋ＋１の下部の一部にある空白部分を利用することにより、ルビｒ（ｋ）を横方向に縮小することなく配置することが可能であるので、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定する（ステップＳ７０２）。
【０１１８】
そして、ルビ設定部７ｆは、Ａ＝Ｘ（ｋ）＋Ｌ（ｋ）／２−Ｌｒ（ｋ）／２を算出する（ステップＳ７０３）。続いて、ルビ設定部７ｆは、Ａの値に応じて、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）、および、ルビｒ（ｋ＋１）の左端のＸ座標Ｘｒ（ｋ＋１）を設定する（ステップＳ７０４）。
【０１１９】
具体的には、ルビ設定部７ｆは、値Ａが、Ｘ（ｋ−１）よりも短い場合、Ｘｒ（ｋ）をＸ（ｋ−１）に設定し、Ｘｒ（ｋ＋１）をＸｒ（ｋ）＋Ｌｒ（ｋ）＋Ｌｒｇに設定する。また、ルビ設定部７ｆは、値Ａが、Ｘ（ｋ−１）以上で、Ｘ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ＋１）−Ｌｒｇ−Ｌｒ（ｋ）未満である場合、Ｘｒ（ｋ）をＡに設定し、Ｘｒ（ｋ＋１）をＸｒ（ｋ）＋Ｌｒ（ｋ）＋Ｌｒｇに設定する。また、ルビ設定部７ｆは、値Ａが、Ｘ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ＋１）−Ｌｒｇ−Ｌｒ（ｋ）以上である場合、Ｘｒ（ｋ）をＸ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ＋１）−Ｌｒｇ−Ｌｒ（ｋ）に設定し、Ｘｒ（ｋ＋１）をＸｒ（ｋ）＋Ｌｒ（ｋ）＋Ｌｒｇに設定する。
【０１２０】
その後、図１７のステップＳ１００７に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１２１】
図１４のステップＳ７０１において、値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ７０１においてＹＥＳの場合）、たとえ単語ｋ−１あるいは連語ｋ−１の下部にある空白部分、および、単語ｋ＋１あるいは連語ｋ＋１の下部の一部にある空白部分を利用したとしても、ルビｒ（ｋ）を横方向に縮小することなく配置することができないので、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を比Ｌｒ（ｋ）／（Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇ）に設定する（ステップＳ７０５）。
【０１２２】
そして、ルビ設定部７ｆは、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）をＸ（ｋ−１）に設定し、ルビｒ（ｋ＋１）の左端のＸ座標Ｘｒ（ｋ＋１）をＸｒ（ｋ）＋Ｌｒ（ｋ）＋Ｌｒｇに設定する（ステップＳ７０６）。その後、図１７のステップＳ１００７に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１２３】
図１３のステップＳ６０１において、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無いという条件が満たされない場合（ステップＳ６０１においてＮＯの場合）、図１５に示すように、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）があり、Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇという条件を満たすか否かを判定する（ステップＳ８０１）。
【０１２４】
単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）があり、Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇという条件を満たす場合（ステップＳ８０１においてＹＥＳの場合）、ルビ設定部７ｆは、和Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇから、ルビｒ（ｋ＋１）の長さＬｒ（ｋ＋１）、および、ルビ間に設けるべき空白の幅の最小値Ｌｒｇを差し引いた値Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ８０２）。
【０１２５】
値Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ８０２においてＮＯの場合）、単語ｋあるいは連語ｋの下部にある部分に加えて、単語ｋ＋１あるいは連語ｋ＋１の下部の一部にある空白部分を利用することにより、ルビｒ（ｋ）を横方向に縮小することなく配置することが可能であるので、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定する（ステップＳ８０３）。
【０１２６】
そして、ルビ設定部７ｆは、ルビｒ（ｋ＋１）の左端のＸ座標Ｘｒ（ｋ＋１）をＸ（ｋ）＋Ｌｒ（ｋ）＋Ｌｒｇに設定する（ステップＳ８０４）。その後、図１７のステップＳ１００７に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１２７】
図１９は、単語ｋ＋１あるいは連語ｋ＋１の下部の一部にある空白部分を利用するルビの配置の一例について説明する図である。図１９は、図１５のステップＳ８０２においてＮＯと判定された場合のルビｒ（ｋ）の配置例であり、ルビｒ（ｋ）は横方向に縮小されることなく配置され、ルビｒ（ｋ＋１）はルビｒ（ｋ）とＬｒｇの間隔を空けて配置される。
【０１２８】
図１５のステップＳ８０２において、値Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ８０２においてＹＥＳの場合）、たとえ単語ｋ＋１あるいは連語ｋ＋１の下部の一部にある空白部分を利用したとしても、ルビｒ（ｋ）を横方向に縮小することなく配置することができないので、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を比Ｌｒ（ｋ）／（Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇ）に設定する（ステップＳ８０５）。
【０１２９】
そして、ルビ設定部７ｆは、圧縮率ｃ（ｋ）が所定の閾値よりも大きいか否かを判定する（ステップＳ８０６）。圧縮率ｃ（ｋ）が所定の閾値よりも大きくない場合（ステップＳ８０６においてＮＯの場合）、ルビ設定部７ｆは、ルビｒ（ｋ＋１）の左端のＸ座標Ｘｒ（ｋ＋１）をＸ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ＋１）に設定する（ステップＳ８０７）。その後、図１７のステップＳ１００７に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１３０】
図２０は、単語ｋ＋１あるいは連語ｋ＋１の下部の一部にある空白部分を利用するルビの配置の一例について説明する図である。図２０は、図１５のステップＳ８０２においてＹＥＳと判定され、ステップＳ８０６においてＮＯと判定された場合のルビｒ（ｋ）の配置例であり、ルビｒ（ｋ）は圧縮率ｃ（ｋ）だけ横方向に縮小されて配置され、ルビｒ（ｋ＋１）は左端のＸ座標が単語ｋ＋１あるいは連語ｋ＋１の左端のＸ座標と一致するよう配置される。
【０１３１】
図１５のステップＳ８０６において、圧縮率ｃ（ｋ）が所定の閾値よりも大きい場合（ステップＳ８０６においてＹＥＳの場合）、図１６に示すように、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たすか否かを判定する（ステップＳ９０１）。
【０１３２】
単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たす場合（ステップＳ９０１においてＹＥＳの場合）、ルビ設定部７ｆは、和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇから、ルビｒ（ｋ−１）の長さＬｒ（ｋ−１）、ルビｒ（ｋ＋１）の長さＬｒ（ｋ＋１）、および、ルビ間に設けるべき２つの空白の幅の最小値２Ｌｒｇを差し引いた値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒ（ｋ＋１）−２Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ９０２）。
【０１３３】
値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒ（ｋ＋１）−２Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ９０２においてＮＯの場合）、単語ｋあるいは連語ｋの下部にある部分に加えて、単語ｋ−１あるいは連語ｋ−１の下部の一部にある空白部分、および、単語ｋ＋１あるいは連語ｋ＋１の下部の一部にある空白部分を利用することにより、ルビｒ（ｋ）を横方向に縮小することなく配置することが可能であるので、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定する（ステップＳ９０３）。
【０１３４】
そして、ルビ設定部７ｆは、Ａ＝Ｘ（ｋ）＋Ｌ（ｋ）／２−Ｌｒ（ｋ）／２を算出する（ステップＳ９０４）。続いて、ルビ設定部７ｆは、Ａの値に応じて、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）、および、ルビｒ（ｋ＋１）の左端のＸ座標Ｘｒ（ｋ＋１）を設定する（ステップＳ９０５）。
【０１３５】
具体的には、ルビ設定部７ｆは、値Ａが、Ｘ（ｋ−１）＋Ｌｒ（ｋ−１）＋Ｌｒｇよりも小さい場合、Ｘｒ（ｋ）をＸ（ｋ−１）＋Ｌｒ（ｋ−１）＋Ｌｒｇに設定し、Ｘｒ（ｋ＋１）をＸｒ（ｋ）＋Ｌｒ（ｋ）＋Ｌｒｇに設定する。また、ルビ設定部７ｆは、値Ａが、Ｘ（ｋ−１）＋Ｌｒ（ｋ−１）＋Ｌｒｇ以上で、Ｘ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ＋１）−Ｌｒｇ−Ｌｒ（ｋ）未満である場合、Ｘｒ（ｋ）をＡに設定し、Ｘｒ（ｋ＋１）をＸｒ（ｋ）＋Ｌｒ（ｋ）＋Ｌｒｇに設定する。また、ルビ設定部７ｆは、値Ａが、Ｘ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ＋１）−Ｌｒｇ−Ｌｒ（ｋ）以上である場合、Ｘｒ（ｋ）をＸ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ＋１）−Ｌｒｇ−Ｌｒ（ｋ）に設定し、Ｘｒ（ｋ＋１）をＸｒ（ｋ）＋Ｌｒ（ｋ）＋Ｌｒｇに設定する。
【０１３６】
その後、図１７のステップＳ１００７に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１３７】
図２１は、単語ｋ−１あるいは連語ｋ−１の下部の一部にある空白部分、および、単語ｋ＋１あるいは連語ｋ＋１の下部の一部にある空白部分を利用するルビの配置の一例について説明する図である。図２１は、図１６のステップＳ９０２においてＮＯと判定された場合のルビｒ（ｋ）の配置例であり、ルビｒ（ｋ）は横方向に縮小されることなく配置され、ルビｒ（ｋ＋１）はルビｒ（ｋ）とＬｒｇの間隔を空けて配置される。
【０１３８】
図１６のステップＳ９０２において、値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒ（ｋ＋１）−２Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ９０２においてＹＥＳの場合）、たとえ単語ｋ−１あるいは連語ｋ−１の下部の一部にある空白部分、および、単語ｋ＋１あるいは連語ｋ＋１の下部の一部にある空白部分を利用したとしても、ルビｒ（ｋ）を横方向に縮小することなく配置することができないので、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を比Ｌｒ（ｋ）／（Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒ（ｋ＋１）−２Ｌｒｇ）に設定する（ステップＳ９０６）。
【０１３９】
そして、ルビ設定部７ｆは、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）をＸ（ｋ−１）＋Ｌｒ（ｋ−１）＋Ｌｒｇに設定し、ルビｒ（ｋ＋１）の左端のＸ座標Ｘｒ（ｋ＋１）をＸ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ＋１）に設定する（ステップＳ９０７）。その後、図１７のステップＳ１００７に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１４０】
図１６のステップＳ９０１において、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たさない場合（ステップＳ９０１においてＮＯの場合）、図１７のステップＳ１００７に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１４１】
図１５のステップＳ８０１において、単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）があり、Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇという条件を満たさない場合（ステップＳ８０１においてＮＯの場合）、図１７に示すように、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たすか否かを判定する（ステップＳ１００１）。
【０１４２】
単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たす場合（ステップＳ１００１においてＹＥＳの場合）、ルビ設定部７ｆは、和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇから、ルビｒ（ｋ−１）の長さＬｒ（ｋ−１）、および、ルビ間に設けるべき空白の幅の最小値Ｌｒｇを差し引いた値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ１００２）。
【０１４３】
値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ１００２においてＮＯの場合）、単語ｋあるいは連語ｋの下部にある部分に加えて、単語ｋ−１あるいは連語ｋ−１の下部の一部にある空白部分を利用することにより、ルビｒ（ｋ）を横方向に縮小することなく配置することが可能であるので、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定する（ステップＳ１００３）。
【０１４４】
そして、ルビ設定部７ｆは、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）をＸ（ｋ）＋Ｌ（ｋ）−Ｌｒ（ｋ）に設定する（ステップＳ１００４）。続いて、ステップＳ１００７に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１４５】
図２２は、単語ｋ−１あるいは連語ｋ−１の下部の一部にある空白部分を利用するルビの配置の一例について説明する図である。図２２は、図１７のステップＳ１００２においてＮＯと判定された場合のルビｒ（ｋ）の配置例であり、ルビｒ（ｋ）は横方向に縮小されることなく配置され、ルビｒ（ｋ）はルビｒ（ｋ−１）とＬｒｇ以上の間隔を空けて配置される。
【０１４６】
図１７のステップＳ１００２において、値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ１００２においてＹＥＳの場合）、たとえ単語ｋ−１あるいは連語ｋ−１の下部の一部にある空白部分を利用したとしても、ルビｒ（ｋ）を横方向に縮小することなく配置することができないので、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を比Ｌｒ（ｋ）／（Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇ）に設定する（ステップＳ１００５）。
【０１４７】
そして、ルビ設定部７ｆは、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）をＸ（ｋ−１）＋Ｌｒ（ｋ−１）＋Ｌｒｇに設定する（ステップＳ１００６）。続いて、ステップＳ１００７に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１４８】
図２３は、単語ｋ−１あるいは連語ｋ−１の下部の一部にある空白部分を利用するルビの配置の一例について説明する図である。図２３は、図１７のステップＳ１００２においてＹＥＳと判定された場合のルビｒ（ｋ）の配置例であり、ルビｒ（ｋ）は圧縮率ｃ（ｋ）だけ横方向に縮小されて配置され、ルビｒ（ｋ）はルビｒ（ｋ−１）とＬｒｇの間隔を空けて配置される。
【０１４９】
図１７のステップＳ１００１において、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たさない場合（ステップＳ１００１においてＮＯの場合）、ステップＳ１００７に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１５０】
以上のように、ルビ設定部７ｆは、圧縮率ｃ（ｋ）（１≦ｋ≦Ｎ）が所定の閾値よりも大きい場合であって、単語ｋあるいは連語ｋの左隣または右隣にある単語ｋ−１、ｋ＋１あるいは連語ｋ−１、ｋ＋１に対してルビｒ（ｋ−１）、ｒ（ｋ＋１）を付す必要がないか、単語ｋあるいは連語ｋの左隣または右隣にある単語ｋ−１、ｋ＋１あるいは連語ｋ−１、ｋ＋１に対して付されるルビｒ（ｋ−１）、ｒ（ｋ＋１）の長さＬｒ（ｋ−１）、Ｌｒ（ｋ＋１）にルビ間に設けられる空白の幅Ｌｒｇを加えた値が、単語ｋあるいは連語ｋの左隣または右隣にある単語ｋ−１、ｋ＋１あるいは連語ｋ−１、ｋ＋１の長さＬ（ｋ−１）、Ｌ（ｋ＋１）に比べて小さい場合に、単語ｋあるいは連語ｋの左隣または右隣にある単語ｋ−１、ｋ＋１あるいは連語ｋ−１、ｋ＋１の近傍の領域をルビｒ（ｋ）を配置する領域として設定する。これにより、ルビｒ（ｋ）の文字を極端に圧縮することなく、ルビを読み易く配置することができる。
【０１５１】
つぎに、図７に示したルビサイズを統一する場合のルビサイズ・配置設定処理の処理手順について説明する。図２４は、ルビサイズを統一する場合のルビサイズ・配置設定処理の処理手順の一例を示すフローチャートである。図２４に示すように、まず、文書生成装置１のルビ設定部７ｆは、各文字領域の平均文字サイズの情報を、記憶部６に記憶された文書レイアウトデータ６ｅから取得する（ステップＳ１１０１）。
【０１５２】
そして、ルビ設定部７ｆは、取得した各文字領域の平均文字サイズの平均値を算出する（ステップＳ１１０２）。続いて、ルビ設定部７ｆは、文書中に含まれる各単語や各連語に付されるルビの文字サイズを平均文字サイズの平均値に設定する（ステップＳ１１０３）。これにより、文書中のすべてのルビの文字サイズが統一される。その後、ルビ設定部７ｆは、各ルビの配置位置を設定する（ステップＳ１１０４）。
【０１５３】
具体的には、ルビ設定部７ｆは、行間の中央部分にルビが配置されるように、ルビの下端のＹ座標を設定する。単語あるいは連語が最下行である場合には、ルビ設定部７ｆは、単語あるいは連語とルビとの間の間隔が、その上の行における間隔と同じ間隔となるようルビの下端のＹ座標を設定する。行が１行しかない場合は、ルビ設定部７ｆは、単語あるいは連語とルビとの間に所定の間隔が空くように、ルビの下端のＹ座標を設定する。あるいは、ルビ設定部７ｆは、単語あるいは連語の下端のＹ座標からルビを表示するフォントの高さ方向のサイズの分だけ下にずれた位置をルビの下端のＹ座標として設定することとしてもよい。
【０１５４】
また、ルビ設定部７ｆは、ルビの左端のＸ座標を、そのルビを付す単語あるいは連語の左端のＸ座標と同じになるように設定する。そして、例えば、図１８のように、ルビ「〜が〜であると認識する」の長さがそのルビを付す単語あるいは連語「identified as」の長さよりも長い場合であって、かつ、その前後の単語あるいは連語「color」、「vermilion」に対してルビ「色」、「橙」を付したとしても、まだルビを配置するスペースに余裕がある場合には、ルビ「〜が〜であると認識する」の左端のＸ座標を左右にずらす処理を行う。ステップＳ１１０４の処理の後、ルビ設定部７ｆは、このルビサイズ・配置設定処理を終了する。
【０１５５】
なお、ここでは、各文字領域の平均文字サイズの平均値にルビの文字サイズを設定することとしたが、ルビの文字サイズの設定方法はこれに限定されるものではなく、他の方法によりルビの文字サイズの代表値を算出し、その代表値にルビの文字サイズを設定することとしてもよい。例えば、各文字領域に含まれる文字の数を重みとして、各文字領域の平均文字サイズの加重平均値を算出し、算出した加重平均値にルビの文字サイズを設定することとしてもよい。また、各文字領域の平均文字サイズのうち、他の平均文字サイズから所定の値以上離れた統計的な外れ値を除外して、平均値あるいは加重平均値を算出することとしてもよい。
【０１５６】
また、文字領域ごとに算出した平均文字サイズを用いずに、改めて文章全体に含まれる文字の文字サイズの平均値を算出するなどして、ルビの文字サイズの代表値を算出し、その代表値にルビの文字サイズを設定することとしてもよい。
【０１５７】
なお、ルビの文字サイズを統一する対象となる文書は、１ページの文書に限られるものではなく、複数のページからなる文書であってもかまわない。すなわち、複数のページ全体に対して文字サイズの分散値を算出し、その分散値が所定の閾値未満であると判定された場合に、文字サイズの平均値や加重平均値を算出し、算出した平均値あるいは加重平均値に複数のページに含まれる文字に対して付されるルビの文字サイズを設定することとしてもよい。
【０１５８】
また、文書中のすべてのルビの文字サイズを統一する際、一旦ルビの文字サイズを単語あるいは連語の長さに合わせて設定し、設定された文字サイズの中から最小の文字サイズを選択し、すべてのルビの文字サイズをその最小の文字サイズに設定することとしてもよい。以下に、この変形例について説明することとする。
【０１５９】
図２５〜図３３は、ルビサイズを統一する場合のルビサイズ・配置設定処理の処理手順の変形例を示すフローチャートである。このルビサイズ・配置設定処理では、すべてのルビｒ（ｋ）（１≦ｋ≦Ｎ）に対する圧縮率ｃ（ｋ）が算出され、その圧縮率で圧縮した後の文字のサイズのうち最小のものが検出される。そして、そのサイズでルビの文字サイズが統一される。これにより、文書に付されるルビが読み易いものとなる。
【０１６０】
図２５に示すように、まず、文書生成装置１のルビ設定部７ｆは、ルビの文字サイズを設定する（ステップＳ１２０１）。具体的には、ルビ設定部７ｆは、単語あるいは連語の行間隔と、単語あるいは連語に含まれる文字のフォントの縦方向の長さとを比較する。
【０１６１】
そして、行間隔が文字のフォントの縦方向の長さの４０％に満たないときは、ルビ設定部７ｆは、ルビとして付される文字のフォントの縦方向の長さが、単語あるいは連語に含まれる文字のフォントの縦方向の長さの４０％となるよう、ルビとして付される文字のサイズを設定する。行間間隔が文字のフォントの縦方向の長さの８０％を超えるときは、ルビ設定部７ｆは、ルビとして付される文字のフォントの縦方向の長さが、単語あるいは連語に含まれる文字のフォントの縦方向の長さの８０％となるよう、ルビとして付される文字のサイズを設定する。また、行間隔が文字のフォントの縦方向の長さの４０〜８０％であるときは、ルビ設定部７ｆは、ルビとして付される文字のフォントの縦方向の長さが行間隔と同じ長さとなるよう、ルビとして付される文字のサイズを設定する。なお、この設定方法において、４０％、８０％とは別の閾値が用いられることとしてよい。
【０１６２】
続いて、ルビ設定部７ｆは、ルビの左端のＸ座標Ｘｒ（ｋ）（１≦ｋ≦Ｎ）を設定する（ステップＳ１２０２）。具体的には、ルビ設定部７ｆは、ルビの左端のＸ座標Ｘｒ（ｎ）を単語あるいは連語の左端のＸ座標Ｘ（ｋ）に設定する。
【０１６３】
そして、ルビ設定部７ｆは、ルビの長さＬｒ（ｋ）（１≦ｋ≦Ｎ）を算出する（ステップＳ１２０３）。具体的には、ルビ設定部７ｆは、ルビｒ（ｋ）に含まれる文字の幅と、文字間に設けられる空白の幅、文字の数の情報から、ルビｒ（ｋ）の長さＬｒ（ｋ）を算出する。その後、ルビ設定部７ｆは、単語あるいは連語の識別番号ｋを１に設定する（ステップＳ１２０４）。
【０１６４】
続いて、ルビ設定部７ｆは、単語あるいは連語の長さＬ（ｋ）が、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも短いか否かを判定する（ステップＳ１２０５）。長さＬ（ｋ）が長さＬｒ（ｋ）よりも短くない場合（ステップＳ１２０５においてＮＯの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定する（ステップＳ１２０６）。
【０１６５】
そして、図２９に示されるように、ルビ設定部７ｆは、ｋがＮであるか否かを調べる（ステップＳ１６０５）。ｋがＮでない場合（ステップＳ１６０５においてＮＯの場合）、ルビ設定部７ｆは、ｋを１だけ増やし（ステップＳ１６０６）、図２５のステップＳ１２０５に移行して、その後の処理を継続する。
【０１６６】
図２５のステップＳ１２０５において、長さＬ（ｋ）が長さＬｒ（ｋ）よりも短い場合（ステップＳ１２０５においてＹＥＳの場合）、ルビ設定部７ｆは、ルビの圧縮率ｃ（ｋ）を比Ｌｒ（ｋ）／Ｌ（ｋ）に設定する（ステップＳ１２０７）。そして、ルビ設定部７ｆは、圧縮率ｃ（ｋ）が所定の閾値よりも大きいか否かを判定する（ステップＳ１２０８）。
【０１６７】
圧縮率ｃ（ｋ）が所定の閾値よりも大きくない場合（ステップＳ１２０８においてＮＯの場合）、図２９のステップＳ１６０５に移行し、ルビ設定部７ｆは、それ以降の処理を継続する。
【０１６８】
図２５のステップＳ１２０８において、圧縮率ｃ（ｋ）が所定の閾値よりも大きい場合（ステップＳ１２０８においてＹＥＳの場合）、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）が無いか否かを判定する（ステップＳ１２０９）。
【０１６９】
単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）が無い場合（ステップＳ１２０９においてＹＥＳの場合）、ルビ設定部７ｆは、単語ｋあるいは連語ｋの長さＬ（ｋ）と、単語ｋ＋１あるいは連語ｋ＋１の長さＬ（ｋ＋１）と、空白の幅Ｌｇとの和Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ１２１０）。
【０１７０】
和Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ１２１０においてＮＯの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定し（ステップＳ１２０６）、図２９のステップＳ１６０５に移行して、ルビ設定部７ｆは、それ以降の処理を継続する。
【０１７１】
図２５のステップＳ１２１０において、和Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ１２１０においてＹＥＳの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を比Ｌｒ（ｋ）／（Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇ）に再設定する（ステップＳ１２１１）。
【０１７２】
そして、ルビ設定部７ｆは、圧縮率ｃ（ｋ）が所定の閾値よりも大きいか否かを判定する（ステップＳ１２１２）。圧縮率ｃ（ｋ）が所定の閾値よりも大きくない場合（ステップＳ１２１２においてＮＯの場合）、図２９のステップＳ１６０５に移行して、ルビ設定部７ｆは、それ以降の処理を継続する。
【０１７３】
図２５のステップＳ１２１２において、圧縮率ｃ（ｋ）が所定の閾値よりも大きい場合（ステップＳ１２１２においてＹＥＳの場合）、図２６に示すように、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無いか否かを判定する（ステップＳ１３０１）。
【０１７４】
単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無い場合（ステップＳ１３０１においてＹＥＳの場合）、ルビ設定部７ｆは、単語ｋ−１あるいは連語ｋ−１の長さＬ（ｋ−１）と、単語ｋあるいは連語ｋの長さＬ（ｋ）と、単語ｋ＋１あるいは連語ｋ＋１の長さＬ（ｋ＋１）と、２つの空白の幅２Ｌｇとの和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ１３０２）。
【０１７５】
和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ１３０２においてＮＯの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定する（ステップＳ１３０３）。そして、図２９のステップＳ１６０５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１７６】
図２６のステップＳ１３０２において、和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ１３０２においてＹＥＳの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を比Ｌｒ（ｋ）／（Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ）に設定する（ステップＳ１３０４）。そして、図２９のステップＳ１６０５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１７７】
図２６のステップＳ１３０１において、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無いという条件が満たされない場合（ステップＳ１３０１においてＮＯの場合）、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たすか否かを判定する（ステップＳ１３０５）。
【０１７８】
単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たす場合（ステップＳ１３０５においてＹＥＳの場合）、ルビ設定部７ｆは、和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇから、ルビｒ（ｋ−１）の長さＬｒ（ｋ−１）、および、ルビ間に設けるべき空白の幅の最小値Ｌｒｇを差し引いた値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ１３０６）。
【０１７９】
値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ１３０６においてＮＯの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定する（ステップＳ１３０３）。そして、図２９のステップＳ１６０５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１８０】
図２６のステップＳ１３０６において、値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ１３０６においてＹＥＳの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を比Ｌｒ（ｋ）／（Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇ）に設定する（ステップＳ１３０７）。そして、図２９のステップＳ１６０５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１８１】
図２６のステップＳ１３０５において、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たさない場合（ステップＳ１３０５においてＮＯの場合）、図２９のステップＳ１６０５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１８２】
図２５のステップＳ１２０９において、単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）が無いという条件が満たされない場合（ステップＳ１２０９においてＮＯの場合）、図２７に示すように、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無いか否かを判定する（ステップＳ１４０１）。
【０１８３】
単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無い場合（ステップＳ１４０１においてＹＥＳの場合）、ルビ設定部７ｆは、単語ｋ−１あるいは連語ｋ−１の長さＬ（ｋ−１）と、単語ｋあるいは連語ｋの長さＬ（ｋ）と、空白の幅Ｌｇとの和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ１４０２）。
【０１８４】
和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ１４０２においてＮＯの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定する（ステップＳ１４０３）。そして、図２９のステップＳ１６０５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１８５】
図２７のステップＳ１４０２において、和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ１４０２においてＹＥＳの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を比Ｌｒ（ｋ）／（Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇ）に再設定する（ステップＳ１４０４）。
【０１８６】
そして、ルビ設定部７ｆは、圧縮率ｃ（ｋ）が所定の閾値よりも大きいか否かを判定する（ステップＳ１４０５）。圧縮率ｃ（ｋ）が所定の閾値よりも大きくない場合（ステップＳ１４０５においてＮＯの場合）、図２９のステップＳ１６０５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１８７】
図２７のステップＳ１４０５において、圧縮率ｃ（ｋ）が所定の閾値よりも大きい場合（ステップＳ１４０５においてＹＥＳの場合）、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）があり、Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇという条件を満たすか否かを判定する（ステップＳ１４０６）。
【０１８８】
単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）があり、Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇという条件を満たす場合（ステップＳ１４０６においてＹＥＳの場合）、ルビ設定部７ｆは、和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇから、ルビｒ（ｋ＋１）の長さＬｒ（ｋ＋１）、および、ルビ間に設けるべき空白の幅の最小値Ｌｒｇを差し引いた値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ１４０７）。
【０１８９】
値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ１４０７においてＮＯの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定する（ステップＳ１４０３）。そして、図２９のステップＳ１６０５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１９０】
図２７のステップＳ１４０６において、単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）があり、Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇという条件を満たさない場合（ステップＳ１４０６においてＮＯの場合）、図２９のステップＳ１６０５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１９１】
図２７のステップＳ１４０７において、値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ１４０７においてＹＥＳの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を比Ｌｒ（ｋ）／（Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇ）に設定する（ステップＳ１４０８）。そして、図２９のステップＳ１６０５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１９２】
図２７のステップＳ１４０１において、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無いという条件が満たされない場合（ステップＳ１４０１においてＮＯの場合）、図２８に示すように、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）があり、Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇという条件を満たすか否かを判定する（ステップＳ１５０１）。
【０１９３】
単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）があり、Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇという条件を満たす場合（ステップＳ１５０１においてＹＥＳの場合）、ルビ設定部７ｆは、和Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇから、ルビｒ（ｋ＋１）の長さＬｒ（ｋ＋１）、および、ルビ間に設けるべき空白の幅の最小値Ｌｒｇを差し引いた値Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ１５０２）。
【０１９４】
値Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ１５０２においてＮＯの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定する（ステップＳ１５０３）。そして、図２９のステップＳ１６０５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１９５】
図２８のステップＳ１５０２において、値Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ１５０２においてＹＥＳの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を比Ｌｒ（ｋ）／（Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇ）に設定する（ステップＳ１５０４）。
【０１９６】
そして、ルビ設定部７ｆは、圧縮率ｃ（ｋ）が所定の閾値よりも大きいか否かを判定する（ステップＳ１５０５）。圧縮率ｃ（ｋ）が所定の閾値よりも大きくない場合（ステップＳ１５０５においてＮＯの場合）、図２９のステップＳ１６０５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０１９７】
図２８のステップＳ１５０５において、圧縮率ｃ（ｋ）が所定の閾値よりも大きい場合（ステップＳ１５０５においてＹＥＳの場合）、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たすか否かを判定する（ステップＳ１５０６）。
【０１９８】
単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たす場合（ステップＳ１５０６においてＹＥＳの場合）、ルビ設定部７ｆは、和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇから、ルビｒ（ｋ−１）の長さＬｒ（ｋ−１）、ルビｒ（ｋ＋１）の長さＬｒ（ｋ＋１）、および、ルビ間に設けるべき２つの空白の幅の最小値２Ｌｒｇを差し引いた値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒ（ｋ＋１）−２Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ１５０７）。
【０１９９】
値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒ（ｋ＋１）−２Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ１５０７においてＮＯの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定する（ステップＳ１５０３）。そして、図２９のステップＳ１６０５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０２００】
図２８のステップＳ１５０７において、値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒ（ｋ＋１）−２Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ１５０７においてＹＥＳの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を比Ｌｒ（ｋ）／（Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌ（ｋ＋１）＋２Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒ（ｋ＋１）−２Ｌｒｇ）に設定する（ステップＳ１５０８）。そして、図２９のステップＳ１６０５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０２０１】
図２８のステップＳ１５０６において、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たさない場合（ステップＳ１５０６においてＮＯの場合）、図２９のステップＳ１６０５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０２０２】
図２８のステップＳ１５０１において、単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）があり、Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇという条件を満たさない場合（ステップＳ１５０１においてＮＯの場合）、ルビ設定部７ｆは、図２９に示すように、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たすか否かを判定する（ステップＳ１６０１）。
【０２０３】
単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たす場合（ステップＳ１６０１においてＹＥＳの場合）、ルビ設定部７ｆは、和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇから、ルビｒ（ｋ−１）の長さＬｒ（ｋ−１）、および、ルビ間に設けるべき空白の幅の最小値Ｌｒｇを差し引いた値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ１６０２）。
【０２０４】
値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ１６０２においてＮＯの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を１に設定する（ステップＳ１６０３）。そして、ステップＳ１６０５に移行し、ルビ設定部７ｆは、それ以後の処理を継続する。
【０２０５】
ステップＳ１６０２において、値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ１６０２においてＹＥＳの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の圧縮率ｃ（ｋ）を比Ｌｒ（ｋ）／（Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇ）に設定する（ステップＳ１６０４）。そして、ステップＳ１６０５に移行し、ルビ設定部７ｆは、それ以後の処理を継続する。
【０２０６】
図２９のステップＳ１６０１において、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たさない場合（ステップＳ１６０１においてＮＯの場合）、ステップＳ１６０５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０２０７】
ステップＳ１６０５において、ｋがＮである場合（ステップＳ１６０５においてＹＥＳの場合）、ルビ設定部７ｆは、圧縮後の各ルビｒ（ｋ）（１≦ｋ≦Ｎ）の文字サイズＳｒ（ｋ）を算出する（ステップＳ１６０７）。具体的には、ルビ設定部７ｆは、もとの文字サイズを圧縮率ｃ（ｋ）で除することにより、文字サイズＳｒ（ｋ）を算出する。
【０２０８】
そして、ルビ設定部７ｆは、文字サイズＳｒ（ｋ）（１≦ｋ≦Ｎ）の最小値Ｓｒｍｉｎを抽出し（ステップＳ１６０８）、すべての文字のサイズＳｒ（ｋ）（１≦ｋ≦Ｎ）をＳｒｍｉｎに再設定する（ステップＳ１６０９）。以上の処理により、文書に含まれるルビｒ（ｋ）（１≦ｋ≦Ｎ）の文字サイズがＳｒｍｉｎに統一される。文字サイズが変更されると、ルビｒ（ｋ）、ｒ（ｋ＋１）の左端のＸ座標を再調整する必要が生じる。よって、以下では、ルビ設定部７ｆは、ルビｒ（ｋ）、ｒ（ｋ＋１）の左端のＸ座標の再調整を行う。
【０２０９】
ここでは、文書をレイアウト解析して得られる文字領域単位ではなく、文書単位で文字サイズの分散値を算出し、その分散値が所定の閾値以上である場合に、ルビの文字サイズを統一しないこととし、その分散値が所定の閾値よりも小さい場合に、すべてのルビの文字サイズを最小値Ｓｒｍｉｎに統一することとしている。
【０２１０】
先に示した特許文献３や特許文献４は、文書を複数の領域に分割し、文字サイズや行間隔が類似する領域を同一のグループとして分類し、同一のグループに含まれる領域間で、文字列に付される翻訳文の文字サイズを統一するものである。しかし、これらは文字サイズや行間隔が類似する領域間で文字サイズを統一するものであるため、文書全体で見れば文字サイズや行間隔の分散が大きい場合でも、その文書内に文字サイズや行間隔が類似する領域があれば、それらの領域内の文字サイズが統一されてしまう。よって、文字サイズや行間隔の文書単位で算出した分散が大きい場合に、ルビの文字サイズを統一しないという処理には、特許文献３や特許文献４の技術は利用することが難しい。
【０２１１】
しかし、本実施形態によれば、文書単位で文字サイズや行間隔の分散値を算出した上で、その分散値の大きさに基づいて、ルビの文字サイズを最小値Ｓｒｍｉｎに統一するか否かを判定しているので、たとえその文書内に文字サイズや行間隔が類似する領域があったとしても、それらの領域内のルビの文字サイズが統一されてしまうことなく、ルビを文書に配置することができる。
【０２１２】
図２９のステップＳ１６０９の処理の後、ルビ設定部７ｆは、ルビの長さＬｒ（ｋ）（１≦ｋ≦Ｎ）を再度算出する（ステップＳ１６１０）。具体的には、ルビ設定部７ｆは、ステップＳ１６０９において算出された文字のサイズＳｒ（ｋ）により定まる文字の幅と、文字間に設けられる空白の幅、文字の数の情報から、ルビｒ（ｋ）の長さＬｒ（ｋ）を再度算出する。その後、ルビ設定部７ｆは、単語あるいは連語の識別番号ｋを１に設定する（ステップＳ１６１１）。
【０２１３】
続いて、図３０に示すように、ルビ設定部７ｆは、単語あるいは連語の長さＬ（ｋ）が、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも短いか否かを判定する（ステップＳ１７０１）。長さＬ（ｋ）が長さＬｒ（ｋ）よりも短くない場合（ステップＳ１７０１においてＮＯの場合）、図３３のステップＳ２００５に移行し、ルビ設定部７ｆは、ルビｒ（ｋ）の下端のＹ座標を設定する（ステップＳ２００５）。
【０２１４】
具体的には、ルビ設定部７ｆは、行間の中央部分にルビｒ（ｋ）が配置されるように、ルビｒ（ｋ）の下端のＹ座標を設定する。単語ｋあるいは連語ｋが最下行である場合には、ルビ設定部７ｆは、単語ｋあるいは連語ｋとルビｒ（ｋ）との間の間隔が、その上にある行における間隔と同じ間隔となるようルビｒ（ｋ）の下端のＹ座標を設定する。行が１行しかない場合は、ルビ設定部７ｆは、単語ｋあるいは連語ｋとルビｒ（ｋ）との間に所定の間隔が空くように、ルビｒ（ｋ）の下端のＹ座標を設定する。
【０２１５】
あるいは、ルビ設定部７ｆは、単語ｋあるいは連語ｋの下端のＹ座標からルビｒ（ｋ）を表示するフォントの高さ方向のサイズの分だけ下にずれた位置をルビｒ（ｋ）の下端のＹ座標として設定することとしてもよい。
【０２１６】
その後、ルビ設定部７ｆは、ｋがＮであるか否かを調べる（ステップＳ２００６）。ｋがＮである場合（ステップＳ２００６においてＹＥＳの場合）、ルビサイズを統一する場合のルビサイズ・配置設定処理を終了する。ｋがＮでない場合（ステップＳ２００６においてＮＯの場合）、ルビ設定部７ｆは、ｋを１だけ増やし（ステップＳ２００７）、図３０のステップＳ１７０１に移行して、その後の処理を継続する。
【０２１７】
図３０のステップＳ１７０１において、長さＬ（ｋ）が長さＬｒ（ｋ）よりも短い場合（ステップＳ１７０１においてＹＥＳの場合）、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）が無いか否かを判定する（ステップＳ１７０２）。
【０２１８】
単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）が無い場合（ステップＳ１７０２においてＹＥＳの場合）、ルビ設定部７ｆは、単語ｋあるいは連語ｋの長さＬ（ｋ）と、単語ｋ＋１あるいは連語ｋ＋１の長さＬ（ｋ＋１）と、空白の幅Ｌｇとの和Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ１７０３）。
【０２１９】
和Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ１７０３においてＮＯの場合）、図３３のステップＳ２００５に移行して、ルビ設定部７ｆは、それ以降の処理を継続する。
【０２２０】
図３０のステップＳ１７０３において、和Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ１７０３においてＹＥＳの場合）、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無いか否かを判定する（ステップＳ１７０４）。
【０２２１】
単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無い場合（ステップＳ１７０４においてＹＥＳの場合）、ルビ設定部７ｆは、Ａ＝Ｘ（ｋ）＋Ｌ（ｋ）／２−Ｌｒ（ｋ）／２を算出する（ステップＳ１７０５）。
【０２２２】
続いて、ルビ設定部７ｆは、Ａの値に応じて、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）を設定する（ステップＳ１７０６）。具体的には、ルビ設定部７ｆは、Ａが単語ｋ−１あるいは連語ｋ−１の左端のＸ座標Ｘ（ｋ−１）よりも小さい場合、Ｘｒ（ｋ）をＸ（ｋ−１）に設定する。また、ルビ設定部７ｆは、Ａが、Ｘ（ｋ−１）以上で、Ｘ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ）未満である場合、Ｘｒ（ｋ）をＡに設定する。また、ルビ設定部７ｆは、Ａが、Ｘ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ）以上である場合、Ｘｒ（ｋ）をＸ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ）に設定する。
【０２２３】
その後、図３３のステップＳ２００５に移行し、ルビ設定部７ｆは、それ以降の処理を継続する。
【０２２４】
図３０のステップＳ１７０４において、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無いという条件が満たされない場合（ステップＳ１７０４においてＮＯの場合）、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たすか否かを判定する（ステップＳ１７０７）。
【０２２５】
単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たす場合（ステップＳ１７０７においてＹＥＳの場合）、ルビ設定部７ｆは、Ａ＝Ｘ（ｋ）＋Ｌ（ｋ）／２−Ｌｒ（ｋ）／２を算出する（ステップＳ１７０８）。
【０２２６】
続いて、ルビ設定部７ｆは、Ａの値に応じて、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）を設定する（ステップＳ１７０９）。具体的には、ルビ設定部７ｆは、値Ａが、Ｘ（ｋ−１）＋Ｌｒ（ｋ−１）＋Ｌｒｇよりも小さい場合、Ｘｒ（ｋ）をＸ（ｋ−１）＋Ｌｒ（ｋ−１）＋Ｌｒｇに設定する。また、ルビ設定部７ｆは、値Ａが、Ｘ（ｋ−１）＋Ｌｒ（ｋ−１）＋Ｌｒｇ以上で、Ｘ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ）未満である場合、Ｘｒ（ｋ）をＡに設定する。また、ルビ設定部７ｆは、値Ａが、Ｘ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ）以上である場合、Ｘｒ（ｋ）をＸ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ）に設定する。
【０２２７】
その後、図３３のステップＳ２００５に移行し、ルビ設定部７ｆは、それ以降の処理を継続する。
【０２２８】
図３０のステップＳ１７０７において、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たさない場合（ステップＳ１７０７においてＮＯの場合）、図３３のステップＳ２００５に移行し、ルビ設定部７ｆは、それ以降の処理を継続する。
【０２２９】
図３０のステップＳ１７０４において、単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）が無いという条件が満たされない場合（ステップＳ１７０２においてＮＯの場合）、図３１に示すように、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無いか否かを判定する（ステップＳ１８０１）。
【０２３０】
単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無い場合（ステップＳ１８０１においてＹＥＳの場合）、ルビ設定部７ｆは、単語ｋ−１あるいは連語ｋ−１の長さＬ（ｋ−１）と、単語ｋあるいは連語ｋの長さＬ（ｋ）と、空白の幅Ｌｇとの和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ１８０２）。
【０２３１】
和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ１８０２においてＮＯの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）をＸ（ｋ）＋Ｌ（ｋ）−Ｌｒ（ｋ）に設定する（ステップＳ１８０３）。その後、図３３のステップＳ２００５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０２３２】
図３１のステップＳ１８０２において、和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ１８０２においてＹＥＳの場合）、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）があり、Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇという条件を満たすか否かを判定する（ステップＳ１８０４）。
【０２３３】
単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）があり、Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇという条件を満たす場合（ステップＳ１８０４においてＹＥＳの場合）、ルビ設定部７ｆは、Ａ＝Ｘ（ｋ）＋Ｌ（ｋ）／２−Ｌｒ（ｋ）／２を算出する（ステップＳ１８０５）。続いて、ルビ設定部７ｆは、Ａの値に応じて、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）、および、ルビｒ（ｋ＋１）の左端のＸ座標Ｘｒ（ｋ＋１）を設定する（ステップＳ１８０６）。
【０２３４】
具体的には、ルビ設定部７ｆは、Ａが、Ｘ（ｋ−１）よりも小さい場合、Ｘｒ（ｋ）をＸ（ｋ−１）に設定し、Ｘｒ（ｋ＋１）をＸｒ（ｋ）＋Ｌｒ（ｋ）＋Ｌｒｇに設定する。また、ルビ設定部７ｆは、Ａが、Ｘ（ｋ−１）以上で、Ｘ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ＋１）−Ｌｒｇ−Ｌｒ（ｋ）未満である場合、Ｘｒ（ｋ）をＡに設定し、Ｘｒ（ｋ＋１）をＸｒ（ｋ）＋Ｌｒ（ｋ）＋Ｌｒｇに設定する。また、ルビ設定部７ｆは、Ａが、Ｘ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ＋１）−Ｌｒｇ−Ｌｒ（ｋ）以上である場合、Ｘｒ（ｋ）をＸ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ＋１）−Ｌｒｇ−Ｌｒ（ｋ）に設定し、Ｘｒ（ｋ＋１）をＸｒ（ｋ）＋Ｌｒ（ｋ）＋Ｌｒｇに設定する。
【０２３５】
その後、図３３のステップＳ２００５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０２３６】
単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）があり、Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇという条件を満たさない場合（ステップＳ１８０４においてＮＯの場合）、図３３のステップＳ２００５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０２３７】
図３１のステップＳ１８０１において、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）が無いという条件が満たされない場合（ステップＳ１８０１においてＮＯの場合）、図３２に示すように、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）があり、Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇという条件を満たすか否かを判定する（ステップＳ１９０１）。
【０２３８】
単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）があり、Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇという条件を満たす場合（ステップＳ１９０１においてＹＥＳの場合）、ルビ設定部７ｆは、和Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇから、ルビｒ（ｋ＋１）の長さＬｒ（ｋ＋１）、および、ルビ間に設けるべき空白の幅の最小値Ｌｒｇを差し引いた値Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ１９０２）。
【０２３９】
値Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ１９０２においてＮＯの場合）、ルビ設定部７ｆは、ルビｒ（ｋ＋１）の左端のＸ座標Ｘｒ（ｋ＋１）をＸ（ｋ）＋Ｌｒ（ｋ）＋Ｌｒｇに設定する（ステップＳ１９０３）。そして、図３３のステップＳ２００５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０２４０】
図３２のステップＳ１９０２において、値Ｌ（ｋ）＋Ｌ（ｋ＋１）＋Ｌｇ−Ｌｒ（ｋ＋１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ１９０２においてＹＥＳの場合）、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たすか否かを判定する（ステップＳ１９０４）。
【０２４１】
単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たす場合（ステップＳ１９０４においてＹＥＳの場合）、ルビ設定部７ｆは、Ａ＝Ｘ（ｋ）＋Ｌ（ｋ）／２−Ｌｒ（ｋ）／２を算出する（ステップＳ１９０５）。続いて、ルビ設定部７ｆは、Ａの値に応じて、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）、および、ルビｒ（ｋ＋１）の左端のＸ座標Ｘｒ（ｋ＋１）を設定する（ステップＳ１９０６）。
【０２４２】
具体的には、ルビ設定部７ｆは、値Ａが、Ｘ（ｋ−１）＋Ｌｒ（ｋ−１）＋Ｌｒｇよりも小さい場合、Ｘｒ（ｋ）をＸ（ｋ−１）＋Ｌｒ（ｋ−１）＋Ｌｒｇに設定し、Ｘｒ（ｋ＋１）をＸｒ（ｋ）＋Ｌｒ（ｋ）＋Ｌｒｇに設定する。また、ルビ設定部７ｆは、値Ａが、Ｘ（ｋ−１）＋Ｌｒ（ｋ−１）＋Ｌｒｇ以上で、Ｘ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ＋１）−Ｌｒｇ−Ｌｒ（ｋ）未満である場合、Ｘｒ（ｋ）をＡに設定し、Ｘｒ（ｋ＋１）をＸｒ（ｋ）＋Ｌｒ（ｋ）＋Ｌｒｇに設定する。また、ルビ設定部７ｆは、値Ａが、Ｘ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ＋１）−Ｌｒｇ−Ｌｒ（ｋ）以上である場合、Ｘｒ（ｋ）をＸ（ｋ＋１）＋Ｌ（ｋ＋１）−Ｌｒ（ｋ＋１）−Ｌｒｇ−Ｌｒ（ｋ）に設定し、Ｘｒ（ｋ＋１）をＸｒ（ｋ）＋Ｌｒ（ｋ）＋Ｌｒｇに設定する。
【０２４３】
その後、図３３のステップＳ２００５に移行し、ルビ設定部７ｆは、それ以降の処理を継続する。
【０２４４】
図３２のステップＳ１９０４において、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たさない場合（ステップＳ１９０４においてＮＯの場合）、図３３のステップＳ２００５に移行し、ルビ設定部７ｆは、それ以降の処理を継続する。
【０２４５】
図３２のステップＳ１９０１において、単語ｋあるいは連語ｋが行末でなく、かつ、右隣の単語ｋ＋１あるいは連語ｋ＋１にルビｒ（ｋ＋１）があり、Ｌｒ（ｋ＋１）＜Ｌ（ｋ＋１）−Ｌｒｇという条件を満たさない場合（ステップＳ１９０１においてＮＯの場合）、図３３に示すように、ルビ設定部７ｆは、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たすか否かを判定する（ステップＳ２００１）。
【０２４６】
単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たす場合（ステップＳ２００１においてＹＥＳの場合）、ルビ設定部７ｆは、和Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇから、ルビｒ（ｋ−１）の長さＬｒ（ｋ−１）、および、ルビ間に設けるべき空白の幅の最小値Ｌｒｇを差し引いた値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さいか否かを判定する（ステップＳ２００２）。
【０２４７】
値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さくない場合（ステップＳ２００２においてＮＯの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）をＸ（ｋ）＋Ｌ（ｋ）−Ｌｒ（ｋ）に設定する（ステップＳ２００３）。続いて、ステップＳ２００５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０２４８】
図３３のステップＳ２００２において、値Ｌ（ｋ−１）＋Ｌ（ｋ）＋Ｌｇ−Ｌｒ（ｋ−１）−Ｌｒｇが、ルビｒ（ｋ）の長さＬｒ（ｋ）よりも小さい場合（ステップＳ２００２においてＹＥＳの場合）、ルビ設定部７ｆは、ルビｒ（ｋ）の左端のＸ座標Ｘｒ（ｋ）をＸ（ｋ−１）＋Ｌｒ（ｋ−１）＋Ｌｒｇに設定する（ステップＳ２００４）。続いて、ステップＳ２００５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０２４９】
図３３のステップＳ２００１において、単語ｋあるいは連語ｋが行頭でなく、かつ、左隣の単語ｋ−１あるいは連語ｋ−１にルビｒ（ｋ−１）があり、Ｌｒ（ｋ−１）＜Ｌ（ｋ−１）−Ｌｒｇという条件を満たさない場合（ステップＳ２００１においてＮＯの場合）、ステップＳ２００５に移行し、ルビ設定部７ｆは、その後の処理を継続する。
【０２５０】
これまで文書生成装置１および文書生成方法の実施形態を中心に説明を行ったが、本発明はこれらの実施形態に限定されるものではなく、文書生成装置１の機能を実現するためのコンピュータプログラムとしての形態、あるいは、当該コンピュータプログラムが記録されたコンピュータ読み取り可能な記録媒体の形態として本発明が実施されることとしてもよい。
【０２５１】
ここで、記録媒体としては、ディスク系（例えば、磁気ディスク、光ディスク等）、カード系（例えば、メモリカード、光カード等）、半導体メモリ系（例えば、ＲＯＭ、不揮発性メモリ等）、テープ系（例えば、磁気テープ、カセットテープ等）等、さまざまな形態のものを採用することができる。
【０２５２】
これら記録媒体に上述した本実施形態の文書生成装置１の機能を実現させるコンピュータプログラム、または、文書生成方法をコンピュータに実行させるコンピュータプログラムを記録して流通させることにより、コストの低廉化、及び可搬性や汎用性を向上させることができる。
【０２５３】
そして、コンピュータに上記記録媒体を装着し、コンピュータにより記録媒体に記録されたコンピュータプログラムを読み出してメモリに格納し、コンピュータが備えるプロセッサ（CPU：Central Processing Unit、MPU：Micro Processing Unit）が当該コンピュータプログラムをメモリから読み出して実行することにより、本実施形態に係る文書生成装置１の機能を実現し、文書生成方法を実行することができる。
【０２５４】
また、本発明は上述した実施形態に限定されず、本発明の要旨を逸脱しない範囲内で各種の変形、修正が可能である。
【符号の説明】
【０２５５】
１…文書生成装置、２…入力部、３…表示部、４…画像読取部、５…印刷処理部、６…記憶部、６ａ…翻訳用辞書データ、６ｂ…ルビ文字データ、６ｃ…文書画像データ、６ｄ…文字認識結果データ、６ｅ…文書レイアウトデータ、６ｆ…ルビ付き文書データ、７…制御部、７ａ…読取制御部、７ｂ…文字領域抽出部、７ｃ…文字認識処理部、７ｄ…翻訳処理部、７ｅ…統一度判定部、７ｆ…ルビ設定部、７ｇ…画像形式変換処理部、７ｈ…ルビ付き文書データ生成部、７ｉ…印刷制御部
【図１】
0005193263.tif 000002
【図２】
0005193263.tif 000003
【図３】
0005193263.tif 000004
【図４】
0005193263.tif 000005
【図５】
0005193263.tif 000006
【図６】
0005193263.tif 000007
【図７】
0005193263.tif 000008
【図８】
0005193263.tif 000009
【図９】
0005193263.tif 000010
【図１０】
0005193263.tif 000011
【図１１】
0005193263.tif 000012
【図１２】
0005193263.tif 000013
【図１３】
0005193263.tif 000014
【図１４】
0005193263.tif 000015
【図１５】
0005193263.tif 000016
【図１６】
0005193263.tif 000017
【図１７】
0005193263.tif 000018
【図１８】
0005193263.tif 000019
【図１９】
0005193263.tif 000020
【図２０】
0005193263.tif 000021
【図２１】
0005193263.tif 000022
【図２２】
0005193263.tif 000023
【図２３】
0005193263.tif 000024
【図２４】
0005193263.tif 000025
【図２５】
0005193263.tif 000026
【図２６】
0005193263.tif 000027
【図２７】
0005193263.tif 000028
【図２８】
0005193263.tif 000029
【図２９】
0005193263.tif 000030
【図３０】
0005193263.tif 000031
【図３１】
0005193263.tif 000032
【図３２】
0005193263.tif 000033
【図３３】
0005193263.tif 000034