web-dev-qa-db-ja.com

文字化けからテキストを抽出するPDF

貴重なテキスト情報を含むPDFファイルがあります。

問題は、テキストを抽出できないことです。取得するのは、文字化けした記号の束だけです。 PDFリーダーからテキストファイルにテキストをコピーして貼り付けると、同じことが起こります。ファイル->テキストとして保存AcrobatReaderで失敗します。

手に入るすべてのツールを使用しましたが、結果は同じです。これはフォントの埋め込みと関係があると思いますが、正確にはわかりません。

私の質問:

  • 原因は何ですかこの奇妙なテキストの文字化け
  • テキストコンテンツを抽出する方法 PDF(プログラムで、ツールを使用して、ビットを直接操作するなど)から)?
  • PDFをコピー時に文字化けしないように修正するにはどうすればよいですか?
9
SNAG

私は多くの人に助けを求めましたが、OCRがこの問題の唯一の解決策です

11
SNAG

一部のPDFファイルは、テキストを正常に抽出するために重要な特別な情報なしで作成されます。Adobeツールを使用しても、基本的に、このようなファイルにはグリフから文字へのマッピング情報が含まれていません。

このようなファイルは(文字の形状が適切に定義されているため)問題なく表示および印刷されますが、それらのテキストは適切にコピー/抽出できません(使用されているグリフ/形状の意味に関する情報がないため)。

たとえば、「最小ファイルサイズ」プリセットが使用されている場合、Distillerはそのようなファイルを生成します。

OCR以外に、そのようなファイルからテキストを取得する方法は他にありません。


元の答えを補足する

元の回答では、「使用されているグリフ/形状の意味に関する情報」について言及されていました。この情報は、/ToUnicodeテーブルと呼ばれるPDF構造体に含まれている必要があります。このようなテーブルは、サブセットとして埋め込まれ、非標準(Custom)エンコーディング。

テキストコンテンツの抽出可能性をすばやく評価するために、pdffontsコマンドラインユーティリティを使用できます。これは、PDFで使用される各フォントに関する一連の項目を表形式で印刷します。 /ToUnicodeテーブルの存在は、uniという見出しの列で示されます。

いくつかの出力例:

$ kp@mbp:git.PDF101.angea> pdffonts handcoded/textextract/textextract-good.pdf

    name                     type        encoding   emb sub uni object ID
    ------------------------ ----------- ---------- --- --- --- ---------
    BAAAAA+Helvetica         TrueType    WinAnsi    yes yes yes     12  0
    CAAAAA+Helvetica-Bold    TrueType    WinAnsi    yes yes yes     13  0


$ kp@mbp:git.PDF101.angea> pdffonts handcoded/textextract/textextract-bad1.pdf

    name                     type        encoding   emb sub uni object ID
    ------------------------ ----------- ---------- --- --- --- ---------
    BAAAAA+Helvetica         TrueType    WinAnsi    yes yes no      12  0
    CAAAAA+Helvetica-Bold    TrueType    WinAnsi    yes yes no      13  0


$ kp@mbp:git.PDF101.angea> pdffonts handcoded/textextract/textextract-bad2.pdf

    name                     type        encoding   emb sub uni object ID
    ------------------------ ----------- ---------- --- --- --- ---------
    BAAAAA+Helvetica         TrueType    WinAnsi    yes yes yes     12  0
    CAAAAA+Helvetica-Bold    TrueType    WinAnsi    yes yes no      13  0

good.pdfを使用すると、両方のフォントに/ToUnicodeテーブルが付随しているため、両方のフォントのテキストコンテンツを正しく抽出できます。

bad1.pdfおよびbad2.pdfの場合、テキスト抽出は2つのフォントの一方のみで成功し、もう一方のフォントでは失敗します。これは、一方のフォントのみが/ToUnicodeテーブルを持っているためです。

私、 Kurt Pfeifle は、最近一連の手書きのPDFファイルPDFソースコード内の既存の、バグのある、操作された、または欠落している/ToUnicodeテーブルの影響を示すため。これらのPDFは広範囲にコメントされており、テキストエディタを使用して調査しました。上記のpdffontsの出力例は、これらの手作業でコーディングされたファイルを使用して作成されました。(さまざまな結果を示すPDFがさらにいくつかあります。興味のある読者は探求したいかもしれません...)

24
Bobrovsky

私も同じ問題を抱えていました。それをGoogleドライブにアップロードし、Googleドキュメントで開き、そこからテキストをコピーすることは私にとってはうまくいきました。

2
knutson