0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

PDFを頻繁に扱う方なら、画面上では読めるのに、文字をそのまま取り出すのは意外と難しい、と感じたことがあるかもしれません。

PDFは、閲覧する環境が変わっても、文書のレイアウトを保ちやすい形式です。

一方で、文字の抽出や転記を目的に作られているわけではありません。

特に、文字情報を持たないスキャンPDFでは、OCRを使う必要があります。

しかし、OCRで取得できるのは、必ずしも「文章」ではありません。

行が分かれ、見出しと本文が混ざり、文書の構造が失われることもあります。

そこで、OCRで取得した文字列を、Clauseごとの読める文章へ戻す処理を作りました。

今回は、以前紹介した次の記事の中から、文章を再構築する処理についてまとめます。

私しか得しない、国際規格PDFからClause・本文・ページ番号をExcelへ抽出するツールを作った

OCRをかければ終わりだと思っていた

国際規格のPDFには、文字情報を持つものと、画像として保存されているものがあります。

画像のPDFは、そのままでは文字を取得できません。

そのため、OCRを使います。

最初は、OCRをかければ本文を取り出せると思っていました。

しかし、実際に取得できたのは、文章ではなく、文字列の集まりでした。

例えば、元の文章が次のようになっていたとします。

The equipment shall be designed to prevent unintended operation.

OCR後は、次のように分割されることがあります。

The equipment
shall be designed
to prevent
unintended operation.

文字は取得できています。

ただし、そのままではExcel上で読みにくい状態です。

OCRは文書構造まで戻してくれない

OCRは、画像から文字を認識します。

一方で、次のような構造までは必ずしも復元しません。

  • Clause番号
  • 見出し
  • 本文
  • 段落
  • 箇条書き
  • NOTE
  • FigureやTableのタイトル
  • ヘッダーやフッター

人間が見れば違いは分かります。

しかし、処理側から見ると、すべて同じ文字列です。

そこで、文字を取得した後に、文章として組み直す処理が必要になりました。

すべての改行を消せばよいわけではない

分割された行を結合すると、文章は読みやすくなります。

The equipment
shall be designed
to prevent unintended operation.

これを、次のようにします。

The equipment shall be designed to prevent unintended operation.

ただし、すべての改行を消すことはできません。

例えば、箇条書きです。

a) temperature;
b) pressure;
c) vibration.

これを一つの行へまとめると、元の構造が分かりにくくなります。

Clause、本文、箇条書き、NOTEも、それぞれ分けて扱う必要があります。

つまり、必要だったのは単純な改行削除ではありません。

結合してよい行と、残すべき改行を判定する処理

でした。

文章へ戻すために見たもの

文章を組み直すときは、文字列だけではなく、位置情報も使います。

主に確認したのは、次のような情報です。

  • 行の位置
  • インデント
  • 前後の行との距離
  • 行末の記号
  • 次行の先頭
  • Clause番号らしい形式
  • 箇条書き記号
  • NOTEなどの識別語

一つの条件だけでは判断できません。

複数の条件を組み合わせて、同じ段落かどうかを判定します。

判断が難しい場合は、無理に結合しないようにしました。

誤って別の文章をつなげるより、改行を残した方が原文を確認しやすいためです。

処理の流れ

処理の流れは、次のような形です。

PDFを読み込む
↓
OCRで文字を取得する
↓
文字列を読み順に並べる
↓
本文以外の文字列を除外する
↓
Clauseや箇条書きを判定する
↓
同じ段落の行を結合する
↓
Excelへ出力する

最終的には、次の3列へ整理します。

Clause | Text | Page

Page列も残します。

後からPDF原文へ戻り、抽出結果を確認するためです。

動作確認

自動テストでは、全50件が成功しました。

50 passed in 3.09s

さらに、開発時とは別のPDFを使い、ローカルアプリからExcelを出力しました。

今回の確認では、約580行を数秒で処理できました。

ただし、出力結果はそのまま完成品にはしません。

PDF原文と照合しながら、必要な箇所を手動で修正しています。

この確認には、機械的に転記された内容が正しいかを見る意味もあります。

完全自動化ではない

このツールは、人間による確認を不要にするものではありません。

PDFは、文書ごとに構造が異なります。

文字情報、フォント、図表、記号、レイアウトにも違いがあります。

そのため、異なるPDFを処理すると、新しい改善点が見つかります。

見つかった課題は、内部のIssueリストで管理しています。

実際の出力結果を確認しながら、処理とテストを少しずつ追加しています。

現在の目的は、完全自動化ではありません。

数百行の転記を数秒で下書きに変え、確認と修正へ集中すること

です。

OCRは入口だった

OCRを使えば、画像から文字を取得できます。

しかし、文字を取得しただけでは、調査に使える文章にはなりません。

画像
↓
OCR
↓
文字列
↓
段落の再構築
↓
Clauseとの対応付け
↓
確認できる文章

OCRは、処理の完成ではありませんでした。

文書を扱うための入口でした。

まとめ

今回作ったのは、OCRで取得した文字列を、Clauseごとの文章へ戻す処理です。

必要だったのは、文字認識そのものではありません。

  • どの行を結合するか
  • どの改行を残すか
  • どの文字を本文として扱うか
  • どのページから取得したか

を判断する処理でした。

「それ、誰が使うの?」と聞かれたら、たぶん私です。

それでも、約580行を最初から手作業で転記せずに済むなら、私には十分役立つ技術です。


運営サイト

法規・規格調査や、個人開発したツールについて発信しています。

きのとリサーチ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?