web-dev-qa-db-ja.com

PDFからテキストをコピーして貼り付けると、ゴミが発生します

私は修士論文-NLPシステムを書いています。私は1つのコンポーネントを持っています-抽出器。

PDFファイルからプレーンテキストを抽出しています。正しく抽出できないPDFファイルがいくつかあります。Extractor(PDFBoxライブラリ)は次のような文字列を返しますこの:

"┤xDn║if|d├gDF" Ti&cD╬lhdFÁhis〜n╗xdf" "d┤ffih"h"

または

「10a61a91a22a25a3a27a17a23a20a8a13a14a61a25a17」

この抽出の問題を引き起こす各ファイルをチェックしていましたが、これらのファイルのテキストもすべてPDFリーダー(Adobe ReaderおよびFoxItリーダー)からコピーアンドペーストできません。このリーダーでの表示が有効になっています、しかし、そのコンテンツを選択してクリップボードにコピーした後、同じ間違ったテキストが表示されます(上記のように-意味的に正しくない文字の文字列または数字と文字の文字列)。

誰かが私を助けることができますか?

12
Michal_R

Adobe Readerでテキストを正常に選択してコピーできる場合(PDFにはテキストオブジェクトが含まれていることを示します))、コピーしたテキストをメモ帳に貼り付けるには、ガベージ文字の束の場合、問題はおそらく、選択したテキストが使用するCMapに関連しています。

PDF仕様は、 テキストコンテンツおよび関連するテキストコンテンツの抽出 の表示に多くのオプションを提供します。CMapは、文字コードから文字セレクターへのマッピングを指定します。 PDF仕様は、いくつかの事前定義されたCMapの概要を示していますが、他のCMapを埋め込むこともできます。

私の推測では、このテキストのCMapが破損しているか、PDFBoxライブラリがこの特定のCMapをサポートしていないと思われます。別のSDKを試して、別の結果が得られるかどうかを確認することをお勧めします。

6
Rowan

このような場合、Acrobat(リーダー)ウィンドウからテキストを選択してコピーして貼り付けることができない場合は、それでも機能する可能性のある別のオプションがあります。

  • 'ファイル'メニューを開き、
  • select '名前を付けて保存...'
  • select 'テキスト(通常)(*。txt)'
  • ターゲットディレクトリを参照し、
  • テキストファイルに使用する名前を入力します。

ファイル内のすべてのページのすべてのテキストがあり、最初にコピーして貼り付けたい場所を見つける必要があります。直接コピーして貼り付けるほど快適ではない場合に限ります。しかし、それはより確実に機能します。

Linuxではacroreadでも機能します(ただし、ファイルメニューから「テキストとして保存...」を選択する必要があります)。

更新

pdffontsコマンドラインユーティリティを使用して、PDFで使用されているフォントのクイックショット分析を取得できます。

これは出力例であり、テキスト抽出の問題が発生する可能性が非常に高い場所を示しています。これらの手書きのPDFGitHub-Repositoryからのファイルの1つを使用しますPDFよくコメントされ、テキストエディタで簡単に開くことができるサンプルファイルを提供するために作成されました:

$ pdffonts  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

このテーブルの解釈方法

  • 上記のPDFファイルは、2つのサブセット化されたフォントを使用します(名前のBAAAAA+およびCAAAAA+プレフィックス、およびyessubエントリで示されます。列)、HelveticaおよびHelvtica-Bold
  • どちらのフォントもタイプTrueTypeです。
  • どちらのフォントもWinAnsiエンコーディングを使用します(フォントエンコーディングは、PDFソースコードで使用される文字識別子を描画する必要のあるグリフにマップします)。ただし、フォント/Helveticaの場合のみです。 yes-列のno/uniで示されるように、PDF(/ToUnicodeの場合はありません)内で使用可能な/Helvetica-Boldテーブル)。

/ToUnicodeテーブルは、文字識別子/コードから文字への逆マッピングを提供するために必要です。

特定のフォントの/ToUnicodeテーブルが欠落していることは、ほとんどの場合、このフォントを使用するテキスト文字列をPDFから抽出またはコピーして貼り付けることができないことを示しています。 /ToUnicodeテーブルある場合でも、このテーブルが破損している可能性があるため、テキスト抽出で問題が発生する可能性があります。または不完全-多くの実際のPDFファイルに見られるように、また上記のリンクされたGitHubリポジトリ内のいくつかのコンパニオンファイルによっても示されているように。)

5
Kurt Pfeifle

Chrome(内部PDFブラウザ)でGmailの添付ファイルとして開くと、コピーは通常の読み取り可能な文字をコピーします!

私がこの問題を抱えていたとき、それは私のために働きました 他の人にとっても 。 Chrome PDFビューアは GoogleドライブOCR を自動的に使用します...魔法のようです!

2

PDFで作成されたもの。一部のPDFにはエンコード情報が含まれておらず、描画するためのデータのみが含まれています。したがって、データを抽出する方法はありません。

1
mark stephens

これに対処する最善の方法は(Adobe Acrobatなどがあり、Readerがこれを実行できるかどうかわからない場合)、ドキュメントをJPEGとして保存することです。次に、すべての画像を1つのPDFとして再コンパイルし、OCR関数を使用してページ内のテキストを検索し、テキストをコピーして貼り付けることができます。

0
user6096423

コピーするテキストを選択します。 [選択オプション]を右クリックします。ダイアログボックスでファイル名を選択し、新しいファイルをリッチテキスト形式(RTF)として保存します。開くRTF)テキストを表示します。

0
Eapen