(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024066648
(43)【公開日】2024-05-16
(54)【発明の名称】文書データ処理装置、文書データ処理方法、及びプログラム
(51)【国際特許分類】
G06F 40/177 20200101AFI20240509BHJP
【FI】
G06F40/177
【審査請求】未請求
【請求項の数】18
【出願形態】OL
(21)【出願番号】P 2022176197
(22)【出願日】2022-11-02
(71)【出願人】
【識別番号】000006208
【氏名又は名称】三菱重工業株式会社
(74)【代理人】
【識別番号】100149548
【弁理士】
【氏名又は名称】松沼 泰史
(74)【代理人】
【識別番号】100162868
【弁理士】
【氏名又は名称】伊藤 英輔
(74)【代理人】
【識別番号】100161702
【弁理士】
【氏名又は名称】橋本 宏之
(74)【代理人】
【識別番号】100189348
【弁理士】
【氏名又は名称】古都 智
(74)【代理人】
【識別番号】100196689
【弁理士】
【氏名又は名称】鎌田 康一郎
(72)【発明者】
【氏名】杉森 文亮
(72)【発明者】
【氏名】今岡 裕子
(72)【発明者】
【氏名】後藤 良介
【テーマコード(参考)】
5B109
【Fターム(参考)】
5B109PB01
(57)【要約】
【課題】文書データに示されている表に含まれる個々のセルが矩形形状の線で囲まれるようにする。
【解決手段】文書データからX軸に平行な水平線と、Y軸に平行な垂直線とを検出し、検出した水平線と、垂直線との交点の座標である交点座標を検出する。交点座標から頂点を示す座標を除外した頂点除外交点座標において、X座標値が他の頂点除外交点座標と同一である頂点除外交点座標を表構成交点座標として検出する。表構成交点座標を経由する水平線の両端のX座標値の2つの垂直線と、表構成交点座標を経由する垂直線の両端のY座標値の2つの水平線によって定められる矩形領域を表候補領域として検出する。表候補領域から表領域を生成する。表領域の最大及び最小のY座標値の2つの水平線と、表領域の最大及び最小のX座標値の2つの垂直線とによって定められる矩形形状に基づいて、文書データに対して罫線を追加する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
直交するX座標とY座標とによって文書中の位置が示される文書データからX軸に平行な水平線と、Y軸に平行な垂直線とを検出し、検出した前記水平線と、前記垂直線との交点の座標である交点座標を検出する交点座標検出部と、
前記交点座標から頂点を示す座標を除外した頂点除外交点座標において、X座標値が他の前記頂点除外交点座標と同一である前記頂点除外交点座標を表構成交点座標として検出する表構成交点座標検出部と、
前記表構成交点座標を経由する前記水平線の両端のX座標値の2つの垂直線と、前記表構成交点座標を経由する前記垂直線の両端のY座標値の2つの水平線によって定められる矩形領域を表候補領域として検出する表候補領域検出部と、
前記表候補領域から表領域を生成する表領域生成部と、
前記表領域の最大及び最小のY座標値の2つの水平線と、前記表領域の最大及び最小のX座標値の2つの垂直線とによって定められる矩形形状に基づいて、前記文書データに対して罫線を追加する罫線追加部と、
を備える文書データ処理装置。
【請求項2】
前記表領域生成部は、
前記表候補領域が複数存在する場合、共通の重複領域を含む前記表候補領域を囲む最小の矩形領域を新たな表候補領域とすることを繰り返し行い、前記重複領域が存在しなくなった際に存在する前記表候補領域の各々を前記表領域とする、
請求項1に記載の文書データ処理装置。
【請求項3】
前記表候補領域検出部は、
前記表構成交点座標の数が、2個以上である場合、前記表候補領域の検出を行う、
請求項1または請求項2に記載の文書データ処理装置。
【請求項4】
直交するX座標とY座標とによって文書中の位置が示される文書データからテキストブロックを検出し、検出した前記テキストブロックの所定位置のY座標値によって特定される行番号であってY座標値の大きさにしたがった順番で表される行番号を、検出した前記テキストブロックに関連付けるテキストブロック検出部と、
複数の前記テキストブロックが関連付けられている前記行番号を検出し、検出した前記行番号を番号順にしたがって並べた行番号リストを生成する行番号リスト生成部と、
前記行番号リストに含まれる前記行番号の各々に関連付けられている前記テキストブロックにおいて、同一列に属する前記テキストブロックを、同一列テキストブロック群として検出する同一列テキストブロック群検出部と、
前記同一列テキストブロック群に含まれる前記テキストブロックのX座標値に基づいて、Y軸に平行な垂直方向の罫線を前記文書データに追加する垂直方向罫線追加部と、
前記行番号リストに含まれる前記行番号ごとに、当該行番号に関連付けられている前記テキストブロックのY座標値に基づいて、X軸に平行な水平方向の罫線を前記文書データに追加する水平方向罫線追加部と、
を備える文書データ処理装置。
【請求項5】
前記テキストブロック検出部は、文字と文字の間に1スペースがある場合には、文字が連続しているとみなして、X軸方向に連続する文字の範囲の各々を前記テキストブロックとして検出する、
請求項4に記載の文書データ処理装置。
【請求項6】
前記行番号リストの最初と最後の行番号の間に存在する全ての前記行番号に関連付けられている前記テキストブロックのいずれかに所定の表区切り文字を含むテキストブロックが存在する場合、当該テキストブロックに関連付けられている前記行番号の前後で、前記行番号リストを分割し、分割した前記行番号リストの各々を新たな行番号リストとする行番号リスト分割部
を備える請求項4に記載の文書データ処理装置。
【請求項7】
前記行番号リスト分割部は、分割により最終的に得られた前記行番号リストのうち、要素として含まれる前記行番号の数が、3個以上の前記行番号リストを選択し、3個未満の前記行番号リストを破棄する、
請求項5に記載の文書データ処理装置。
【請求項8】
前記同一列テキストブロック群検出部は、
前記行番号リストに含まれる前記行番号の各々に関連付けられている前記テキストブロックの中から前記テキストブロックの所定位置のX座標値が一致する前記テキストブロックを、前記行番号リストごとに検出し、検出した前記テキストブロックの組み合わせを前記同一列テキストブロック群とする、
請求項4から請求項7のいずれか一項に記載の文書データ処理装置。
【請求項9】
前記垂直方向罫線追加部は、
前記同一列テキストブロック群ごとに、前記同一列テキストブロック群に含まれる前記テキストブロックにおける最小のX座標値の垂直線を前記垂直方向の罫線として前記文書データに追加すると共に、1つの前記行番号リストから検出された全ての前記同一列テキストブロック群に含まれる前記テキストブロックにおける最大のX座標値を、前記行番号リストごとに検出し、検出した前記最大のX座標値の各々に対応する垂直線を前記垂直方向の罫線として前記文書データに追加する、
請求項4に記載の文書データ処理装置。
【請求項10】
前記垂直方向罫線追加部は、
前記同一列テキストブロック群ごとに、前記同一列テキストブロック群に含まれる前記テキストブロックにおける最大のX座標値の垂直線を前記垂直方向の罫線として前記文書データに追加すると共に、1つの前記行番号リストから検出された全ての前記同一列テキストブロック群に含まれる前記テキストブロックにおける最小のX座標値を、前記行番号リストごとに検出し、検出した前記最小のX座標値の各々に対応する垂直線を前記垂直方向の罫線として前記文書データに追加する、
請求項4に記載の文書データ処理装置。
【請求項11】
前記垂直方向罫線追加部は、
前記行番号リストに含まれる全ての前記行番号に関連付けられている前記テキストブロックにおける最大と最小のY座標値を、前記行番号リストごとに検出し、検出した前記最大と最小のY座標値の組み合わせの各々を、各々に対応する前記垂直線の始点と終点のY座標値とする、
請求項9または請求項10に記載の文書データ処理装置。
【請求項12】
前記水平方向罫線追加部は、
前記行番号リストに含まれる前記行番号の各々に対応するY座標値を、当該行番号に関連付けられている前記テキストブロックにおける最小のY座標値とし、前記行番号の各々に対応するY座標値の水平線を前記水平方向の罫線として前記文書データに追加すると共に、1つの前記行番号リストに含まれる全ての前記行番号に関連付けられている前記テキストブロックにおける最大のY座標値を、前記行番号リストごとに検出し、検出した前記最大のY座標値の各々に対応する水平線を前記水平方向の罫線として前記文書データに追加する、
請求項4に記載の文書データ処理装置。
【請求項13】
前記水平方向罫線追加部は、
前記行番号リストに含まれる前記行番号の各々に対応するY座標値を、当該行番号に関連付けられている前記テキストブロックにおける最大のY座標値とし、前記行番号の各々に対応するY座標値の水平線を前記水平方向の罫線として前記文書データに追加すると共に、1つの前記行番号リストに含まれる全ての前記行番号に関連付けられている前記テキストブロックにおける最小のY座標値を、前記行番号リストごとに検出し、検出した前記最小のY座標値の各々に対応する水平線を前記水平方向の罫線として前記文書データに追加する、
請求項4に記載の文書データ処理装置。
【請求項14】
前記水平方向罫線追加部は、
前記行番号リストに含まれる全ての前記行番号に関連付けられている前記テキストブロックにおける最大と最小のX座標値を、前記行番号リストごとに検出し、検出した前記最大と最小のX座標値の組み合わせの各々を、各々に対応する前記水平線の始点と終点のX座標値とする、
請求項12または請求項13に記載の文書データ処理装置。
【請求項15】
直交するX座標とY座標とによって文書中の位置が示される文書データからX軸に平行な水平線と、Y軸に平行な垂直線とを検出し、検出した前記水平線と、前記垂直線との交点の座標である交点座標を検出する交点座標検出ステップと、
検出された前記交点座標から頂点を示す座標を除外した頂点除外交点座標において、X座標値が他の前記頂点除外交点座標と同一である前記頂点除外交点座標を表構成交点座標として検出する表構成交点座標検出ステップと、
検出された前記表構成交点座標を経由する前記水平線の両端のX座標値の2つの垂直線と、検出された前記表構成交点座標を経由する前記垂直線の両端のY座標値の2つの水平線によって定められる矩形領域を表候補領域として検出する表候補領域検出ステップと、
検出された前記表候補領域から表領域を生成する表領域生成ステップと、
生成された前記表領域の最大及び最小のY座標値の2つの水平線と、前記表領域の最大及び最小のX座標値の2つの垂直線とによって定められる矩形形状に基づいて、前記文書データに対して罫線を追加する表外枠罫線追加ステップと、
を含む文書データ処理方法。
【請求項16】
直交するX座標とY座標とによって文書中の位置が示される文書データからテキストブロックを検出し、検出した前記テキストブロックの所定位置のY座標値によって特定される行番号であってY座標値の大きさにしたがった順番で表される行番号を、検出した前記テキストブロックに関連付けるテキストブロック検出ステップと、
複数の前記テキストブロックが関連付けられている前記行番号を検出し、検出した前記行番号を番号順にしたがって並べた行番号リストを生成する行番号リスト生成ステップと、
生成された前記行番号リストに含まれる前記行番号の各々に関連付けられている前記テキストブロックにおいて、同一列に属する前記テキストブロックを、同一列テキストブロック群として検出する同一列テキストブロック群検出ステップと、
検出された前記同一列テキストブロック群に含まれる前記テキストブロックのX座標値に基づいて、Y軸に平行な垂直方向の罫線を前記文書データに追加する垂直方向罫線追加ステップと、
生成された前記行番号リストに含まれる前記行番号ごとに、当該行番号に関連付けられている前記テキストブロックのY座標値に基づいて、X軸に平行な水平方向の罫線を前記文書データに追加する水平方向罫線追加ステップと、
を含む文書データ処理方法。
【請求項17】
コンピュータを、
直交するX座標とY座標とによって文書中の位置が示される文書データからX軸に平行な水平線と、Y軸に平行な垂直線とを検出し、検出した前記水平線と、前記垂直線との交点の座標である交点座標を検出する交点座標検出手段、
前記交点座標から頂点を示す座標を除外した頂点除外交点座標において、X座標値が他の前記頂点除外交点座標と同一である前記頂点除外交点座標を表構成交点座標として検出する表構成交点座標検出手段、
前記表構成交点座標を経由する前記水平線の両端のX座標値の2つの垂直線と、前記表構成交点座標を経由する前記垂直線の両端のY座標値の2つの水平線によって定められる矩形領域を表候補領域として検出する表候補領域検出手段、
前記表候補領域から表領域を生成する表領域生成手段、
前記表領域の最大及び最小のY座標値の2つの水平線と、前記表領域の最大及び最小のX座標値の2つの垂直線とによって定められる矩形形状に基づいて、前記文書データに対して罫線を追加する表外枠罫線追加手段、
として機能させるためのプログラム。
【請求項18】
コンピュータを、
直交するX座標とY座標とによって文書中の位置が示される文書データからテキストブロックを検出し、検出した前記テキストブロックの所定位置のY座標値によって特定される行番号であってY座標値の大きさにしたがった順番で表される行番号を、検出した前記テキストブロックに関連付けるテキストブロック検出手段、
複数の前記テキストブロックが関連付けられている前記行番号を検出し、検出した前記行番号を番号順にしたがって並べた行番号リストを生成する行番号リスト生成手段、
前記行番号リストに含まれる前記行番号の各々に関連付けられている前記テキストブロックにおいて、同一列に属する前記テキストブロックを、同一列テキストブロック群として検出する同一列テキストブロック群検出手段、
前記同一列テキストブロック群に含まれる前記テキストブロックのX座標値に基づいて、Y軸に平行な垂直方向の罫線を前記文書データに追加する垂直方向罫線追加手段、
前記行番号リストに含まれる前記行番号ごとに、当該行番号に関連付けられている前記テキストブロックのY座標値に基づいて、X軸に平行な水平方向の罫線を前記文書データに追加する水平方向罫線追加手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、文書データ処理装置、文書データ処理方法、及びプログラムに関する。
【背景技術】
【0002】
例えば、特許文献1には、Adobe PDF(登録商標)やMicrosoft Word(登録商標)などの文書データに含まれている表構造を認識する技術が開示されている。特許文献1に開示されている技術では、以下のようにして、表構造を認識する。最初に、文書データに含まれる矩形部分を抽出する機能を利用して表の領域が抽出される。抽出された表の領域には、項目名、例えば、見出しやヘッダ等を示す文字列が表されている項目名セルと、項目値を示す文字列が表されている項目値セルとが含まれている。
【0003】
次に、表の領域に含まれている項目名セルと、項目値セルとの対応関係が抽出される。ここで、項目名セルと、項目値セルとの対応関係とは、項目名セルから項目値セルを見たときの項目値セルの向きと、その向きの尤度である。特許文献1に開示されている技術では、この項目値セルの向きと、向きの尤度とを用いることにより、項目名セルと、項目値セルとの妥当な組み合わせを決定して、表構造を認識するようにしている。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、特許文献1に開示されている技術では、上記したように文書データに含まれる矩形部分を抽出する機能を利用して表の領域を抽出している。当該技術では、更に、表に含まれるセルが矩形形状の線で囲まれていることを前提として、セルの内容、すなわち項目名や項目値を検出するようにしている。なお、表が矩形形状であり、かつ表に含まれる個々のセルの各々が矩形形状である場合、表に含まれる全てのセルが矩形形状の線で囲まれれば、表は矩形形状の線で囲まれることになることは自明である。そのため、特許文献1に開示されている技術には、表に含まれる個々のセルが矩形形状の線で囲まれていない場合、セルの内容を抽出することができないという課題が存在する。ここで、表に含まれる個々のセルが矩形形状の線で囲まれていない表とは、例えば、上下左右の端の罫線がない表、縦横のいずれか一方の罫線、または、両方の罫線が示されておらず、複数の項目や値などが行列状に示されている表などが想定される。
【0006】
本開示は、上記課題を解決するためになされたものであって、文書データに示されている表に含まれる個々のセルが矩形形状の線で囲まれるようにする文書データ処理装置、文書データ処理方法、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
上記課題を解決するために、本開示に係る文書データ処理装置は、直交するX座標とY座標とによって文書中の位置が示される文書データからX軸に平行な水平線と、Y軸に平行な垂直線とを検出し、検出した前記水平線と、前記垂直線との交点の座標である交点座標を検出する交点座標検出部と、前記交点座標から頂点を示す座標を除外した頂点除外交点座標において、X座標値が他の前記頂点除外交点座標と同一である前記頂点除外交点座標を表構成交点座標として検出する表構成交点座標検出部と、前記表構成交点座標を経由する前記水平線の両端のX座標値の2つの垂直線と、前記表構成交点座標を経由する前記垂直線の両端のY座標値の2つの水平線によって定められる矩形領域を表候補領域として検出する表候補領域検出部と、前記表候補領域から表領域を生成する表領域生成部と、前記表領域の最大及び最小のY座標値の2つの水平線と、前記表領域の最大及び最小のX座標値の2つの垂直線とによって定められる矩形形状に基づいて、前記文書データに対して罫線を追加する罫線追加部と、を備える。
【0008】
本開示に係る文書データ処理装置は、直交するX座標とY座標とによって文書中の位置が示される文書データからテキストブロックを検出し、検出した前記テキストブロックの所定位置のY座標値によって特定される行番号であってY座標値の大きさにしたがった順番で表される行番号を、検出した前記テキストブロックに関連付けるテキストブロック検出部と、複数の前記テキストブロックが関連付けられている前記行番号を検出し、検出した前記行番号を番号順にしたがって並べた行番号リストを生成する行番号リスト生成部と、前記行番号リストに含まれる前記行番号の各々に関連付けられている前記テキストブロックにおいて、同一列に属する前記テキストブロックを、同一列テキストブロック群として検出する同一列テキストブロック群検出部と、前記同一列テキストブロック群に含まれる前記テキストブロックのX座標値に基づいて、Y軸に平行な垂直方向の罫線を前記文書データに追加する垂直方向罫線追加部と、前記行番号リストに含まれる前記行番号ごとに、当該行番号に関連付けられている前記テキストブロックのY座標値に基づいて、X軸に平行な水平方向の罫線を前記文書データに追加する水平方向罫線追加部と、を備える。
【0009】
本開示に係る文書データ処理方法は、直交するX座標とY座標とによって文書中の位置が示される文書データからX軸に平行な水平線と、Y軸に平行な垂直線とを検出し、検出した前記水平線と、前記垂直線との交点の座標である交点座標を検出する交点座標検出ステップと、検出された前記交点座標から頂点を示す座標を除外した頂点除外交点座標において、X座標値が他の前記頂点除外交点座標と同一である前記頂点除外交点座標を表構成交点座標として検出する表構成交点座標検出ステップと、検出された前記表構成交点座標を経由する前記水平線の両端のX座標値の2つの垂直線と、検出された前記表構成交点座標を経由する前記垂直線の両端のY座標値の2つの水平線によって定められる矩形領域を表候補領域として検出する表候補領域検出ステップと、検出された前記表候補領域から表領域を生成する表領域生成ステップと、生成された前記表領域の最大及び最小のY座標値の2つの水平線と、前記表領域の最大及び最小のX座標値の2つの垂直線とによって定められる矩形形状に基づいて、前記文書データに対して罫線を追加する表外枠罫線追加ステップと、を含む。
【0010】
本開示に係る文書データ処理方法は、直交するX座標とY座標とによって文書中の位置が示される文書データからテキストブロックを検出し、検出した前記テキストブロックの所定位置のY座標値によって特定される行番号であってY座標値の大きさにしたがった順番で表される行番号を、検出した前記テキストブロックに関連付けるテキストブロック検出ステップと、複数の前記テキストブロックが関連付けられている前記行番号を検出し、検出した前記行番号を番号順にしたがって並べた行番号リストを生成する行番号リスト生成ステップと、生成された前記行番号リストに含まれる前記行番号の各々に関連付けられている前記テキストブロックにおいて、同一列に属する前記テキストブロックを、同一列テキストブロック群として検出する同一列テキストブロック群検出ステップと、検出された前記同一列テキストブロック群に含まれる前記テキストブロックのX座標値に基づいて、Y軸に平行な垂直方向の罫線を前記文書データに追加する垂直方向罫線追加ステップと、生成された前記行番号リストに含まれる前記行番号ごとに、当該行番号に関連付けられている前記テキストブロックのY座標値に基づいて、X軸に平行な水平方向の罫線を前記文書データに追加する水平方向罫線追加ステップと、を含む。
【0011】
本開示に係るプログラムは、コンピュータを、直交するX座標とY座標とによって文書中の位置が示される文書データからX軸に平行な水平線と、Y軸に平行な垂直線とを検出し、検出した前記水平線と、前記垂直線との交点の座標である交点座標を検出する交点座標検出手段、前記交点座標から頂点を示す座標を除外した頂点除外交点座標において、X座標値が他の前記頂点除外交点座標と同一である前記頂点除外交点座標を表構成交点座標として検出する表構成交点座標検出手段、前記表構成交点座標を経由する前記水平線の両端のX座標値の2つの垂直線と、前記表構成交点座標を経由する前記垂直線の両端のY座標値の2つの水平線によって定められる矩形領域を表候補領域として検出する表候補領域検出手段、前記表候補領域から表領域を生成する表領域生成手段、前記表領域の最大及び最小のY座標値の2つの水平線と、前記表領域の最大及び最小のX座標値の2つの垂直線とによって定められる矩形形状に基づいて、前記文書データに対して罫線を追加する表外枠罫線追加手段、として機能させるためのプログラムである。
【0012】
本開示に係るプログラムは、コンピュータを、直交するX座標とY座標とによって文書中の位置が示される文書データからテキストブロックを検出し、検出した前記テキストブロックの所定位置のY座標値によって特定される行番号であってY座標値の大きさにしたがった順番で表される行番号を、検出した前記テキストブロックに関連付けるテキストブロック検出手段、複数の前記テキストブロックが関連付けられている前記行番号を検出し、検出した前記行番号を番号順にしたがって並べた行番号リストを生成する行番号リスト生成手段、前記行番号リストに含まれる前記行番号の各々に関連付けられている前記テキストブロックにおいて、同一列に属する前記テキストブロックを、同一列テキストブロック群として検出する同一列テキストブロック群検出手段、前記同一列テキストブロック群に含まれる前記テキストブロックのX座標値に基づいて、Y軸に平行な垂直方向の罫線を前記文書データに追加する垂直方向罫線追加手段、前記行番号リストに含まれる前記行番号ごとに、当該行番号に関連付けられている前記テキストブロックのY座標値に基づいて、X軸に平行な水平方向の罫線を前記文書データに追加する水平方向罫線追加手段、として機能させるためのプログラムである。
【発明の効果】
【0013】
本開示の文書データ処理装置、文書データ処理方法、及びプログラムによれば、文書データに示されている表に含まれる個々のセルが矩形形状の線で囲まれるようにすることが可能になる。
【図面の簡単な説明】
【0014】
【
図1】本開示の第1の実施形態に係る文書データ処理装置の構成例を示すブロック図である。
【
図2】本開示の第1の実施形態に係る文書データの一例を示す図である。
【
図3】本開示の第1の実施形態に係る交点リストテーブルのデータ形式の一例を示す図である。
【
図4】本開示の第1の実施形態に係る文書データ処理装置の動作例を示すフローチャートである。
【
図5】本開示の第1の実施形態に係る文書データから交点を検出した一例を示す図である。
【
図6】本開示の第1の実施形態に係る文書データから表候補領域を特定した一例を示す図である。
【
図7】本開示の第1の実施形態に係る文書データに対して表外枠を形成する罫線を追加した一例を示す図である。
【
図8】本開示の第2の実施形態に係る文書データ処理装置の構成例を示すブロック図である。
【
図9】本開示の第2の実施形態に係る文書データの一例を示す図である。
【
図10】本開示の第2の実施形態に係る文書データからテキストブロックを検出した一例を示す図である。
【
図11】本開示の第2の実施形態に係るテキストブロックリストテーブルのデータ形式の一例を示す図である。
【
図12】本開示の第2の実施形態に係る文書データ処理装置の動作例を示すフローチャートである。
【
図13】本開示の第2の実施形態に係る文書データに対して垂直方向の罫線を追加した一例を示す図である。
【
図14】本開示の第2の実施形態に係る文書データに対して水平方向の罫線を追加した一例を示す図である。
【
図15】本開示の第2の実施形態に係る文書データに対して垂直方向及び水平方向の罫線を追加した一例を示す図である。
【
図16】本開示の各実施形態に係るコンピュータの構成を示す概略ブロック図である。
【発明を実施するための形態】
【0015】
以下、本開示の実施形態に係る文書データ処理装置、文書データ処理方法、及びプログラムについて、
図1~
図16を参照して説明する。
図1は、本開示の第1の実施形態に係る文書データ処理装置1の構成例を示すブロック図である。
図2は、本開示の第1の実施形態に係る文書データ30の一例を示す図である。
図3は、本開示の第1の実施形態に係る交点リストテーブル120のデータ形式の一例を示す図である。
図4は、本開示の第1の実施形態に係る文書データ処理装置1の動作例を示すフローチャートである。
図5は、本開示の第1の実施形態に係る文書データ30から交点を検出した一例を示す図である。
図6は、本開示の第1の実施形態に係る文書データ30から表候補領域を特定した一例を示す図である。
図7は、本開示の第1の実施形態に係る文書データ30に対して表外枠を形成する罫線46,47を追加した一例を示す図である。
図8は、本開示の第2の実施形態に係る文書データ処理装置2の構成例を示すブロック図である。
図9は、本開示の第2の実施形態に係る文書データ50の一例を示す図である。
図10は、本開示の第2の実施形態に係る文書データからテキストブロックを検出した一例を示す図である。
図11は、本開示の第2の実施形態に係るテキストブロックリストテーブル220のデータ形式の一例を示す図である。
図12は、本開示の第2の実施形態に係る文書データ処理装置2の動作例を示すフローチャートである。
図13~
図15は、それぞれ本開示の第2の実施形態に係る文書データ50に対して垂直方向の罫線71-1~71-4,72-1~72-4、水平方向の罫線73-1~73-6,74-1~74-5、及び垂直方向と水平方向の罫線71-1~71-4,72-1~72-4,73-1~73-6,74-1~74-5の両方を追加した一例を示す図である。
図16は、本開示の各実施形態に係るコンピュータの構成を示す概略ブロック図である。なお、各図において同一の構成には同一の符号を用いて説明を適宜省略する。
【0016】
<第1の実施形態>
(第1の実施形態の文書データ処理装置の構成)
図1に示すように、文書データ処理装置1は、ハードウェアである構成要素またはハードウェアとソフトウェアとの組み合わせから構成される機能的構成要素として、文書データ取込部10、交点座標検出部11、記憶部12、表構成交点座標検出部13、表候補領域検出部14、表領域生成部15、及び罫線追加部16を備える。
【0017】
文書データ取込部10は、外部から与えられる文書データを取り込む。文書データは、例えば、Adobe PDF(登録商標)やMicrosoft Word(登録商標)などの文書データである。文書データ取込部10が取り込む文書データは、1ページの文書データであってもよいし、複数ページの文書データであってもよい。文書データ取込部10は、取り込んだ文書データが複数ページの文書データである場合、1ページずつ選択し、選択した順に交点座標検出部11と、罫線追加部16とに出力する。以下、一例として、文書データ取込部10は、
図2に示す1ページ分の文書データ30を出力するものとして説明する。
【0018】
文書データ30は、
図2に示すように、符号31で示す表のタイトルと表の領域、符号32で示す文章の領域、符号33で示す図面のタイトルと図面の領域、及び符号34で示す表のタイトルと表の領域という4つの領域を含んでいる。文書データ30内の位置は、例えば、文書データ30の左下の隅を原点とするXY座標系で表される。文書データ30は、例えば、文字データと、文字の位置を示すデータと、線分データと、線分の位置を示すデータとを含んでいる。ここで、文字データは、例えば、文字の種類、文字のフォント、文字の大きさなどを示すデータである。文字の位置を示すデータは、例えば、1つの文字が存在する範囲を示す矩形形状の4つの頂点のX座標値とY座標値とによって表されるデータである。線分データは、例えば、線の種類や線の太さなどを示すデータである。線分の位置を示すデータは、線分の両端点のX座標値とY座標値とによって表されるデータである。
【0019】
交点座標検出部11は、文書データ30に含まれる線分の両端点の座標に基づいて、X軸に平行な水平線と、Y軸に平行な垂直線とを検出し、検出した水平線と、垂直線との交点の座標である交点座標を検出する。例えば、
図2において、符号35で示す点が交点の一例である。交点座標検出部11は、文書データ30に含まれる全ての交点に対応する交点座標を検出し、検出した交点座標の各々に対して、各々を一意に識別することができる交点ID(Identifier)を生成して付与する。交点座標検出部11は、検出した交点座標の各々に関するデータをリスト形式で示した交点リストデータを生成する。ここで、1つの交点に対応する交点座標に関するデータは、当該交点に対応する交点IDと、当該交点の位置を示すX座標値及びY座標値と、当該交点を経由する水平線の両端点のX座標値及びY座標値と、当該交点を経由する垂直線の両端点のX座標値及びY座標値とを組み合わせたデータである。
【0020】
記憶部12は、交点座標検出部11が生成した交点リストデータが書き込まれる交点リストテーブル120を記憶する。
図3は、交点リストテーブル120のデータ形式の一例を示す図である。交点リストテーブル120は、「交点ID」、「交点座標」、「水平線端点座標」、「垂直線端点座標」の項目を有する。「交点ID」の項目には、交点に付与される交点IDが書き込まれる。
【0021】
「交点座標」の項目は、「X座標」、「Y座標」のサブ項目を有しており、「X座標」の項目には、交点のX座標値が書き込まれ、「Y座標」の項目には、交点のY座標値が書き込まれる。「水平線端点座標」の項目は、「第1端点X座標」、「第1端点Y座標」、「第2端点X座標」、「第2端点Y座標」のサブ項目を有する。「水平線端点座標」の「第1端点X座標」、「第1端点Y座標」の項目には、それぞれ、対応する「交点座標」の項目の交点を経由する水平線の一方の端点のX座標値と、Y座標値とが書き込まれる。「水平線端点座標」の「第2端点X座標」、「第2端点Y座標」の項目には、それぞれ、対応する「交点座標」の項目の交点を経由する水平線の他方の端点のX座標値と、Y座標値とが書き込まれる。
【0022】
「垂直線端点座標」の項目は、「第1端点X座標」、「第1端点Y座標」、「第2端点X座標」、「第2端点Y座標」のサブ項目を有する。「垂直線端点座標」の「第1端点X座標」、「第1端点Y座標」の項目には、それぞれ、対応する「交点座標」の項目の交点を経由する垂直線の一方の端点のX座標値と、Y座標値とが書き込まれる。「垂直線端点座標」の「第2端点X座標」、「第2端点Y座標」の項目には、それぞれ、対応する「交点座標」の項目の交点を経由する垂直線の他方の端点のX座標値と、Y座標値とが書き込まれる。
【0023】
なお、「水平線端点座標」の第1端点から第2端点の方向は、X軸の座標値が増加する方向、言い換えると、
図2に示す文書データ30において左から右に進む方向であり、第1端点のX座標値は、第2端点のX座標値よりも小さくなる。「垂直線端点座標」の第1端点から第2端点の方向は、Y軸の座標値が増加する方向、言い換えると、
図2に示す文書データ30において下から上に進む方向であり、第1端点のY座標値は、第2端点のY座標値よりも小さくなる。
【0024】
表構成交点座標検出部13は、交点リストテーブル120に記憶されている交点座標から頂点を示す座標を除外した頂点除外交点座標を検出する。ところで、第1の実施形態の文書データ処理装置1では、1本の垂直線に対して、2本の水平線が交差した3行2列の表を、検出する表の最小構成として想定している。この3行2列の表には、X座標値が同一である頂点除外交点座標が2個存在する。そのため、表構成交点座標検出部13は、検出した頂点除外交点座標の各々において、X座標値が他の頂点除外交点座標と同一である頂点除外交点座標を全て検出する。例えば、頂点除外交点座標AのX座標値と、頂点除外交点座標BのX座標値とが、同一である場合、表構成交点座標検出部13は、頂点除外交点座標A及び頂点除外交点座標Bの両方を検出する。表構成交点座標検出部13は、検出した頂点除外交点座標を表構成交点座標とし、全ての表構成交点座標を示すデータをリスト形式で示した表構成交点リストデータを生成する。
【0025】
表候補領域検出部14は、表構成交点リストデータに含まれる表構成交点座標の各々に対して、各々が示す位置を経由する水平線の両端のX座標値と、各々が示す位置を経由する垂直線の両端のY座標値とを交点リストテーブル120から検出する。表候補領域検出部14は、検出した水平線の両端のX座標値の2つの垂直線と、検出した垂直線の両端のY座標値の2つの水平線によって定められる矩形領域の各々を、表構成交点座標の各々に対応する表候補領域として検出する。なお、水平線の両端のX座標値を、それぞれX1,X2とした場合、「水平線の両端のX座標値の2つの垂直線」とは、x=X1の関数で示される垂直線、及びx=X2の関数で示される垂直線のことである。また、垂直線の両端のY座標値を、それぞれY1,Y2とした場合、「垂直線の両端のY座標値の2つの水平線」とは、y=Y1の関数で示される水平線、及びy=Y2の関数で示される水平線のことである。
【0026】
表領域生成部15は、表候補領域検出部14が検出した表構成交点座標の各々に対応する表候補領域から表領域を生成する。罫線追加部16は、文書データ取込部10が出力する文書データ30に対して、表領域生成部15が生成した表領域の各々を囲む矩形形状の表外枠を形成する罫線の線分データを追加する。ここで、矩形形状の表外枠を形成する罫線とは、表領域の最大及び最小のY座標値の2つの水平線と、表領域の最大及び最小のX座標値の2つの垂直線とによって定められる矩形形状を形成する線分になる。
【0027】
(第1の実施形態の文書データ処理装置による処理)
図4に示すフローチャートを参照しつつ、第1の実施形態の文書データ処理装置1による処理について説明する。文書データ取込部10は、外部から与えられる文書データを取り込む。文書データ取込部10は、取り込んだ文書データから1ページ分の文書データを選択する。ここでは、文書データ取込部10は、1ページ分の文書データとして、
図2に示す文書データ30を選択したとする。文書データ取込部10は、選択した文書データ30を交点座標検出部11と、罫線追加部16とに出力する(Sa1)。
【0028】
交点座標検出部11は、文書データ取込部10が出力する文書データ30を取り込み、取り込んだ文書データ30に含まれる水平線と、垂直線との交点の座標である交点座標を検出する。
図5は、交点座標検出部11が文書データ30において検出した交点座標の位置を黒丸で示した図である。なお、
図5において「図面1」における特性の変化を示す線分43は、水平線でも垂直線でもない。そのため、当該線分43と、他の線分との交点は、交点座標検出部11の検出対象にはならない。
【0029】
交点座標検出部11は、検出した交点座標の各々に関するデータをリスト形式で示した交点リストデータを生成する。交点座標検出部11は、生成した交点リストデータを記憶部12の交点リストテーブル120に書き込む(Sa2)。
【0030】
表構成交点座標検出部13は、交点リストテーブル120に交点リストデータが書き込まれると、交点リストテーブル120に記憶されている交点座標から頂点を示す座標を除外した頂点除外交点座標を検出する。表構成交点座標検出部13は、例えば、以下のようにして、頂点を示す座標であるか否かを判定する。
【0031】
例えば、文書データ30の縦方向の長さが「800」程度であり、横方向の長さが「600」程度であるものとする。また、
図5の交点41-1に関するデータが、
図3の「交点ID」が「p」のレコードに対応しているとする。
図3の「交点ID」が「p」のレコードは、交点座標が(320,450)であり、水平線端点座標の第1端点の座標が(320,450)であり、垂直線端点座標の第2端点の座標が(320,450)である。すなわち、矩形形状の左上の頂点の場合、交点座標と、水平線端点座標の第1端点の座標と、垂直線端点座標の第2端点の座標とが一致する関係を有することになる(以下、この関係を第1の頂点該当条件という)。
【0032】
同様に、矩形形状の右上の頂点、例えば、交点41-2の場合、交点座標と、水平線端点座標の第2端点の座標と、垂直線端点座標の第2端点の座標とが一致する関係を有することになる(以下、この関係を第2の頂点該当条件という)。矩形形状の右下の頂点、例えば、交点41-3の場合、交点座標と、水平線端点座標の第2端点の座標と、垂直線端点座標の第1端点の座標とが一致する関係を有することになる(以下、この関係を第3の頂点該当条件という)。矩形形状の左下の頂点、例えば、交点41-4の場合、交点座標と、水平線端点座標の第1端点の座標と、垂直線端点座標の第1端点の座標とが一致する関係を有することになる(以下、この関係を第4の頂点該当条件という)。
【0033】
表構成交点座標検出部13は、上記した第1から第4の頂点該当条件に基づいて、交点リストテーブル120から頂点以外の交点の座標である頂点除外交点座標を検出する(Sa3)。Sa3の処理により、表構成交点座標検出部13は、
図5において符号41-1,41-2,41-3,41-4で示す黒丸以外の黒丸で示す交点の座標を頂点除外交点座標として検出する。
【0034】
表構成交点座標検出部13は、検出した頂点除外交点座標の数が、2個以上であるか否かを判定する(Sa4)。この判定を行う理由は、頂点除外交点座標の数が、2個未満の場合、次に行うSa5の処理を行うことができず、Sa5の処理を行うことができないということは、表が存在しないと考えられるためである。表構成交点座標検出部13は、検出した頂点除外交点座標が、2個以上でないと判定した場合(Sa4、No)、処理を終了する。
【0035】
一方、表構成交点座標検出部13は、検出した頂点除外交点座標が、2個以上であると判定したとする(Sa4、Yes)。この場合、表構成交点座標検出部13は、検出した複数の頂点除外交点座標の各々において、X座標値が他の頂点除外交点座標のX座標値と同一である頂点除外交点座標を検出する。言い換えると、表構成交点座標検出部13は、ある1つの頂点除外交点座標Aを対象とした場合、当該頂点除外交点座標Aの位置を経由する垂直線上に、他の頂点除外交点が存在している場合、当該頂点除外交点座標Aを検出する。
【0036】
例えば、
図5に示す「図面1」のグラフの原点に相当する頂点除外交点座標42は、X座標の座標値が同一である他の頂点除外交点座標が存在しない。そのため、頂点除外交点座標42は、表構成交点座標検出部13の検出対象にはならない。表構成交点座標検出部13は、検出した頂点除外交点座標を表構成交点座標とし、全ての表構成交点座標を示すデータをリスト形式で示した表構成交点リストデータを生成する。表構成交点座標検出部13は、生成した表構成交点リストデータを表候補領域検出部14に出力する(Sa5)。
【0037】
表候補領域検出部14は、表構成交点座標検出部13が出力する表構成交点リストデータを取り込み、取り込んだ表構成交点リストデータに含まれる要素の数、すなわち、表構成交点座標の数が、2個以上であるか否かを判定する(Sa6)。X座標値が同一である頂点除外交点座標が、1組存在すれば、表構成交点座標の数は2個になる。したがって、Sa6の判定処理は、表構成交点リストデータに表構成交点座標が含まれているか否かを判定する判定処理であるということもできる。表候補領域検出部14は、表構成交点リストデータに含まれる要素の数が、2個以上でないと判定した場合(Sa6、No)、処理を終了する。
【0038】
ここでは、表構成交点リストデータには、表構成交点座標のデータとして、
図5の文書データ30において示す黒丸のうち、符号41-1~41-4、及び符号42で示す黒丸以外の黒丸で示す交点の座標のデータが含まれることになる。そのため、表候補領域検出部14は、表構成交点リストデータに含まれる要素の数が、2個以上であると判定する(Sa6、Yes)。この場合、表候補領域検出部14は、表構成交点リストデータに含まれる表構成交点座標を1つずつ選択し、選択した表構成交点座標を経由する水平線の両端のX座標値と、選択した表構成交点座標を経由する垂直線の両端のY座標値とを交点リストテーブル120から検出する。表候補領域検出部14は、検出した水平線の両端のX座標値の2つの垂直線と、検出した垂直線の両端のY座標値の2つの水平線によって定められる矩形領域を、選択した表構成交点座標に対応する表候補領域として検出する。
【0039】
表候補領域検出部14は、例えば、
図6の表1の領域に存在する表構成交点44に対しては、水平線44hと、垂直線44vとを検出する。この場合、表候補領域検出部14は、表1の領域においてハッチングで示す矩形領域、すなわち、表1の領域全体を表候補領域として検出する。これに対して、表候補領域検出部14は、例えば、
図6の表2の領域に存在する表構成交点45に対しては、水平線45hと、垂直線45vとを検出する。この場合、表候補領域検出部14は、表2の領域においてハッチングで示す矩形領域、すなわち、表2の領域の一部を表候補領域として検出する。
【0040】
表候補領域検出部14は、表構成交点座標の各々に対して検出した表候補領域を示すデータ、すなわち、表候補領域の形状である矩形形状の4つの頂点のX座標及びY座標の座標値によって表されるデータを表領域生成部15に出力する(Sa7)。表領域生成部15は、表候補領域検出部14が出力する表候補領域を示すデータを取り込む。表領域生成部15は、取り込んだ表候補領域を示すデータに基づいて、共通の重複領域を有する表候補領域から新たな表候補領域を生成することを繰り返し行う。例えば、表領域生成部15は、取り込んだ表候補領域のデータが示す表候補領域を1つずつ選択し、選択した表候補領域が、他の表候補領域と共通の重複領域を有しているか否かを判定する。表領域生成部15は、選択した表候補領域が、他の表候補領域と共通の重複領域を有している場合、共通の重複領域を有している2つの表候補領域の両方を囲む最小の矩形領域を新たな表候補領域として生成する。表領域生成部15は、共通する重複領域を有する表候補領域がなくなるまで、新たな表候補領域を生成することを繰り返し行う(Sa8)。
【0041】
表領域生成部15は、Sa8の処理において、最終的に得られた共通の重複領域がない表候補領域の各々を表領域とし、表領域を示すデータ、すなわち、表領域の形状である矩形形状の4つの頂点のX座標及びY座標の座標値で表されるデータを罫線追加部16に出力する(Sa9)。
【0042】
罫線追加部16は、文書データ取込部10が出力する文書データ30と、表領域生成部15が出力する表領域を示すデータを取り込む。罫線追加部16は、表領域を示すデータごとに、文書データ30に対して表外枠を形成する罫線の線分データを追加する(Sa10)。(ループLa1s~La1e)。
【0043】
文書データ30の場合、表領域を示すデータとして、
図7において、ハッチングで示すように、表1の全体の領域を示すデータと、表2の全体の領域を示すデータとが得られる。そのため、罫線追加部16は、表1については、矩形形状の表外枠を形成する罫線46に対応する上下左右の4つの線分データを文書データ30に追加し、表2については、矩形形状の表外枠を形成する罫線47に対応する上下左右の4つの線分データを文書データ30に追加する。罫線追加部16は、
図7に示す表外枠を形成する罫線46,47の各々に対応する線分データが追加された文書データ30を、罫線追加文書データとして外部に出力する。その後、文書データ処理装置1は、文書データ30に対する処理を終了する。文書データ取込部10が、次の1ページ分の文書データを交点座標検出部11と、罫線追加部16とに出力すると、当該文書データに対するSa2以降の処理が行われる。
【0044】
(第1の実施形態の構成による作用・効果)
上記の第1の実施形態の文書データ処理装置1の構成により、例えば、文書データ30のように、左右の端に罫線が存在しない表であっても、左右の端に罫線を追加することが可能になる。そのため、表1及び表2の各々に含まれる個々のセルが矩形形状の線で囲まれる状態にすることができる。このように、表に含まれる全てのセルが罫線で囲まれることにより、例えば、罫線で囲まれたセルに含まれるデータを読み出す一般的なアプリケーションソフトウェアを用いることで、表1及び表2の各々に含まれている項目名や項目値といったデータを読み出すことが可能になる。そのため、文書データ処理装置1を用いることにより、例えば、仕様書のようにページ数が多く、また、表が多用されている文書データから、表に含まれる項目名や項目値を容易に読み出すことができる。
【0045】
(第1の実施形態の他の構成例)
上記した
図4のSa5の処理に示されるように、第1の実施形態の文書データ処理装置1では、1本の垂直線に対して、2本の水平線が交差した3行2列の表を、検出する表の最小構成として想定している。これに対して、1本の水平線に対して、2本の垂直線が交差した2行3列の表も検出対象に含める場合、以下のような処理を行うようにしてもよい。すなわち、表構成交点座標検出部13は、Sa5の処理のタイミングで、Sa5の処理を行うと共に、複数の頂点除外交点座標の各々において、Y座標値が、他の頂点除外交点座標のY座標値と同一である頂点除外交点座標を検出するようにしてもよい。これにより、3行2列の表を、検出対象に含めることができる。
【0046】
上記の第1の実施形態では、1本の垂直線に対して、2本の水平線が交差した3行2列の表を、検出する表の最小構成として想定している。このことから、表候補領域検出部14は、Sa6の処理において、表構成交点リストデータに含まれる要素の数、すなわち、表構成交点座標の数が、2個以上であるか否かを判定するようにしている。これに対して、例えば、1本の垂直線に対して、3本の水平線が交差した4行2列の表を、検出する表の最小構成とする場合、Sa6の処理を、表構成交点リストデータに含まれる要素の数が、「3個」以上であるか否かを判定するようにすればよい。言い換えると、Sa6の処理の判定基準の個数を変更することにより、検出対象とする表の最小構成を変更することが可能になる。
【0047】
上記の第1の実施形態では、表領域生成部15は、Sa8の処理の手法によって、表候補領域から表領域を生成するようにしている。これに対して、表領域生成部15は、例えば、以下のようにして、表領域を生成するようにしてもよい。表には、
図6の表構成交点44から生成される表候補領域のように、表全体の領域に一致する表候補領域が、幾つか含まれる。そのため、表領域生成部15は、最初に最大の面積を有する表候補領域を表領域とし、表領域とした表候補領域と重複領域が存在しない、次に面積の大きい表候補領域を表領域とするといった手順によって表領域の各々を生成するようにしてもよい。
【0048】
上記の第1の実施形態では、罫線追加部16は、Sa10の処理において、
図7に示すように、表外枠を示す矩形形状を形成する罫線46,47に対応する線分データを文書データ30に追加するようにしている。これに対して、罫線追加部16は、交点リストテーブル120を参照し、表外枠の矩形形状の4辺において線上に交点が存在していない辺を検出し、検出した辺に対応する罫線の線分データのみを文書データ30に追加するようにしてもよい。このようにした場合、
図7に示す文書データ30の表1及び表2については、既に横方向の罫線が存在しているため、縦方向の罫線のみを追加すればよいことになる。
【0049】
上記の第1の実施形態において、表構成交点座標検出部13は、Sa3の処理において、頂点を示す座標を除外する処理を行う前に、交点リストテーブル120に2個以上のレコードが記憶されていない場合、処理を終了するようにしてもよい。交点リストテーブル120のレコードが2個未満である場合、文書データ30において表が存在せず、Sa4の判定処理を行う前に文書データ30に対する処理を終了させることができる。
【0050】
<第2の実施形態>
(第2の実施形態の文書データ処理装置の構成)
図8に示すように、文書データ処理装置2は、ハードウェアである構成要素またはハードウェアとソフトウェアとの組み合わせから構成される機能的構成要素として、文書データ取込部10、テキストブロック検出部21、記憶部22、行番号リスト生成部23、行番号リスト分割部24、同一列テキストブロック群検出部25、垂直方向罫線追加部26、及び水平方向罫線追加部27を備える。
【0051】
文書データ取込部10は、第1の実施形態の文書データ取込部10と同一の構成を備える。ただし、第2の実施形態では、文書データ取込部10は、一例として、
図9に示す1ページの文書データ50を、テキストブロック検出部21と、垂直方向罫線追加部26とに出力する。
【0052】
文書データ50は、
図9に示すように、符号51で示す文章の領域、符号52で示す表のタイトル、表、及び表の注釈文の領域、符号53で示す文章の領域、符号54で示す表のタイトルと表の領域という4つの領域を含んでいる。文書データ50内の位置は、例えば、文書データ50の左下の隅を原点とするXY座標系で表される。文書データ50は、第1の実施形態の文書データ30と同様に、文字データと、文字の位置を示すデータと、線分データと、線分の位置を示すデータとを含んでいる。
【0053】
第2の実施形態の文書データ処理装置2において処理の対象としている文書データ50に含まれる表は、行ごとの列数が一致しており、かつ、列ごとの行数が一致している表を前提としている。文書データ50に含まれる表において、同一列に属する文字列は、左揃え、中央揃え、右揃えのいずれかで示されていることを前提としている。文書データ50において、同一行に存在する文字は、文字の大きさに関わらず、下揃えになっていることを前提としている。第1の実施形態において説明したように、文字の位置を示すデータは、例えば、1つの文字が存在する範囲を示す矩形形状の4つの頂点のX座標値とY座標値とによって表されるデータである。したがって、同一行に存在する文字が下揃えになるということは、同一行に存在する文字の各々の文字の位置を示すデータの左下、及び右下の頂点のY座標値が一致している状態になることを意味する。
【0054】
テキストブロック検出部21は、文書データ50に含まれる文字の位置を示すデータに基づいて、テキストブロックを検出する。テキストブロック検出部21は、例えば、以下のようにしてテキストブロックを検出する。
【0055】
例えば、「AB」という文字列が存在している場合、文字Aの位置を示すデータにおける右端のX座標値と、文字Aに右側で隣接する文字Bの位置を示すデータにおける左端のX座標値とが一致する関係(以下、この関係を第1の隣接条件という)になる。また、文字Aの範囲を示す矩形形状の右端の辺の最大と最小のY座標値で示される範囲と、文字Bの範囲を示す矩形形状の左端の辺の最大と最小のY座標値で示される範囲とは、全部が重複しているか、または、一部が重複している関係(以下、この関係を第2の隣接条件という)になる。なお、文字Aと文字Bのフォントや大きさが同一である場合、原則として、最大と最小のY座標値で示される範囲の全部が重複し、文字のフォントや大きさが異なる場合、一部が重複することになる。
【0056】
文書データ50の文章中に存在するスペースは、文字と同様に、スペースを示すデータと、スペースの位置を示すデータとによって表される。スペースを示すデータは、例えば、スペースが、半角スペースであるか、全角スペースであるかを示すデータである。スペースの位置を示すデータは、スペースの範囲を示す矩形形状の4つの頂点のX座標値とY座標値とによって表されるデータである。
【0057】
テキストブロック検出部21は、文書データ50内の最上段の左端の文字を検出することが可能になっている。テキストブロック検出部50は、既にテキストブロックを検出している場合、既に検出したテキストブロックの部分を除外した文書データ50における最上段の左端の文字を検出することが可能になっている。
【0058】
テキストブロック検出部21は、テキストブロックを検出していない状態において、最初に、文書データ50における最上段の左端の「Lateral」の「L」の文字を検出して始点とする。テキストブロック検出部21は、始点の文字の位置を示すデータに基づいて、上記した第1と第2の隣接条件に基づいて、右側、すなわちX座標値が増加する方向において隣接する文字を検出していく検索処理を行う。テキストブロック検出部21は、検索処理の過程において、文字と、文字との間に、1つのスペースが存在する場合には、文字が連続しているとみなして検索処理を継続する。ここで、1つのスペースは、半角スペースであってもよいし、全角スペースであってもよい。テキストブロック検出部21は、検索処理の過程において、文字が連続しなくなった場合、または、文書データ50の右端のX座標値の位置に到達した場合、最後に検出した文字の位置をテキストブロックの終点とする。なお、文字が連続しなくなる場合とは、2つ以上のスペースが連続する場合である。
【0059】
文書データ50における「Lateral」の「L」を始点とした検索処理の場合、テキストブロック検出部21は、最上段の右端の「as」の「s」の文字の位置を終点とすることになる。テキストブロック検出部21は、起点と終点の間に存在する全ての文字を囲む矩形形状の枠を1つのテキストブロックとして検出する。すなわち、テキストブロックとは、文字と文字の間に1スペースがある場合に、文字が連続しているとみなして、X軸方向に連続する文字の範囲を示す矩形形状の枠ということができる。「Lateral」の「L」を始点とし、「as」の「s」を終点とする検索処理を行った場合、テキストブロック検出部21は、
図9に示すテキストブロック55を検出する。なお、文書データ50において、文字は、X軸と平行に並んでいるため、テキストブロック55の形状である矩形形状の横方向の線分は、X軸に平行な線分になり、縦方向の線分は、Y軸に平行な線分になる。
【0060】
テキストブロック検出部21は、検出したテキストブロックの位置を特定するために、検出したテキストブロックの4つの頂点の座標を検出する。テキストブロック55を検出した場合、テキストブロック検出部21は、テキストブロック55の4つの頂点55-1,55-2,55-3,55-4のX座標値及びY座標値を検出する。
【0061】
テキストブロック検出部21は、直前に検出したテキストブロックの終点を示す文字が、文字が連続しなくなったことに起因して検出した場合、当該文字の右側において隣接するスペースを始点として、新たな文字を検出するまで検出を繰り返し行う。テキストブロック検出部21は、検出した新たな文字を、次のテキストブロックの始点として、再び、上記の検索処理を行う。
【0062】
テキストブロック検出部21は、検索処理の過程で文書データ50の右端のX座標値の位置に到達した場合、既に検出したテキストブロックの部分を除外した文書データ50における最上段の左端の文字を検出する。例えば、テキストブロック検出部21が直前に検出したテキストブロックが、
図9のテキストブロック55であるとする。この場合、テキストブロック検出部21は、テキストブロック55の1つ下の行の先頭に存在する「measured」の文字列の「m」の文字を、既に検出したテキストブロック55の部分を除外した文書データ50における最上段の左端の文字として検出する。テキストブロック検出部21は、検出した「m」の文字を始点として、再び、上記の検索処理を行う。
【0063】
上記のような検索処理の手順により、テキストブロック検出部21は、文書データ50の最下段の右端の位置に到達するまで、検索処理を行い、文書データ50に存在する全てのテキストブロックを検出する。なお、上記のような検索処理を行うことから、テキストブロックは、行単位で存在することになり、1つの行に複数のテキストブロックが存在する場合があるが、2行以上にまたがって1つのテキストブロックが存在することはない。また、テキストブロック検出部21が、始点の文字を検出した直後に、2つ以上のスペースが連続している場合、1文字だけを含むテキストブロックを検出することになる。そのため、以下の説明において、テキストブロックに含まれる文字列という場合、1文字だけを含む文字列も含むものとする。
【0064】
テキストブロック検出部21は、1ページ分の文書データから全てのテキストブロックを検出すると、例えば、テキストブロックの所定位置のY座標の座標値によって特定される行番号をテキストブロックごとに生成する。ここで、テキストブロックの所定位置とは、例えば、同一行に複数のテキストブロックが存在している場合に、当該複数のテキストブロックの各々において、同一のY座標値になるような位置である。上記したように文書データ50では、同一行に存在する文字は、下揃えになっていることを前提としている。そのため、文書データ50の場合、テキストブロックの所定位置として、例えば、テキストブロックの左下の頂点、または、右下の頂点の位置にすることで、テキストブロックの各々の行番号を特定することができる。なお、文書データ50において、同一行に存在する文字が、下揃えになっておらず、上揃えや中央揃えのフォーマットで示されている場合、そのフォーマットに応じた所定位置を定める必要がある。
【0065】
テキストブロックの所定位置のY座標の座標値によって特定される行番号とは、Y座標の座標値の大きさにしたがった順番で表される行番号である。例えば、テキストブロック検出部21は、Y座標値の大きいものから順に「1」から始まる連続番号の行番号を生成し、生成した行番号を、対応するテキストブロックに関連付ける。
【0066】
図10は、
図9に示す文書データ50からテキストブロック検出部21が検出した全てのテキストブロックと、テキストブロックに関連付けられた行番号との関係の一例を示す図である。
図10において、矩形形状の破線で囲んだ領域の各々が、個々のテキストブロックを示している。
図10では、行番号が、テキストブロックに対して、最上段から順に1,2,3,…のように関連付けられている例を示している。テキストブロック61-1,62-1,63-1のように同一行において、複数のテキストブロックが検出されている場合、テキストブロック61-1,62-1,63-1には、同一の行番号である「m」が関連付けられることになる。なお、
図10において、m-1>4、n-1>m+6、n>mである。
【0067】
テキストブロック検出部21は、検出したテキストブロックの各々に対して、一意に識別することができるテキストブロックIDを付与する。テキストブロック検出部21は、検出したテキストブロックの各々に関するデータをリスト形式で示したテキストブロックリストデータを生成する。ここで、1つのテキストブロックに対応するテキストブロックに関するデータとは、当該テキストブロックに対応するテキストブロックIDと、当該テキストブロックに関連付けられている行番号と、当該テキストブロックの位置を特定する4つの頂点のX座標値及びY座標値と、当該テキストブロックに含まれる文字列とを組み合わせたデータである。
【0068】
記憶部22は、テキストブロック検出部21が生成したテキストブロックリストデータが書き込まれるテキストブロックリストテーブル220を記憶する。
図11は、テキストブロックリストテーブル220のデータ形式の一例を示す図である。テキストブロックリストテーブル220は、「テキストブロックID」、「行番号」、「テキストブロック枠」、「テキストブロック内容」の項目を有する。「テキストブロックID」の項目には、テキストブロックに付与されるテキストブロックIDが書き込まれる。「行番号」の項目には、テキストブロックに関連付けられる行番号が書き込まれる。
【0069】
「テキストブロック枠」の項目は、「第1頂点X座標」、「第1頂点Y座標」、「第2頂点X座標」、「第2頂点Y座標」、「第3頂点X座標」、「第3頂点Y座標」、「第4頂点X座標」、「第4頂点Y座標」のサブ項目を有する。「第1頂点X座標」から「第4頂点Y座標」のサブ項目の各々には、テキストブロックを特定する4つの頂点の各々のX座標値及びY座標値が書き込まれる。なお、テキストブロックにおける第1頂点、第2頂点、第3頂点、第4頂点の位置は、左上の頂点を起点とした時計回りの順番になっており、第1頂点が、左上の頂点、第2頂点が、右上の頂点、第3頂点が、右下の頂点、第4頂点が、左下の頂点に対応する。「テキストブロック内容」の項目には、テキストブロックに含まれる文字列が書き込まれる。
【0070】
行番号リスト生成部23は、テキストブロックリストテーブル220から複数のテキストブロックが関連付けられている行番号を検出する。例えば、
図10に示す文書データ50の場合、行番号「m」は、複数のテキストブロック61-1,62-1,63-1に関連付けられている行番号に該当する。行番号リスト生成部23は、検出した行番号を番号順にしたがって並べた行番号リストデータを生成する。
【0071】
行番号リスト分割部24は、行番号リストデータに含まれる行番号の最初と最後の行番号の間に存在する全ての行番号に関連付けられているテキストブロックのいずれかに所定の表区切り文字を含むテキストブロックが存在するか否かを判定する。ここで、「最初と最後の行番号の間に存在する全ての行番号」とは、テキストブロックリストテーブル220に記憶されている行番号において、行番号リストデータに含まれる行番号の最初と最後の行番号の間に存在する行番号のことを意味する。
【0072】
所定の表区切り文字とは、予め定められる文字であって、「Table」や「表」といった、文書データにおいて、その文字の前後に表の存在を示唆する文字である。なお、所定の表区切り文字は、1つの文字が定められていてもよいし、複数の文字が定められていてもよい。行番号リスト分割部24は、所定の表区切り文字を含むテキストブロックが存在すると判定した場合、当該テキストブロックに関連付けられている行番号の前後で、行番号リストデータに含まれる行番号を分割し、分割した各々を新たな行番号リストデータとする。
【0073】
同一列テキストブロック群検出部25は、行番号リストデータの各々に対して以下の処理を行う。同一列テキストブロック群検出部25は、1つの行番号リストデータに含まれる行番号の各々に関連付けられているテキストブロックにおいて、同一列に属するテキストブロックを同一列テキストブロック群として検出する。
【0074】
上記したように、文書データ50の表の部分において同一列に属する文字列は、左揃え、中央揃え、右揃えのいずれかで示されている。そのため、左揃えの場合、同一列テキストブロック群検出部25は、第1頂点X座標値が同一であるテキストブロックを、同一列に属するテキストブロックであると判定する。なお、テキストブロックは、水平線と垂直線によって区切られた矩形形状であるため、第1頂点X座標値と第4頂点X座標値とは、同一の座標値になる。そのため、左揃えの場合、同一列テキストブロック群検出部25は、第4頂点X座標値が同一であるテキストブロックを、同一列に属するテキストブロックであると判定するようにしてもよい。
【0075】
中央揃えの場合、同一列テキストブロック群検出部25は、テキストブロックの第1頂点と、第2頂点の中央の位置のX座標値が同一であるテキストブロックを、同一列に属するテキストブロックであると判定する。なお、テキストブロックは、水平線と垂直線によって区切られた矩形形状であるため、第1頂点と第2頂点の中央の位置のX座標値と、第3頂点と第4頂点の中央の位置のX座標値とが同一になる。そのため、中央揃えの場合、同一列テキストブロック群検出部25は、第3頂点と第4頂点の中央の位置のX座標値が同一であるテキストブロックを、同一列に属するテキストブロックであると判定するようにしてもよい。
【0076】
右揃えの場合、同一列テキストブロック群検出部25は、テキストブロックの第2頂点X座標値が同一であるテキストブロックを、同一列に属するテキストブロックであると判定する。なお、テキストブロックは、水平線と垂直線によって区切られた矩形形状であるため、第2頂点X座標値と第3頂点X座標値とは、同一の座標値になる。そのため、右揃えの場合、同一列テキストブロック群検出部25は、第3頂点X座標値が同一であるテキストブロックを、同一列に属するテキストブロックであると判定するようにしてもよい。
【0077】
なお、左揃えになっているか、中央揃えになっているか、右揃えになっているかは不明である。そのため、同一列テキストブロック群検出部25は、上記した左揃え、中央揃え、右揃えの各々を判定する3通りの判定手法の各々を、1つの行番号リストデータに含まれる行番号の各々に関連付けられている全てのテキストブロックに適用する。同一列テキストブロック群検出部25は、3通りの判定手法のいずれかにおいて、同一列に属すると判定したテキストブロックの組み合わせを同一列テキストブロック群とする。
【0078】
同一列テキストブロック群検出部25は、同一列テキストブロック群に含まれるテキストブロックの各々に対応するテキストブロックIDをリスト形式で示した同一列テキストブロック群リストデータを生成する。
【0079】
垂直方向罫線追加部26は、同一列テキストブロック群リストデータの各々に対して、以下の処理を行う。垂直方向罫線追加部26は、1つの同一列テキストブロック群リストデータに含まれるテキストブロックIDに対応するテキストブロックのX座標値に基づいて、垂直方向の罫線を文書データに追加する。水平方向罫線追加部27は、行番号リストデータの各々に含まれる行番号の各々に対して、以下の処理を行う。水平方向罫線追加部27は、1つの行番号に関連付けられているテキストブロックのY座標値に基づいて、水平方向の罫線を文書データに追加する。
【0080】
(第2の実施形態の文書データ処理装置による処理)
図12に示すフローチャートを参照しつつ、第2の実施形態の文書データ処理装置2による処理について説明する。なお、ここでは、所定の表区切り文字として「Table」が予め定められているとする。文書データ取込部10は、外部から与えられる文書データを取り込む。文書データ取込部10は、取り込んだ文書データから1つのページを選択する。ここでは、文書データ取込部10は、
図9に示す文書データ50のページを選択したとする。文書データ取込部10は、選択した文書データ50をテキストブロック検出部21と、垂直方向罫線追加部26とに出力する(Sb1)。
【0081】
テキストブロック検出部21は、
図10に示すように文書データ50に含まれる全てのテキストブロックを検出する。テキストブロック検出部21は、検出したテキストブロックの各々に対して、異なるテキストブロックIDを生成して付与する。テキストブロック検出部21は、検出したテキストブロックの各々の所定位置のY座標の座標値に基づく行番号を、テキストブロックの各々に関連付ける。テキストブロック検出部21は、テキストブロックリストデータを生成し、生成したテキストブロックリストデータを、記憶部22のテキストブロックリストテーブル220に書き込む(Sb2)。
【0082】
行番号リスト生成部23は、テキストブロックリストテーブル220にテキストブロックリストデータが書き込まれると、テキストブロックリストテーブル220から複数のテキストブロックが関連付けられている行番号を検出する。
図10に示す文書データ50の場合、複数のテキストブロックが関連付けられている行番号は、「m」、「m+1」、「m+2」、「m+3」、「m+4」、「n」、「n+1」、「n+2」、「n+3」の9つの行番号である。したがって、行番号リスト生成部23は、当該9つの行番号を検出し、検出した9つの行番号を番号順にしたがって並べた行番号リストデータを生成する。行番号リスト生成部23は、生成した行番号リストデータを行番号リスト分割部24に出力する(Sb3)。ここでは、行番号リスト生成部23は、先頭から「m」、「m+1」、「m+2」、「m+3」、「m+4」、「n」、「n+1」、「n+2」、「n+3」の順に行番号が並んだ行番号リストデータを生成する。
【0083】
行番号リスト分割部24は、行番号リスト生成部23が出力する行番号リストデータを取り込むと、行番号リストデータの最初の行番号である「m」と、最後の行番号である「n+3」とを読み出す。行番号リスト分割部24は、テキストブロックリストテーブル220において、行番号「m」から行番号「n+3」の間に存在する全ての行番号のレコードの「テキストブロック内容」の項目の文字列を参照する。行番号リスト分割部24は、参照した「テキストブロック内容」の項目の文字列の中に所定の表区切り文字、すなわち「Table」が含まれているか否かを判定する(Sb4)。行番号リスト分割部24は、所定の表区切り文字が含まれていないと判定した場合(Sb4、No)、行番号リストデータを同一列テキストブロック群検出部25と、水平方向罫線追加部27とに出力し、その後、処理は、ループLb1s~Lb1eの処理に進められる。
【0084】
一方、行番号リスト分割部24は、所定の表区切り文字が含まれていると判定した場合(Sb4、Yes)、テキストブロックリストテーブル220において、所定の表区切り文字が含まれているレコードの「行番号」の項目の行番号を検出する。
図10に示す文書データ50の場合、「n-1」行目に存在するテキストブロック60に「Table」の文字が含まれている。この「n-1」行目のテキストブロック60に関するデータは、
図11のテキストブロックリストテーブル220において、テキストブロックIDが「r-1」のレコードとして書き込まれている。そのため、行番号リスト分割部24は、Sb4の処理において、Yesの判定を行い、行番号「m」から行番号「n+3」の間の「n-1」をテキストブロックリストテーブル220から検出する。
【0085】
行番号リスト分割部24は、行番号リストデータに含まれる行番号を、検出した「n-1」の行番号の前後で分割し、「m」、「m+1」、「m+2」、「m+3」、「m+4」の行番号を含む行番号リストデータと、「n」、「n+1」、「n+2」、「n+3」の行番号を含む行番号リストデータとを生成する(Sb5)。以下、「m」、「m+1」、「m+2」、「m+3」、「m+4」の行番号を含む行番号リストデータを第1の行番号リストデータといい、「n」、「n+1」、「n+2」、「n+3」の行番号を含む行番号リストデータを第2の行番号リストデータという。
【0086】
ここで、行番号リストデータに含まれる要素数、すなわち、行番号の数が、2個以下である場合、単に、同一行に複数のテキストブロックが存在する行が、連続して、1行、または、2行で並んでいるだけであり、表ではない可能性が高いと考えられる。そのため、行番号リスト分割部24は、行番号リストデータのうち、行番号の数が3個以上の行番号リストデータを選択し、行番号の数が3個未満の行番号リストデータを破棄する。なお、行番号リストデータを破棄した結果、行番号リストデータの数が0個になった場合、行番号リスト分割部24は、処理を終了する。行番号リスト分割部24は、選択した行番号リストデータを同一列テキストブロック群検出部25と、水平方向罫線追加部27とに出力する(Sb6)。ここでは、第1の行番号リストデータには、5個の行番号が含まれており、第2の行番号リストデータには、4個の行番号が含まれている。そのため、行番号リスト分割部24は、第1の行番号リストデータと、第2の行番号リストデータとを同一列テキストブロック群検出部25と、水平方向罫線追加部27とに出力する。
【0087】
同一列テキストブロック群検出部25は、行番号リスト分割部24が出力する行番号リストデータを取り込むと、取り込んだ行番号リストデータごとに、ループLb1s~Lb1eの処理を行う。以下、同一列テキストブロック群検出部25が、行番号リストデータとして、第1の行番号リストデータと、第2の行番号リストデータとを取り込んだ場合について説明する。
【0088】
同一列テキストブロック群検出部25は、例えば、最初に、第1の行番号リストデータを選択し、上記した左揃え、中央揃え、右揃えの3通りの判定手法を適用して、第1の行番号リストデータに対する同一列テキストブロック群を検出する。
図10に示すように、第1の行番号リストデータに含まれる「m」、「m+1」、「m+2」、「m+3」、「m+4」行目のテキストブロックは、左揃えに並んでいる。そのため、同一列テキストブロック群検出部25は、左揃えの場合の判定手法を適用した際に、「m」、「m+1」、「m+2」、「m+3」、「m+4」の各々に対応するテキストブロックリストテーブル220の「第1頂点X座標」のX座標値に基づいて、
図10のTable2.1の1列目のテキストブロック61-1,61-2,61-3,61-4,61-5を、同一列に属するテキストブロックとして判定する。
【0089】
同一列テキストブロック群検出部25は、同一列に属するテキストブロック61-1,61-2,61-3,61-4,61-5の各々に対応するテキストブロックIDをテキストブロックリストテーブル220から検出する。同一列テキストブロック群検出部25は、検出したテキストブロックIDを含む同一列テキストブロック群データ(以下、第1の同一列テキストブロック群データという)を生成する。
【0090】
図10のTable2.1の2列目のテキストブロック62-1,62-2,62-3,62-4,62-5において、テキストブロック62-1以外のテキストブロック62-2,62-3,62-4,62-5のサイズが同一であるとする。この場合、テキストブロック62-1~62-5は、左揃えで並んでいるが、テキストブロック62-2~62-5については、左揃えでもあり、中央揃えでもあり、右揃えでもある。そのため、左揃えの場合の判定手法を適用した場合、同一列テキストブロック群検出部25は、テキストブロック62-1~62-5の5つのテキストブロックを、同一列に属するテキストブロックとして判定する。中央揃え、及び右揃えの場合の判定手法の各々を適用した場合、同一列テキストブロック群検出部25は、テキストブロック62-2~62-5の4つのテキストブロックを、同一列に属するテキストブロックとして判定する。
【0091】
この場合、左揃えの場合の判定手法によって同一列に属すると判定されたテキストブロックの組み合わせは、中央揃え、及び右揃えの場合の判定手法によって同一列に属すると判定されたテキストブロックの組み合わせを全て含む関係になっている。このような関係になっている場合、同一列テキストブロック群検出部25は、要素数の最も多い組み合わせ、すなわちテキストブロック62-1,62-2,62-3,62-4,62-5の組み合わせを選択する。同一列テキストブロック群検出部25は、選択したテキストブロック62-1~62-5の組み合わせの各々に対応するテキストブロックIDを含む同一列テキストブロック群データ(以下、第2の同一列テキストブロック群データという)を生成する。
【0092】
2列目と同様の手順で、同一列テキストブロック群検出部25は、
図10のTable2.1の3列目のテキストブロック63-1,63-2,63-3,63-4,63-5を、同一列に属するテキストブロックとして判定する。同一列テキストブロック群検出部25は、テキストブロック63-1~63-5の各々に対応するテキストブロックIDを含む同一列テキストブロック群データ(以下、第3の同一列テキストブロック群データという)を生成する。同一列テキストブロック群検出部25は、生成した3つの同一列テキストブロック群データ、すなわち、第1から第3の同一列テキストブロック群データを垂直方向罫線追加部26に出力する(Sb7)。
【0093】
垂直方向罫線追加部26は、文書データ取込部10が出力する文書データ50と、同一列テキストブロック群検出部25が出力する第1から第3の同一列テキストブロック群データとを取り込む。垂直方向罫線追加部26は、取り込んだ第1から第3の同一列テキストブロック群データに含まれている全てのテキストブロックIDに対応するテキストブロック61-1~61-5,62-1~62-5,63-1~63-5における最小と最大のY座標値を、テキストブロックリストテーブル220から検出する。垂直方向罫線追加部26は、検出した最小と最大のY座標値を、それぞれ垂直方向の罫線の始点と終点のY座標値として特定する(Sb8)。
【0094】
垂直方向罫線追加部26は、ループLb2s~Lb2eの処理を開始する。垂直方向罫線追加部26は、例えば、最初に、第1の同一列テキストブロック群データを選択する。垂直方向罫線追加部26は、選択した第1の同一列テキストブロック群データに含まれているテキストブロックIDに対応するテキストブロック61-1~61-5における最小のX座標値を、テキストブロックリストテーブル220から検出する。テキストブロック61-1~61-5の場合、左揃えになっているため、最小のX座標値は、テキストブロック61-1~61-5の第1頂点のX座標値になる。
【0095】
垂直方向罫線追加部26は、検出した最小のX座標値を経由し、Sb8の処理において特定した垂直方向の罫線の始点と終点の各々を示すY座標値の間に、Y軸と平行な垂直方向の罫線の線分データを文書データ50に追加する。これにより、
図13に示す垂直方向の罫線71-1の線分データが文書データ50に追加されることになる(Sb9)。
【0096】
仮に、テキストブロック61-1~61-5が中央揃え、または、右揃えになっていたとする。この場合、最も幅の長さが大きいテキストブロック61-5の第1頂点のX座標値が、最小のX座標値になる。したがって、テキストブロック61-1~61-5が左揃え、中央揃え、右揃えのいずれであったとしても、垂直方向罫線追加部26が第1の同一列テキストブロック群データから検出する最小のX座標値は、テキストブロック61-1~61-5における右端の位置を示すことになる。そのため、Sb9の処理において、テキストブロック61-1~61-5の右端に垂直方向の罫線の線分データが追加されることになる。
【0097】
垂直方向罫線追加部26は、次に、第2の同一列テキストブロック群データを選択して、第2の同一列テキストブロック群データに対するSb9の処理を行うと、
図13に示す垂直方向の罫線71-2の線分データが文書データ50に追加されることになる。垂直方向罫線追加部26は、更に、第3の同一列テキストブロック群データを選択して、第3の同一列テキストブロック群データに対するSb9の処理を行うと、
図13に示す罫線71-3の線分データが文書データ50に追加されることになる(ループLb2s~Lb2e)。なお、上記では、垂直方向罫線追加部26は、第1の同一列テキストブロック群データ、第2の同一列テキストブロック群データ、第3の同一列ブロック群データの順に選択する例を示しているが、任意の順で選択しても同一の結果が得られることになる。
【0098】
垂直方向罫線追加部26は、取り込んだ第1から第3の同一列テキストブロック群データに含まれる全てのテキストブロックIDに対応するテキストブロックリストテーブル220のレコードから最大のX座標値を検出する。文書データ50の場合、第1から第3の同一列テキストブロック群データにおける最大のX座標値は、テキストブロック63-2~63-5の第2頂点のX座標値である。そのため、垂直方向罫線追加部26は、テキストブロック63-2~63-5の第2頂点のX座標値を最大のX座標値として検出する。
【0099】
垂直方向罫線追加部26は、検出した最大のX座標値を経由し、Sb8の処理において特定した垂直方向の罫線の始点と終点の各々を示すY座標値の間に、Y軸と平行な垂直方向の罫線の線分データを文書データ50に追加する。これにより、
図13に示す垂直方向の罫線71-4の線分データが文書データ50に追加されることになる(Sb10)。これにより、文書データ50に対して、Table2.1の表の縦方向の全ての罫線71-1~71-4の各々の線分データが追加されることになる。
【0100】
なお、Sb7~Sb10の処理において、第1頂点のX座標値を参照して行う処理は、第4頂点のX座標値を参照して行う処理としてもよい。また、第2頂点のX座標値を参照して行う処理は、第3頂点のX座標値を参照して行う処理としてもよい。
【0101】
垂直方向罫線追加部26は、同一列テキストブロック群検出部25に対して、処理継続指示信号を出力する。同一列テキストブロック群検出部25は、同一列テキストブロック群検出部25は、垂直方向罫線追加部26から処理継続指示信号を受けると、次に選択する行番号リストデータの有無を判定する。同一列テキストブロック群検出部25が、次に選択する行番号リストデータが存在すると判定した場合、当該行番号リストデータに対するループLb1s~Lb1eの処理が行われる。ここでは、次の行番号リストデータとして、第2の行番号リストデータが存在するので、同一列テキストブロック群検出部25は、第2の行番号リストデータを選択し、選択した第2の行番号リストデータに対するSb7の処理を行う。同一列テキストブロック群検出部25は、第2の行番号リストデータに対するSb7の処理により得られた同一列テキストブロック群データを、垂直方向罫線追加部26に出力する。
【0102】
垂直方向罫線追加部26は、第2の行番号リストデータに対応する同一列テキストブロック群データを取り込むと、Sb8の処理と、ループLb2s~Lb2eの処理と、Sb10の処理を行う。これにより、
図13に示すように、文書データ50に対して、Table2.2の表の縦方向の全ての罫線72-1,72-2,72-3,72-4の各々の線分データが追加されることになる。
【0103】
同一列テキストブロック群検出部25は、垂直方向罫線追加部26から処理継続指示信号を受けた際に、次に選択する行番号リストデータが存在しないと判定した場合、終了通知信号を垂直方向罫線追加部26に出力する。垂直方向罫線追加部26は、同一列テキストブロック群検出部25から終了通知信号を受けると、垂直方向の罫線71-1~71-4,72-1~72-4の線分データを追加した文書データ50を、水平方向罫線追加部27に出力して、ループLb1s~Lb1eの処理が終了する。なお、上記では、ループLb1s~Lb1eの処理において、第1の行番号リストデータ、第2の行番号リストデータの順に選択して処理が行われる例を示しているが、任意の順で選択しても同一の結果が得られることになる。
【0104】
水平方向罫線追加部27は、行番号リスト分割部24が出力する行番号リストデータと、垂直方向罫線追加部26が出力する垂直方向の罫線の線分データが追加された文書データ50とを取り込み、取り込んだ行番号リストデータごとに、ループLb3s~Lb3eの処理を行う。ここでは、水平方向罫線追加部27が、行番号リストデータとして、第1の行番号リストデータと、第2の行番号リストデータとを取り込んだ場合について説明する。
【0105】
水平方向罫線追加部27は、例えば、最初に、第1の行番号リストデータを選択する。水平方向罫線追加部27は、第1の行番号リストデータに含まれる行番号である「m」,「m+1」,「m+2」,「m+3」,「m+4」に関連付けられている全てのテキストブロックにおける最小と最大のX座標値をテキストブロックリストテーブル220の第1から第4頂点のX座標値から検出する。水平方向罫線追加部27は、検出した最小と最大のX座標値を、それぞれ水平方向の罫線の始点と終点のX座標値として特定する(Sb11)。
【0106】
水平方向罫線追加部27は、例えば、最初に、第1の行番号リストデータの中で行番号の値が最も大きい「m+4」を選択する。水平方向罫線追加部27は、「m+4」に関連付けられているテキストブロック61-5,62-5,63-5の最小のY座標値を、テキストブロックリストテーブル220の第1から第4頂点の各々のY座標値の中から検出する。
【0107】
水平方向罫線追加部27は、検出した最小のY座標値を経由し、Sb11の処理において特定した最小と最大のX座標値の間に、X軸と平行な水平方向の罫線の線分データを文書データ50に追加する。これにより、
図14に示す水平方向の罫線73-1の線分データが文書データ50に追加されることになる。なお、水平方向の罫線を文書データ50に追加する際、既に、
図13に示した垂直方向の罫線71-1~71-4,72-1~72-4が追加されているが、
図14では見易さの観点から垂直方向の罫線71-1~71-4,72-1~72-4を省略して示している。
【0108】
水平方向罫線追加部27は、「m+4」以外の「m+3」,「m+2」,「m+1」,「m」についても、「m+4」の場合と同様の処理を行って、罫線73-2,73-3,73-4,73-5の線分データを文書データ50に追加する(Sb12)。なお、Sb12の処理では、水平方向罫線追加部27が行番号「m+4」から順に行番号「m」まで選択する例を示しているが、任意の順で選択しても同一の結果が得られることになる。
【0109】
水平方向罫線追加部27は、第1の行番号リストデータに対応する全てのテキストブロックにおける最大のY座標値をテキストブロックリストテーブル220の第1から第4頂点のY座標値の中から検出する。なお、文書データ50では、行番号が小さい方が、Y座標値が大きくなる。そのため、水平方向罫線追加部27は、行番号の最も値が小さい「m」に関連付けられているテキストブロック61-1,62-1,63-1の中の最大のY座標値を、第1の行番号リストデータに対応する全てのテキストブロックの中の最大のY座標値として検出するようにしてもよい。
【0110】
水平方向罫線追加部27は、検出した最大のY座標値を経由し、Sb11の処理において特定した最小と最大のX座標値の間に、X軸と平行な水平方向の罫線の線分データを文書データ50に追加する。これにより、
図14に示すTable2.1の表の最上段の横方向の罫線、すなわち、水平方向の罫線73-6の線分データが文書データ50に追加されることになる(Sb13)。
【0111】
水平方向罫線追加部27は、次に、第2の行番号リストデータを選択し、第1の行番号リストデータと同様の処理を行う。これにより、Table2.2の表に対して、
図14に示す罫線74-1,74-2,74-3,74-4,74-5の各々の線分データが、水平方向罫線追加部27によって文書データ50に追加されることになる(ループLb3s~Lb3e)。なお、上記では、ループLb3s~Lb3eの処理は、第1の行番号リストデータ、第2の行番号リストデータの順に選択して処理が行われる例を示しているが、任意の順で選択しても同一の結果が得られることになる。
【0112】
これにより、文書データ50に対して、
図15に示すように、Table2.1及びTable2.2の表の各々において、垂直方向の罫線71-1~71-4,72-1~72-4、及び水平方向の罫線73-1~73-6,74-1~74-5の各々の線分データが追加され、表の各セルが、罫線で区切られた矩形形状になる。水平方向罫線追加部27は、最終的に得られた
図15に示す文書データ50を、罫線追加文書データとして外部に出力する。その後、文書データ処理装置2は、文書データ50に対する処理を終了する。文書データ取込部10が、次の1ページの文書データをテキストブロック検出部21と、垂直方向罫線追加部26とに出力した場合、当該文書データに対するSb2以降の処理が行われる。
【0113】
(第2の実施形態の構成による作用・効果)
上記の第2の実施形態の文書データ処理装置2の構成により、例えば、文書データ50のように、横方向の一部の罫線が示されている表を含んでいる場合に、縦と横の罫線を加えることが可能になる。そのため、Table2.1及びTable2.2の各々に含まれる個々のセルが矩形形状の線で囲まれる状態にすることができる。このように、表に含まれる全てのセルが罫線で囲まれることにより、例えば、罫線で囲まれたセルに含まれるデータを読み出す一般に利用されているアプリケーションソフトウェアを用いることで、Table2.1及びTable2.2の各々に含まれている項目名や項目値といったデータを読み出すことが可能になる。そのため、例えば、仕様書のようにページ数が多く、また、表が多用されている文書データから、表に含まれる項目名や項目値を容易に読み出すことができる。
【0114】
なお、第2の実施形態の文書データ処理装置2は、第1の実施形態の文書データ処理装置1のように表に存在する罫線を利用した処理を行っていない。そのため、例えば、文書データ50のTable2.1、及びTable2.2において横方向の罫線が省略されていたとしても、文書データ処理装置2は、縦と横の罫線を加えることができる。
【0115】
(第2の実施形態の他の構成例)
上記の第2の実施形態において、垂直方向罫線追加部26は、
図13のTable2.1の場合、表における同一列のテキストブロック群の左端に罫線71-1,71-2,71-3を追加して、表の右端の同一列のテキストブロック群の右端に罫線71-4を追加するようにしている。これに対して、垂直方向罫線追加部26は、左端と右端とを入れ替えて、表における同一列のテキストブロック群の右端に罫線を追加して、表の左端の同一列のテキストブロック群の左端に罫線を追加するようにしてもよい。すなわち、垂直方向罫線追加部26は、ループLb2s~Lb2eの処理において、同一列テキストブロック群データごとに、同一列テキストブロック群データに含まれるテキストブロックにおける最大のX座標値の垂直線の線分データを文書データ50に追加する。垂直方向罫線追加部26は、Sb10の処理において、1つの行番号リストデータから検出された全ての同一列テキストブロック群データに含まれるテキストブロックにおける最小のX座標値を、行番号リストデータごとに検出する。垂直方向罫線追加部26は、検出した最小のX座標値の各々に対応する垂直線の線分データを文書データ50に追加する。この場合、
図13のTable2.1を例とすると、罫線71-1は、テキストブロック61-5の第2頂点と第3頂点とを経由する垂直線になる。罫線71-2は、テキストブロック62-1の第2頂点と第3頂点とを経由する垂直線になる。罫線71-3は、罫線71-4の位置になり、罫線71-4は、罫線71-1の位置になる。
【0116】
上記の第2の実施形態において、水平方向罫線追加部27は、
図14のTable2.1の場合、表における行ごとのテキストブロックの下端に罫線73-1,73-2,73-3,73-4,73-5を追加して、表の最上段の行の上端に罫線73-6を追加するようにしている。これに対して、水平方向罫線追加部27は、下端と上端とを入れ替えて、表における行ごとのテキストブロックの上端に罫線を追加して、表の最下段の行の下端に罫線を追加するようにしてもよい。すなわち、水平方向罫線追加部27は、Sb12の処理において、行番号リストデータに含まれる行番号の各々に対応するY座標値を、当該行番号に関連付けられているテキストブロックにおける最大のY座標値とする。その上で、水平方向罫線追加部27は、行番号の各々に対応するY座標値の水平線の線分データを文書データ50に追加する。水平方向罫線追加部27は、1つの行番号リストデータに含まれる行番号に関連付けられているテキストブロックにおける最小のY座標値を、行番号リストデータごとに検出する。水平方向罫線追加部27は、検出した最小のY座標値の各々に対応する水平線の線分データを文書データ50に追加する。この場合、
図14のTable2.1を例とすると、罫線73-1は、テキストブロック61-5,62-5,63-5の最大のY座標値の水平線になる。罫線73-2は、テキストブロック61-4,62-4,63-4の最大のY座標値の水平線になる。罫線73-3は、テキストブロック61-3,62-3,63-3の最大のY座標値の水平線になる。罫線73-4は、テキストブロック61-2,62-2,63-2の最大のY座標値の水平線になる。罫線73-5は、罫線73-6の位置になり、罫線73-6は、罫線73-1の位置になる。
【0117】
上記の第2の実施形態では、垂直方向罫線追加部26が、Sb8の処理において、垂直方向の罫線の始点と終点のY座標値を特定している。また、水平方向罫線追加部27が、Sb11の処理において、水平方向の罫線の始点と終点のX座標値を特定している。第2の実施形態では、表の全体が矩形形状の罫線によって囲まれることを目的とするのではなく、表のセルの各々が、罫線によって囲まれるようにすればよい。そのため、垂直方向罫線追加部26が特定した垂直方向の罫線の始点の終点のY座標値のうち、小さい方のY座標値を所定量小さくし、大きい方のY座標値を所定量大きくする。また、水平方向罫線追加部27が特定した水平方向の始点と終点のX座標値のうち、小さい方のX座標値を所定量小さくし、大きい方のX座標値を所定量大きくするようにしてもよい。ここで、所定量は、他の表の罫線に交差しない程度の量が予め定められる。このように、罫線の長さを、両端において所定量分長くしたとしても、表のセルの各々は、罫線によって囲まれることになる。
【0118】
上記の第2の実施形態では、行番号リストデータに含まれる行番号の数が、2個以下である場合、単に、同一行に複数のテキストブロックが存在する行が、連続して、1行、または、2行で並んでいるだけであり、表ではない可能性が高いとしている。そのため、行番号リスト分割部24は、Sb6の処理において、3個以上の行番号を含む行番号リストデータを選択するようにしている。言い換えると、第2の実施形態の文書データ処理装置2では、3行2列の表を、検出する表の最小構成として想定している。これに対して、同一行に複数のテキストブロックが存在する行が連続して2行で並んでいる表、すなわち、2行2列の表を検出対象の表に含める場合、行番号リスト分割部24は、Sb6の処理において、2個以上の行番号を含む行番号リストデータを選択するようにすればよい。また、4行2列の表を、検出する表の最小構成とする場合、行番号リスト分割部24は、Sb6の処理において、4個以上の行番号を含む行番号リストデータを選択するようにすればよい。言い換えると、Sb6の処理における個数を変更することにより、検出対象とする表の最小構成を変更することが可能になる。
【0119】
上記の第2の実施形態において、例えば、文書データ50に表が1つしか含まれていることが予め分かっている場合、文書データ処理装置2は、行番号リスト分割部24を備えない構成としてもよい。この場合、行番号リスト生成部23が、
図12のSb6の処理を行った上で、3個以上の行番号を含む行番号リストデータを同一列テキストブロック群検出部25と、水平方向罫線追加部27とに出力することになる。
【0120】
上記の第2の実施形態において、
図12のフローチャートの処理では、ループLb1s~Lb1eの処理の後に、ループLb3s~Lb3eの処理を行うようにしている。これに対して、ループLb3s~Lb3eの処理を行って、水平線の線分データを文書データ50に追加した後に、ループLb1s~Lb1eの処理を行って、垂直線の線分データを文書データ50に追加するようにしてもよい。
【0121】
(第1及び第2の実施形態の他の構成例)
上記の第1及び第2の実施形態では、文書データ30,50のXY座標系の原点の位置を左下の頂点の位置にしている。これに対して、文書データ30,50のXY座標系の原点の位置を、左下の頂点以外の頂点の位置としてもよい。
【0122】
以上、本開示の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施の形態に限られるものではなく、本開示の要旨を逸脱しない範囲の設計等も含まれる。
【0123】
(コンピュータ構成)
図16は、上記の実施形態に係る文書データ処理装置1,2の各々を実現するコンピュータの構成を示す概略ブロック図である。コンピュータ90は、プロセッサ91、メインメモリ92、ストレージ93、及びインタフェース94を備える。上記の文書データ処理装置1,2が備える文書データ取込部10、及び文書データ処理装置1が備える交点座標検出部11、表構成交点座標検出部13、表候補領域検出部14、表領域生成部15、罫線追加部16、並びに文書データ処理装置2が備えるテキストブロック検出部21、行番号リスト生成部23、行番号リスト分割部24、同一列テキストブロック群検出部25、垂直方向罫線追加部26、水平方向罫線追加部27は、コンピュータ90に実装される。これらの機能部の動作は、プログラムの形式でストレージ93に記憶される。プロセッサ91は、プログラムをストレージ93から読み出してメインメモリ92に展開し、当該プログラムに従って
図4や
図12に示す処理を実行する。また、プロセッサ91は、プログラムに従って、記憶部12,22の各々に対応する記憶領域をメインメモリ92に確保する。
【0124】
プログラムは、コンピュータ90に発揮させる機能の一部を実現するためのものであってもよい。例えば、プログラムは、ストレージに既に記憶されている他のプログラムとの組み合わせ、または他の装置に実装された他のプログラムとの組み合わせによって機能を発揮させるものであってもよい。なお、他の実施形態においては、コンピュータは、上記構成に加えて、または上記構成に代えてPLD(Programmable Logic Device)などのカスタムLSI(Large Scale Integrated Circuit)を備えてもよい。PLDの例としては、PAL(Programmable Array Logic)、GAL(Generic Array Logic)、CPLD(Complex Programmable Logic Device)、FPGA(Field Programmable Gate Array)等が挙げられる。この場合、プロセッサによって実現される機能の一部または全部が当該集積回路によって実現されてよい。
【0125】
ストレージ93の例としては、HDD(Hard Disk Drive)、SSD(Solid State Drive)、磁気ディスク、光磁気ディスク、CD-ROM(Compact Disc Read Only Memory)、DVD-ROM(Digital Versatile Disc Read Only Memory)、半導体メモリ等が挙げられる。ストレージ93は、コンピュータ90のバスに直接接続された内部メディアであってもよいし、インタフェース94または通信回線を介してコンピュータ90に接続される外部メディアであってもよい。また、このプログラムが通信回線によってコンピュータ90に配信される場合、配信を受けたコンピュータ90が当該プログラムをメインメモリ92に展開し、上記処理を実行してもよい。また、ストレージ93は、一時的でない有形の記憶媒体である。
【0126】
<付記>
各実施形態に記載の文書データ処理装置1,2は、例えば以下のように把握される。
【0127】
(1)第1の態様に係る文書データ処理装置1は、直交するX座標とY座標とによって文書中の位置が示される文書データ30からX軸に平行な水平線と、Y軸に平行な垂直線とを検出し、検出した前記水平線と、前記垂直線との交点の座標である交点座標を検出する交点座標検出部11と、前記交点座標から頂点を示す座標を除外した頂点除外交点座標において、X座標値が他の前記頂点除外交点座標と同一である前記頂点除外交点座標を表構成交点座標として検出する表構成交点座標検出部13と、前記表構成交点座標を経由する前記水平線の両端のX座標値の2つの垂直線と、前記表構成交点座標を経由する前記垂直線の両端のY座標値の2つの水平線によって定められる矩形領域を表候補領域として検出する表候補領域検出部14と、前記表候補領域から表領域を生成する表領域生成部15と、前記表領域の最大及び最小のY座標値の2つの水平線と、前記表領域の最大及び最小のX座標値の2つの垂直線とによって定められる矩形形状に基づいて、前記文書データ30に対して罫線を追加する罫線追加部16と、を備える。本態様及び以下の(2)、(3)の態様によれば、文書データ30に示されている表に含まれる個々のセルが矩形形状の線で囲まれるようにすることができる。
【0128】
(2)第2の態様に係る文書データ処理装置1は、(1)の文書データ処理装置1であって、前記表領域生成部15は、前記表候補領域が複数存在する場合、共通の重複領域を含む前記表候補領域を囲む最小の矩形領域を新たな表候補領域とすることを繰り返し行い、前記重複領域が存在しなくなった際に存在する前記表候補領域の各々を前記表領域とする。
【0129】
(3)第3の態様に係る文書データ処理装置1は、(1)または(2)の文書データ処理装置1であって、前記表候補領域検出部14は、前記表構成交点座標の数が、2個以上である場合、前記表候補領域の検出を行う。これにより、文書データ処理装置1において、検出する表の最小構成を、1本の垂直線に対して、2本の水平線が交差した3行2列の表にすることができる。
【0130】
(4)第4の態様に係る文書データ処理装置2は、直交するX座標とY座標とによって文書中の位置が示される文書データ50からテキストブロックを検出し、検出した前記テキストブロックの所定位置のY座標値によって特定される行番号であってY座標値の大きさにしたがった順番で表される行番号を、検出した前記テキストブロックに関連付けるテキストブロック検出部21と、複数の前記テキストブロックが関連付けられている前記行番号を検出し、検出した前記行番号を番号順にしたがって並べた行番号リストを生成する行番号リスト生成部23と、前記行番号リストに含まれる前記行番号の各々に関連付けられている前記テキストブロックにおいて、同一列に属する前記テキストブロックを、同一列テキストブロック群として検出する同一列テキストブロック群検出部25と、前記同一列テキストブロック群に含まれる前記テキストブロックのX座標値に基づいて、Y軸に平行な垂直方向の罫線を前記文書データ50に追加する垂直方向罫線追加部26と、前記行番号リストに含まれる前記行番号ごとに、当該行番号に関連付けられている前記テキストブロックのY座標値に基づいて、X軸に平行な水平方向の罫線を前記文書データ50に追加する水平方向罫線追加部27と、を備える。本態様及び以下の(5)から(14)の態様によれば、文書データ50に示されている表に含まれる個々のセルが矩形形状の線で囲まれるようにすることができる。
【0131】
(5)第5の態様に係る文書データ処理装置2は、(4)の文書データ処理装置1であって、前記テキストブロック検出部21は、文字と文字の間に1スペースがある場合には、文字が連続しているとみなして、X軸方向に連続する文字の範囲の各々を前記テキストブロックとして検出する。
【0132】
(6)第6の態様に係る文書データ処理装置2は、(4)または(5)の文書データ処理装置2であって、前記行番号リストの最初と最後の行番号の間に存在する全ての前記行番号に関連付けられている前記テキストブロックのいずれかに所定の表区切り文字を含むテキストブロックが存在する場合、当該テキストブロックに関連付けられている前記行番号の前後で、前記行番号リストを分割し、分割した前記行番号リストの各々を新たな行番号リストとする行番号リスト分割部24を備える。これにより、文書データ50に複数の表が含まれている場合、文書データ50に示されている表ごとに、表の各々に含まれる個々のセルが矩形形状の線で囲まれるようにすることができる。
【0133】
(7)第7の態様に係る文書データ処理装置2は、(6)の文書データ処理装置2であって、前記行番号リスト分割部24は、分割により最終的に得られた前記行番号リストのうち、要素として含まれる前記行番号の数が、3個以上の前記行番号リストを選択し、3個未満の前記行番号リストを破棄する。これにより、文書データ処理装置2において、検出する表の最小構成を、1本の垂直線に対して、2本の水平線が交差した3行2列の表にすることができる。
【0134】
(8)第8の態様に係る文書データ処理装置2は、(4)から(7)の文書データ処理装置2であって、前記同一列テキストブロック群検出部25は、前記行番号リストに含まれる前記行番号の各々に関連付けられている前記テキストブロックの中から前記テキストブロックの所定位置のX座標値が一致する前記テキストブロックを、前記行番号リストごとに検出し、検出した前記テキストブロックの組み合わせを前記同一列テキストブロック群とする。
【0135】
(9)第9の態様に係る文書データ処理装置2は、(4)から(8)の文書データ処理装置2であって、前記垂直方向罫線追加部26は、前記同一列テキストブロック群ごとに、前記同一列テキストブロック群に含まれる前記テキストブロックにおける最小のX座標値の垂直線を前記垂直方向の罫線として前記文書データ50に追加すると共に、1つの前記行番号リストから検出された全ての前記同一列テキストブロック群に含まれる前記テキストブロックにおける最大のX座標値を、前記行番号リストごとに検出し、検出した前記最大のX座標値の各々に対応する垂直線を前記垂直方向の罫線として前記文書データ50に追加する。これにより、例えば、XY座標の原点が、文書データ50の左下に存在する場合、同一列のテキストブロックの左端に垂直方向の罫線を列ごと追加し、表の右端に垂直方向の罫線を追加することができる。
【0136】
(10)第10の態様に係る文書データ処理装置2は、(4)から(8)の文書データ処理装置2であって、前記垂直方向罫線追加部26は、前記同一列テキストブロック群ごとに、前記同一列テキストブロック群に含まれる前記テキストブロックにおける最大のX座標値の垂直線を前記垂直方向の罫線として前記文書データ50に追加すると共に、1つの前記行番号リストから検出された全ての前記同一列テキストブロック群に含まれる前記テキストブロックにおける最小のX座標値を、前記行番号リストごとに検出し、検出した前記最小のX座標値の各々に対応する垂直線を前記垂直方向の罫線として前記文書データ50に追加する。これにより、例えば、XY座標の原点が、文書データ50の左下に存在する場合、同一列のテキストブロックの右端に垂直方向の罫線を列ごと追加し、表の左端に垂直方向の罫線を追加することができる。
【0137】
(11)第11の態様に係る文書データ処理装置2は、(9)または(10)の文書データ処理装置2であって、前記垂直方向罫線追加部26は、前記行番号リストに含まれる全ての前記行番号に関連付けられている前記テキストブロックにおける最大と最小のY座標値を、前記行番号リストごとに検出し、検出した前記最大と最小のY座標値の組み合わせの各々を、各々に対応する前記垂直線の始点と終点のY座標値とする。これにより、表が存在する範囲に応じた長さの垂直方向の罫線を追加することができる。
【0138】
(12)第12の態様に係る文書データ処理装置2は、(4)から(11)の文書データ処理装置2であって、前記水平方向罫線追加部27は、前記行番号リストに含まれる前記行番号の各々に対応するY座標値を、当該行番号に関連付けられている前記テキストブロックにおける最小のY座標値とし、前記行番号の各々に対応するY座標値の水平線を前記水平方向の罫線として前記文書データ50に追加すると共に、1つの前記行番号リストに含まれる全ての前記行番号に関連付けられている前記テキストブロックにおける最大のY座標値を、前記行番号リストごとに検出し、検出した前記最大のY座標値の各々に対応する水平線を前記水平方向の罫線として前記文書データ50に追加する。これにより、例えば、XY座標の原点が、文書データ50の左下に存在する場合、同一行のテキストブロックの下端に罫線を行ごとに追加し、表の上端に罫線を追加することができる。
【0139】
(13)第13の態様に係る文書データ処理装置2は、(4)から(11)の文書データ処理装置2であって、前記水平方向罫線追加部27は、前記行番号リストに含まれる前記行番号の各々に対応するY座標値を、当該行番号に関連付けられている前記テキストブロックにおける最大のY座標値とし、前記行番号の各々に対応するY座標値の水平線を前記水平方向の罫線として前記文書データ50に追加すると共に、1つの前記行番号リストに含まれる全ての前記行番号に関連付けられている前記テキストブロックにおける最小のY座標値を、前記行番号リストごとに検出し、検出した前記最小のY座標値の各々に対応する水平線を前記水平方向の罫線として前記文書データ50に追加する。これにより、例えば、XY座標の原点が、文書データ50の左下に存在する場合、同一行のテキストブロックの上端に罫線を行ごとに追加し、表の下端に罫線を追加することができる。
【0140】
(14)第14の態様に係る文書データ処理装置2は、(12)または(13)の文書データ処理装置2であって、前記水平方向罫線追加部27は、前記行番号リストに含まれる全ての前記行番号に関連付けられている前記テキストブロックにおける最大と最小のX座標値を、前記行番号リストごとに検出し、検出した前記最大と最小のX座標値の組み合わせの各々を、各々に対応する前記水平線の始点と終点のX座標値とする。これにより、表が存在する範囲に応じた長さの水平方向の罫線を追加することができる。
【符号の説明】
【0141】
1,2 文書データ処理装置
10 文書データ取込部
11 交点座標検出部
12,22 記憶部
13 表構成交点座標検出部
14 表候補領域検出部
15 表領域生成部
16 罫線追加部
21 テキストブロック検出部
23 行番号リスト生成部
24 行番号リスト分割部
25 同一列テキストブロック群検出部
26 垂直方向罫線追加部
27 水平方向罫線追加部
30,50 文書データ