iSomor
ブログに戻る

PDFからコピーした文字が、どうしていつも乱れてしまうのか?

6 分で読了Freed

PDFの中で役立ちそうな箇所を見つけ、メモに入れたり、同僚に共有したり、次に質問する材料にしたりする。選択して、コピーして、貼り付けるだけなら、数秒で終わるはずです。

ところが貼り付けてみると、一文が何行にも分かれ、英単語の途中で切れ、本文にページ番号まで混ざっています。少し抜き出したかっただけなのに、何度もバックスペースを押すことになります。

文字の順番が正しく、行ごとに分かれているだけなら、まず段落内の単独の改行を結合し、段落間の空行は残してください。 見出し、リスト、行末のハイフンは別に確認します。左右2段組みの文が入り交じっている場合は、改行を削除する前にコピーの順番を直します。

ページ上の1行が、文字データの1段落とは限らない

PDFのページでは、文章が右端に達すると折り返されます。しかし、その改行は紙面や段幅による見た目の区切りにすぎず、筆者が新しい段落を始めたことを意味するとは限りません。

コピーするとき、リーダーはページ上の文字をテキストの流れに組み直しますが、この2種類の改行をいつも区別できるわけではありません。pdfminer.six の文字抽出に関する説明では、文字の位置や距離から行やテキストブロックをまとめる方法が紹介されています。ページ上ではつながって見える内容も、コピーすると分割されることがあります。

ここでは、いくつかの簡単な例を見ながら対処方法を考えます。

文をつなぎ、段落は残す

まず、比較的安全に整えられるケースを見てみます。各段落が2行に分かれているものの、段落の間には空行が残っています。

整理前のテキスト:

We copied a paragraph
from the report into our notes.

The original page remains available
for checking names and numbers.

上の文字を iSomor 文字整形ツール に入れ、次の3手順で処理できます。

  1. 文字を貼り付ける。 まず短い範囲を「元の内容」に入れ、段落間の空行もそのまま残します。
  2. オプションを選んで整える。 「単独の改行を結合」と「スペースを整える」をオンにします。「行末で分割された単語を結合」は、最初はオフのまま「文字を整える」をクリックします。
  3. 確認してから使う。 両方の内容を見比べ、段落や単語が誤ってつながっていないことを確認してから、文字をコピーするか TXT をダウンロードします。

ツールの出力:

We copied a paragraph from the report into our notes.

The original page remains available for checking names and numbers.

文の途中の改行は結合され、2つの段落の間の区切りは残っています。英単語の間のスペースも維持されるため、paragraph と from がつながることもありません。

この例では、段落内が単独の改行、段落間が空行です。コピー後に段落間も1つの改行しか残っていなければ、原文を確認して空行を補ってから整理します。

行末のハイフンを、すべて削除してはいけない

英語の文書では、レイアウトの都合で単語が行末で分割されることがあります。たとえば次のような場合です。

The trans-
lation is ready for review.

ここで trans- と次の行の lation は、本来1つの単語です。「行末で分割された単語を結合」を有効にすると、出力は次のようになります。

The translation is ready for review.

ただし、見た目が似ていても処理が同じとは限りません。もともと cross-validation と書かれていた文を見てみます。

We used cross-
validation to compare the models.

同じオプションを有効にすると、実際の出力は次のようになります。

We used crossvalidation to compare the models.

改行は消えましたが、意味のあるハイフンまで削除されています。ここでは cross-validation を残す必要があります。

したがって、最初は単語の結合をオフにしておく方が安全です。レイアウトによって分割された単語だと確認してから使います。複合語や型番が含まれている場合は、通常の改行だけを先に整理し、ハイフンは1箇所ずつ確認すると安心です。

見出しとリストには、少し余白が必要

1行だけで表示されているものが、すべて次の行とつながるとは限りません。

たとえば次の文章では、最初の行が見出しで、その後に説明とリストが続きます。

Preparation
Keep the original PDF first.

- Check names
- Check dates
- Check amounts

「単独の改行を結合」と「スペースを整える」をオンにすると、ツールの出力は次のようになります。

PreparationKeep the original PDF first.

- Check names
- Check dates
- Check amounts

- のマーカーが付いたリストは残りますが、見出しと本文は結合されています。「Preparation」が普通の文字になると、文字サイズや太字の情報がないため、1つの改行だけでは見出しだと分かりにくくなります。

このような資料では、見出しの後に空行を入れてから整理します。同じ設定で再度処理すると、次のようになります。

Preparation

Keep the original PDF first.

- Check names
- Check dates
- Check amounts

空行を補うことで、見出しと本文が分かれます。入れ子になった複雑なリスト、表、数式などは、通常の段落とまとめて結合せず、個別に残すことをおすすめします。

順番がすでに間違っているなら、改行整理を急がない

左の段の文の後に右の段の内容が続いていたり、文の途中にページ番号が入っていたりする場合、改行を削除しても読む順番は直りません。まずコピーの段階に戻って対処します。

  • 2段組みが入り交じっている: 1段ずつ、または小さな範囲ごとに選択してコピーし、貼り付けた順番を確認します。それでも混ざる場合は、別の抽出方法を試します。
  • ヘッダー、フッター、ページ番号が混ざっている: ページと照らし合わせ、混入していると確認できた部分だけを削除します。数字だけの行を一括削除しないでください。本文の番号やデータかもしれません。
  • 表が文字の並びになっている: 表頭、単位、行と列の対応を確認してから、プレーンテキストのメモに入れるか判断します。空白が減っても、表が復元されたとは限りません。
  • コピー後に文字化けする: 文字レイヤーやフォントのエンコーディングを別に確認します。文字整形では、これらの文字を直せません。
  • スキャン画像に選択できる文字がない: まず OCR が必要です。OCR の文字レイヤーにも認識ミスがあり得るため、「コピーできる」ことを「正確な文字」とみなさないでください。pypdf のドキュメントでは、文字情報を持つ PDF、画像だけのスキャン PDF、OCR レイヤーを持つ PDF を区別しています。これらでは文字の出所が異なります。

コピー結果を使う前に、ここを確認する

短い範囲を整理したら、変化しやすい箇所を重点的に確認します。

  • 各段落の始まりと終わりが正しくつながっているか。
  • 英単語がくっついていないか、意味のあるハイフンが残っているか。
  • 見出しとリストが分かれたままか。
  • 数字、単位、マイナス記号、数式記号が欠けたりずれたりしていないか。

中国語の句読点を含む場合は、句読点の周りも一度見ておくと安心です。私たちのテストでは、読点の後の改行を結合したときに余分なスペースが残り、手動で削除する必要がありました。似た資料に適用する前に、まずこの短い範囲で方法が合っているか確認してください。

この文章を引用する場合は、資料名、ページ番号、またはリンクを残し、出典と一致していることを確認します。

整えるのは、本来の作業に戻るため

文字整形の目的は、繰り返し現れる改行や余分なスペースを少し減らすことであり、すべてを1つの段落に押し込むことではありません。本文はつながり、見出しとリストは分かれたまま。その状態なら、整えた文字を次の作業に使いやすくなります。

iSomor は元の内容と結果を並べて表示し、どこが変わったかを確認できるようにしています。確認が終わったら、メモ、引用、議論に戻り、最初に使いたかった文章に集中できます。