1
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からClause・本文・ページ番号をExcelへ抽出するツールを作った

1
Posted at

はじめに

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

多くの人に必要とされるサービスではありませんが、自分の作業では何度も発生する不便だったため、専用のツールを作りました。

今回作ったのは、国際規格などのPDFから、次の3項目をExcelへ抽出するツールです。

  • Clause:条項番号
  • Text:条項本文
  • Page:PDF上のページ番号

出力形式は、非常に単純です。

Clause Text Page
1 Scope ... 5
3.1 Terms and definitions ... 8
4.2 The equipment shall ... 12

普通の人から見れば、「PDFの文章をExcelへ入れるだけ」に見えるかもしれません。

しかし、国際規格の内容を調査や比較に使おうとすると、単純なコピー&ペーストでは、なかなかうまくいきませんでした。

なぜ作ったのか

国際規格の調査では、PDFを読みながら、必要な条項をExcelへ整理することがあります。

Excelに整理しておくと、次のような作業がしやすくなります。

  • 条項ごとの内容確認
  • 旧版と新版の比較
  • 適用要件の整理
  • コメントや調査結果の追記
  • ページ番号を使った原文確認
  • 説明資料や差異表の作成

ところが、PDFから文章をそのままコピーすると、次のような問題が発生します。

  • 条項番号と本文が別々に抽出される
  • 文章が不自然な位置で改行される
  • ヘッダーやフッターが本文に混ざる
  • ページ番号が本文として取り込まれる
  • AnnexやBibliographyの構造が崩れる
  • 表や図の中の文字まで混ざる
  • 同じ条項の本文が複数行に分割される

一般的なPDF変換ツールは、PDFの見た目を別の形式へ変換することを目的としています。

私が欲しかったのは、見た目を再現したファイルではありません。

欲しかったのは、調査に使える形に構造化されたデータでした。

欲しかった出力

私が最低限必要としていたのは、次の3列です。

Clause | Text | Page

Clause列には、次のような条項番号を入れます。

1
2
3.1
3.1.1
4.2.3
Annex A
Bibliography

Text列には、その条項に属する本文をまとめます。

Page列には、抽出元のPDFページ番号を入れます。

ページ番号は、後から原文を確認するための証跡になります。

内容だけを抽出できても、どのページから取得した文章なのか分からなければ、調査資料としては使いにくいためです。

ツールの構成

ツールはPythonで作成しました。

主な処理は、次の流れです。

  1. PDFから文字列と位置情報を取得する
  2. ヘッダーやフッターなどの不要な文字を除外する
  3. 条項番号らしい文字列を判定する
  4. 条項番号以降の本文をまとめる
  5. ページ番号を付与する
  6. Excelファイルとして出力する

画面からPDFを選択し、必要に応じて抽出対象ページを指定できるようにしました。

出力されたExcelでは、Clause、Text、Pageを横並びで確認できます。

難しかった点

1. 数字がすべて条項番号とは限らない

PDF内には、条項番号以外にも多くの数字があります。

例えば、次のようなものです。

10 mm
50 Hz
2 kg
Figure 3
Table 4
ISO 12345

数字だけを見て条項番号と判定すると、単位、図番号、表番号、規格番号などがClause列に入ってしまいます。

そのため、文字列の形式だけでなく、周辺の文字や位置関係も考慮する必要がありました。

例えば、単純に次のような形式だけを条項番号として扱うとします。

3
3.1
3.1.1

それでも、文書内の数字が同じような形で配置されていれば、誤判定が起こります。

条項番号かどうかは、その文字列だけで完全に判断できるとは限りません。

2. 文字を取得できても、文章になるとは限らない

PDFから文字を取得できても、取得結果がそのまま読める文章になるとは限りません。

例えば、次の文章が、

The equipment shall be designed to prevent
unintentional operation.

複数の行や単語に分割されて取得されることがあります。

反対に、見出し、本文、箇条書きなど、本来は分けるべき要素が、連続した文字列として取得される場合もあります。

特にOCRを利用したPDFでは、文字認識ができても、読み順、段落、Clauseとの対応までは自動的に復元されません。

そのため、このツールでは、取得した文字列をそのままExcelへ出力するのではなく、行の位置や周辺の要素を確認しながら、本文として再構築する必要がありました。

この「OCRで拾った文字を文章へ戻す処理」については、別の記事で詳しくまとめます。

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

PDFから取得した行を単純に結合すると、通常の英文は読みやすくなります。

しかし、すべての改行を消すと、別の問題が発生します。

例えば、次のような箇条書きがあります。

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

これを単純に一行へ結合すると、文書上の構造が分かりにくくなります。

また、次のような要素まで一つにつながる可能性があります。

  • 条項見出し
  • 条項本文
  • 箇条書き
  • 注記
  • Figureタイトル
  • Tableタイトル
  • 次の条項番号

つまり、分割された文章は結合したい一方で、本来分かれている要素は残す必要があります。

文章をつなげる処理よりも、「どこはつなげてはいけないか」を判断する方が難しいこともありました。

4. ヘッダーやフッターが本文へ混ざる

規格PDFでは、各ページに同じヘッダーやフッターが表示されることがあります。

例えば、次のような情報です。

INTERNATIONAL STANDARD
ISO 12345:2026
© ISO 2026
15

人間がPDFを読むときは、これらを本文とは認識しません。

しかし、文字抽出処理から見ると、ページ内にある通常の文字列です。

そのため、何も処理しなければ、ページが変わるたびに同じ情報が本文へ混ざります。

繰り返し出現する文字列や、ページ上部・下部の位置情報などを使って、本文ではない可能性が高い文字を除外する必要がありました。

5. 規格ごとに構造が少し違う

国際規格には一定の構成がありますが、PDFの作り方は完全に同じではありません。

例えば、次のような違いがあります。

  • 文字サイズ
  • インデント
  • 段組み
  • Annexの表記
  • FigureやTableの配置
  • ページ番号の位置
  • OCRの有無
  • テキストレイヤーの状態
  • 行や単語の分割単位

一つのPDFで意図した結果になっても、別のPDFでは誤抽出が発生することがあります。

そのため、特定の一冊だけに合わせるのではなく、複数の条件を組み合わせて、できるだけ保守的に判定するようにしました。

ただし、すべての規格PDFに完全対応できるわけではありません。

文書ごとの違いを吸収することは、現在も継続している課題です。

Figureの中の文字まで本文として抽出される

PDFから文字を取得すると、本文だけでなく、図の内部に配置されている文字も抽出されます。

例えば、図の中に次のようなラベルがあるとします。

Input
Sensor
Control unit
Output
Power supply

これらも通常の文字列として取得されるため、そのままでは本文へ混ざります。

一方で、次のようなFigure番号とタイトルは残したい情報です。

Figure 3 — Example of system configuration

私が必要としていたのは、次のような処理でした。

図内部の文字             → 除外する
Figure番号とタイトル     → 残す
図の前後にある通常本文   → 残す

図に関係する文字をすべて削除すると、Figure番号とタイトルまで消えてしまいます。

反対に、すべて残すと、図内部のラベルが本文へ大量に混ざります。

この処理も独立した課題になったため、別の記事で詳しくまとめます。

AnnexやBibliographyも独立して扱いたい

国際規格では、本文の後にAnnexやBibliographyが続くことがあります。

例えば、次のような構成です。

1 Scope
2 Normative references
3 Terms and definitions
4 Requirements
Annex A
Annex B
Bibliography

単純に数字から始まる行だけをClauseとして認識すると、AnnexやBibliographyを正しく扱えません。

そのため、通常の条項番号とは別に、次のような見出しも構造として認識する必要がありました。

Annex A
Annex ZA
Bibliography

Annexの中には、次のような下位項目が含まれる場合もあります。

A.1
A.2
A.2.1

通常本文とAnnex内の条項を、同じExcel上でどのように整理するかも検討が必要でした。

「PDFをExcelに変換するツール」ではない

このツールは、PDFの内容を完全に再現することを目的としていません。

表、数式、画像、複雑な段組みなどを、そのままExcelへ移すものでもありません。

目的は、国際規格の文章を、調査や比較に利用しやすい単位へ整理することです。

そのため、処理の中心は、単純なファイル変換ではなく、次のような文書の構造化です。

PDF上の文字情報
        ↓
不要な情報を除外
        ↓
Clauseと本文の関係を判定
        ↓
分割された本文を再構築
        ↓
ページ番号を付与
        ↓
Excelへ出力

PDFをExcelへ変換すること自体が目的ではありません。

PDFから、調査に必要な情報を取り出し、再利用できる形へ整えることが目的です。

ページ番号を残す理由

抽出した文章だけをExcelへ出力することもできます。

それでもPage列を設けたのは、後から原文へ戻れるようにするためです。

自動抽出では、次のような誤りが発生する可能性があります。

  • 条項番号の誤認識
  • 本文の欠落
  • 不自然な文章結合
  • ヘッダーやフッターの混入
  • Figure内テキストの混入
  • ページをまたぐ文章の分断

そのため、Excel上の文章だけを最終的な根拠にはできません。

Page列があれば、確認したい箇所をPDF原文ですぐに見直せます。

自動化によって原文確認を不要にするのではなく、原文確認をしやすくすることを重視しました。

実際に作って分かったこと

最初は、PDFから文字を取り出せば、すぐにExcelへ整理できると思っていました。

実際には、文字を取り出すことよりも、次の判断の方が難しい作業でした。

  • 何を本文とするか
  • 何を削除するか
  • どこからどこまでを一つの条項とするか
  • どの改行を残すか
  • どの行を結合するか
  • FigureやTableをどこまで残すか
  • どの情報を証跡として残すか

これは単なるPDF変換というより、文書構造をどのように解釈するかという問題でした。

PDF上では同じように見える文章でも、内部のデータ構造が異なる場合があります。

人間にとって自然な読み順と、PDFから取得できる文字列の順番が一致するとも限りません。

見た目として読める文書を、機械が扱える形へ変えるには、文字認識とは別の処理が必要でした。

保守的に処理する

このツールでは、判断が難しい場合に、積極的に文章を加工しすぎない方針を取っています。

例えば、二つの行が同じ段落かどうか判断できない場合、無理に結合すると、異なる文章を一つにしてしまう可能性があります。

不要な文字列が少し残る場合は、後から確認して修正できます。

しかし、本来別々だった文章を誤って結合すると、原文との対応関係が分かりにくくなります。

そのため、

自動処理で完全な文章を作ることよりも、原文へ戻れる状態を保つ

ことを優先しました。

完全自動化ではなく、確認作業を支援するためのツールという位置づけです。

私しか得しないけれど、私には役立つ

このツールが必要な人は、それほど多くないと思います。

国際規格PDFから条項番号と本文を取得し、ページ番号付きでExcelへ整理したい人は、かなり限られています。

ただ、私の作業では何度も発生します。

一回の作業時間を少し短縮するだけでも、繰り返し使えば大きな差になります。

また、毎回同じ形式でExcelへ整理できれば、案件ごとの結果も比較しやすくなります。

「多くの人に使われるか」ではなく、

自分が繰り返し困っていることを、再利用できる処理に変える

というのが、今回の個人開発の目的でした。

今後改善したいこと

現在も、すべてのPDFを完全に処理できるわけではありません。

今後は、次のような改善を考えています。

  • 文書ごとに異なるOCR結果への対応拡張
  • 段組みPDFへの対応
  • 英文段落の結合精度向上
  • 箇条書き構造の復元
  • Annex構造の判定改善
  • TableタイトルとFigureタイトルの判定改善
  • 文書ごとの判定設定
  • 抽出結果の確認画面
  • 誤抽出箇所を修正しやすい仕組み
  • テスト対象となる文書パターンの追加

すべてを自動で正しく処理することは簡単ではありません。

そのため、対象文書を増やしながら、誤認識しやすいパターンを一つずつ確認しています。

このツールから派生した二つの課題

このツールを作る過程では、文字を抽出するだけでは解決できない問題がいくつもありました。

特に大きかったのは、次の2点です。

  • OCRで取得した文字列を、Clauseごとの読める文章へ戻すこと
  • 図内部の文字を除外し、Figure番号とタイトルだけを残すこと

どちらもツール全体の一機能ですが、それぞれ独立した処理が必要になりました。

具体的な判定方法や、実装時に困った点については、別の記事で詳しくまとめます。

まとめ

今回作ったのは、国際規格PDFから次の情報をExcelへ抽出する、自分専用のツールです。

Clause | Text | Page

広く使われるサービスではありません。

しかし、自分の実務で何度も発生する作業を減らすという意味では、十分に価値がありました。

PDFから文字を取得するだけでは、調査に使えるデータにはなりません。

不要な情報を除外し、条項番号と本文の関係を判定し、分割された文章を再構築し、原文へ戻るためのページ番号を残す必要があります。

誰が使うのかと聞かれたら、今のところは私です。

それでも、自分が繰り返し必要としているなら、作る理由としては十分なのだと思います。

運営サイト

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

きのとリサーチ

1
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
1
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?