タスクと用語の整理
OCRを使って読み出した英文テキストについて、段落を検出する方法について検討します。同タスクを実現する方法はいくつか考えられますが、ここでは文字列間の空間的な距離を元に検出する方法について取り扱います。また、レイアウトはシンプルに縦方向にのみ存在するものとします(2段組などは考えない)。
まず用語の整理を行います。
空間的な距離
文字列における各行間の距離について行送りと行間が挙げられる。Wordだと行間は上記の行送りに相当するし、それぞれを逆に定義しているものも存在する。ここでは行送りと行間・文字送りと字間・文字サイズについて解説などいくつかのサイトを参考にし、行と行の距離を行送り、行の隙間(上側の行の下部から下側の行の上部まで)を行間とする。
- 行送り = ベースラインからベースラインまでの距離
- 行間 = 上側の行の最下端(ディセンダの部分)から下側の行の最上端(アセンダの部分)までの距離
OCRで取得可能な値
OCRでは認識した文字の矩形領域が取得できる。したがって、同一行のすべての文字の領域が持つ座標値の最小値、最大値から行全体の矩形領域が算出できる。
n行目の最上端をTop_n、最下端をBottom_nとしたとき、行送りと行間は以下のように算出する。
- 行送り ≒ |Top_n+1 - Top_n|
- 行間 ≒ |Top_n+1 - Bottom_n|
注意点は行送りにしても行間にしてもテキスト内容によって影響を受けること、行送りはベースラインが取得できないためTopで代替していること。
理想的にはベースラインを基に行送りを算出する必要があるが、OCRではベースラインは取得できないため算出可能なTopもしくはBottomを使う必要がある。一方で同一フォントサイズであってもアセンダ・ディセンダの有無によってTopおよびBottomは変動するため、テキストの内容によっては理想的な行送りから遠くなってしまう。
ちなみに行送りはToptoTopとBottomtoBottomの2パターンの算出が考えられるが、ディセンダを持つ文字よりもアセンダを持つ文字の方が多いためToptoTopの方が安定しているという推測のもとToptoTopを採用している。
コメント
コメントを投稿