PDFから取り出したテキストとHTMLを照合する方法|UNIX Cafe

当サイトでは、コンテンツの一部に広告を掲載しています。
PDFから取り出したテキストとHTMLを照合する方法|UNIX Cafe

UNIX Cafe | 第85回

目次

HTMLからテキストを抜き出して、内容を確認する

PDFからテキストを取り出し、
空白や日付表記を整えた。

HTMLページも編集し終わった。

でも、最後にこう思うことはないでしょうか。

このPDFとHTML、本当に同じ内容だろうか?

目で見比べる方法もありますが、
文章が長くなるほど、見落としは起きやすくなります。

この記事では、
HTMLから文章だけを抜き出し、
整えたテキストをターミナルで照合する方法
を紹介します。

はじめに|このページでやること

この記事で行う工程は、次の3つです。

  1. HTMLからテキストを抜き出す
  2. PDF由来のテキストと条件をそろえる
  3. 差分を確認する

大切なのは、

  • 見た目は比べない
  • 文章の中身だけを比べる

という考え方です。

HTMLから「本文だけ」を抜き出す

なぜHTMLをそのまま使わないのか

HTMLには、文章以外にも、

  • ヘッダ
  • メニュー
  • フッター
  • 画像や装飾

が含まれています。

照合に必要なのは、人が読む文章だけです。

タグを取り除き、本文をテキスト化する

今回は、HTMLから本文部分を抜き出したあと、すべてのタグを削除します。

HTMLエンティティ(  など)が含まれている場合は、
空白に置き換えます。

sed -e 's/<[^>]*>//g' body.html \
| sed -e 's/&emsp;/ /g' -e 's/ / /g' \
> html_body.txt

この処理で、

  • HTMLタグをすべて削除
  • &emsp; や特殊空白を通常の空白に変換

本文テキストだけのファイルが作られます。

PDF側と「同じ条件」にそろえる


なぜ空白をそろえるのか

PDFとHTMLでは、

  • 改行の位置
  • 空白の入り方

が異なります。

このまま比較すると、
内容とは関係のない差分が大量に出てしまいます。

空白をすべて取り除く(照合用)

意味に関係しない空白をすべて削除し、
「文字の並び」だけを比べられる状態にします。

sed 's/[[:space:]]//g' html_body.txt  > html_cmp.txt
sed 's/[[:space:]]//g' pdf_body.txt > pdf_cmp.txt

これで、

  • HTML由来テキスト
  • PDF由来テキスト

が、同じ条件になりました。

diffで内容を照合する

基本の照合方法

diff -u html_cmp.txt pdf_cmp.txt

結果の読み方

  • 何も表示されない → 内容は完全に一致
  • 差分が表示される → 確認が必要な場所がある

diffは、正解・不正解を決める道具ではありません。

「違いがある場所」を教えてくれるだけです。

照合結果をファイルに出力する

diffで出力された原稿は、改行の位置が違っていたり、行数が多かったりと、
モニターだけでは比較しにくい場合があります。

そういう時は、diffの結果をファイルに保存して、viなどのエディターで編集しましょう。

diff -u html_cmp.txt pdf_cmp.txt > edit.txt

こうすると、diffの結果が、edit.txtというファイルに保存されます。

vi edit.txt

そのファイルを vi で開くと編集可能な状態になり、成形すると文章が比較しやすくなります。

diff結果の正しい読み方

diffの表示には、次の記号が使われます。

  • - :HTML側にあった文字
  • + :PDF側にあった文字

これは、

  • 消すべき
  • 正しい

という意味ではありません。

「左右で違っている」という記号です。

今回の照合で分かったこと

実際にdiffを取ると、差分は大きく3種類に分かれました。

本文ではない差分

PDFの先頭に、

  • 店舗名
  • メニューに相当する文字

が含まれていました。

これは本文ではないため、
無視して問題ありません。

見た目だけが違う差分

  • 改行位置の違い
  • 行の分かれ方の違い

内容は同じなので、
照合としては一致と判断できます。

本当に確認すべき差分

PDFにはあるが、HTMLにはない文章がありました。

  • 野菜の下ごしらえが完了しました
  • もらったスイーツのおみやげ

ここが、
人が判断すべきポイントです。

HTMLに追記するのか、
PDF側の補足情報として扱うのか。

この判断は、人が行います。

この方法が向いている場面

この照合方法は、次のような作業に向いています。

  • PDF資料をHTML化するとき
  • 公開前の最終チェック

「見落とさない」ための工程として、とても安心感があります。

まとめ|照合は安心のための工程

  • HTMLから必要な文章だけを抜き出す
  • PDF由来テキストと条件をそろえる
  • diffで事実だけを確認する

ターミナルは、
間違いを指摘する道具ではなく、確認を手伝ってくれる道具です。

おわりに

目で見比べる作業は、
どうしても疲れます。

ターミナルを使った照合は、
人の代わりに「同じかどうか」を見てくれます。

人は、判断と修正に集中すればいい。

それが、この方法のいちばんの価値です ☕

さらに学びたいあなたへ

📘 用途ごとに選ぶ Linux のおすすめ本

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe 編集部

UNIX Cafe は、むずかしい言葉をできるだけ使わず、物語を読むような気持ちで気軽に学べる場所です。
プログラミングは、アイデアをコンピューターに伝えるための「ことば」。
簡単な単語と文法を覚えることで、誰でもターミナルから便利なコマンドを使えるようになります。
コーヒーを片手に立ち寄るような気持ちで、やさしいプログラミングの世界を、
そっとのぞいてみてください。

目次