隣り合う情報を使った手法
複数のスタイルに対応できないか
前回述べた方法は段落はすべて共通のスタイルであることを仮定している。しかしながら複数のスタイルが混在する場合が存在しないわけではないのでどうにか対応出来ないか…。
前回確認したデータからは以下のことがわかる。
- 段落境界で値の変動がある
- 同一段落内で"行送り"はほぼ変わらない
必須行数のはなし
はい、OK。じゃあ、上から順に走査していって変動があったところを段落境界とすればいいね。
となれば良いがやってみると意外な形で失敗する。
それというのも段落境界を行の空間的距離から推測するにあたって少なくとも3行は必要となる。1個だけだとそれが大きめの行送りかあるいは段落境界なのか比較できる対象がなく判定ができないためである。
順に捜査していく場合、基準となる行はもっともらしいものである必要があるのだが、段落境界毎にそれはリセットされる必要があり、どうにかしてもっともらしい基準を見つける方法が必要になる。
どうやって基準を見つけるか
対象をデータテキストに限った方法ではあるが、隣接行の行送りの値が近い場合にそれを基準とするというアイデアがある。要するに段落境界付近の値は使用せずに段落の中心から先頭・末尾に向かって走査していくような方法である。
ただし、依然として段落境界でもっともらしい基準として誤って採用されることがあるという問題は残っている。
どう実現するか
色々やってみてそれらしく動いたのは以下のような手順である。
- もっともらしい基準値を見つける
- もっともらしい基準から段落境界に出くわすまで下に走査する
- もっともらしい基準から段落境界に出くわすまで上に走査する
- 統計量を基準値として段落検出する
そう、最終的に統計量を使ってしまっているのである。全くもって遺憾。
それというのももっともらしい基準値を見つけられない場合などもあるため、最終的には何か理由をつけて判定する必要があるのである。
また、2と3の走査ではそれぞれの検出結果で以前の結果を上書きするようにしている。したがって、1のもっともらしい基準値を見つける際に段落境界が誤検出された場合でも、本当の段落の走査処理によって正しい段落境界が設定され誤検出を打ち消すようにしている。
所感
ここまでやって段落ごとにスタイルが異なっていても段落検出できるようになるが、実際に段落ごとにスタイルが異なるような文章に会うことはそう多くなく、こねくり回した割には大抵のタスクは統計量だけで十分な場合が多いと感じた。
また、必須行数の兼ね合いで一つの段落が3行以上で構成されていないとうまく動作しないところも課題である。
コメント
コメントを投稿