web-dev-qa-db-ja.com

PDFからテキストを抽出する方法は?

PDFからテキストと画像を抽出するために、誰でもライブラリ/ APIを推奨できますか?ドキュメントの既知の領域に含まれるテキストを取得できるようにする必要があるため、APIはページ上の各要素の位置情報を提供する必要があります。

そのデータをxmlまたはjson形式で出力したいと思います。現在、PdfTextStreamを見ていますが、これはかなり良いようですが、他の人々の経験や提案を聞きたいと思っています。

プログラムからpdfからテキストを抽出するための代替手段(市販のものまたは無料のもの)はありますか?

132
Budda007

インポートする必要があったデータのテーブルを含む400ページのpdfファイルが提供されました-幸いなことに画像はありません。 Ghostscript 私のために働いた:

gswin64c -sDEVICE=txtwrite -o output.txt input.pdf

出力ファイルはヘッダーなどを含むページに分割されましたが、その後、空白行などを取り除き、30,000件すべてのレコードを取り込むアプリを書くのは簡単でした。この場合、-dSIMPLE-dCOMPLEXは違いがありません。

90
user2176753

今日から私はそれを知っています:PDFからのテキスト抽出のための最良のものTET、テキスト抽出ツールキット 。 TETはPDFlib.com製品ファミリーの一部です。

PDFlib.comはThomas Merzの会社です。彼の名前がわからない場合:Thomas Merzは「PostScript and PDF Bible」の著者です。

TETの最初の化身は a library です。ページ上のすべての要素に関する位置情報など、Budda006が望むすべてのことをおそらく実行できます。ああ、それは画像を抽出することもできます。断片化された画像を再結合します。

pdflib.comは、このテクノロジーの別の形、 Acrobat のTETプラグインも提供しています。 3番目の化身は PDFlib TET iFilter です。これは、ユーザーデスクトップ用のスタンドアロンツールです。どちらも(ビールのように)プライベートで非営利的な目的で使用できます。

そしてそれは本当に強力です。 Adobe独自のテキスト抽出よりもはるかに優れています。他のツール(Adobeのツールを含む)がゴミのみを吐き出すテキストを抽出しました。

デスクトップスタンドアロンツールをテストしましたが、Webページで彼らが言うことは本当です。非常に優れたコマンドラインがあります。 「問題のある」PDFテストファイルの一部は、ツールが完全に満足して処理しました。

これは今後、洗練された挑戦的なPDFテキスト抽出要件すべてに対する私の推奨事項になります。

TETは単純に素晴らしいです。テーブルを検出します。テーブル内で、複数の列にまたがるセルを識別します。テーブルの行と各テーブルセルの内容を個別に識別します。ハイフネーションをうまく処理します。ハイフンを削除し、完全な単語を復元します。非ASCII言語(CJK、アラビア語、ヘブライ語を含む)をサポートしています。合字に遭遇すると、元の文字を復元します...

試してみる。

33
Kurt Pfeifle

効率的なコマンドラインツール、オープンソース、無料で、LinuxとWindowsの両方で利用可能:単にpdftotextという名前。このツールはxpdfライブラリの一部です。

http://en.wikipedia.org/wiki/Pdftotext

26
131

Pythonの場合、 PDFMinerpyPDF2 があります。これらの詳細については、 PDFをテキストに変換するPythonモジュール を参照してください。

20
Jonathan

PdfTextStream (あなたが見ていると言った)は、シングルスレッドアプリケーションではfreeになりました。私の意見では、その品質は他のライブラリよりもはるかに優れています(特にファンキーな埋め込みフォントなど)。

または、オープンソースの Apache PDFBox をご覧ください。

8
Renaud

これが私の提案です。 PDFからテキストを抽出する場合は、pdfファイルをGoogleドキュメントにインポートし、.html、.odf、.rtf、.txtなどのより使いやすい形式にエクスポートできます。これらはすべて、Drive APIを使用して。無料*で堅牢です。を見てみましょう:

https://developers.google.com/drive/v2/reference/files/inserthttps://developers.google.com/drive/v2/reference/files/get

これはREST APIであるため、すべてのプログラミング言語と互換性があります。上記のリンクには、Java、.NET、Python、PHP、Rubyなどの多くの言語の実用例があります。

役に立てば幸いです。

8
oabarca

ここでのコメントの1つは、Windowsでgsを使用しました。次の構文で、Linux/OSXでもある程度成功しました。

gs \
 -q \
 -dNODISPLAY \
 -dSAFER \
 -dDELAYBIND \
 -dWRITESYSTEMDICT \
 -dSIMPLE \
 -f ps2ascii.ps \
 "${input}" \
 -dQUIET \
 -c quit

dSIMPLEの代わりにdCOMPLEXを使用しました。後者は1行に1文字を出力するためです。

6
kvz

Docotic.Pdfライブラリ を使用して PDFからテキストを抽出 ファイルをプレーンテキストまたは各チャンクの座標を持つテキストチャンクのコレクションとして使用できます。

Docotic.Pdfは PDFから画像を抽出する にも使用できます。

免責事項:私はビットミラクルで働いています。

6
Bobrovsky

質問は具体的にはPDFからXMLからデータを取得するための代替ツールに関するものであるため、商用ツール "ByteScout PDF Extractor SDK" これを正確に行うことができます:位置データ(x、y)およびフォント情報とともにXMLとしてPDFからテキストを抽出します。

ソースPDFのテキスト:

Products | Units | Price 

出力XML:

 <row>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="212" y="126" width="47" height="11">Products</text> 
  </column>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="428" y="126" width="27" height="11">Units</text> 
  </column>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="503" y="126" width="26" height="11">Price</text> 
  </column>
</row>

追伸:さらに、テキストを表ベースの構造に分割します。

開示:ByteScoutで働いています

4
Eugene

私はこのトピックがかなり古いことを知っていますが、この必要性はまだ生きています。私は多くのドキュメント、フォーラム、スクリプトを読み、圧縮されたpdfと非圧縮のpdfをサポートする新しい高度なドキュメントを作成します。

https://Gist.github.com/smalot/6183152

場合によっては、セキュリティ上の理由からコマンドラインが禁止されています。したがって、ネイティブPHPクラスは多くのニーズに対応できます。

それがみんなに役立つことを願って

3
Sebastien Malot

(「シンプルな」ツールのリスト内で)私が現在考えることができる最良のものは、 Ghostscript (現在のバージョンはv.8.71)とPostScriptユーティリティプログラムps2ascii.psです。 Ghostscriptは、libサブディレクトリに同梱されています。これを試してください(Windows):

gswin32c.exe ^
   -q ^
   -sFONTPATH=c:/windows/fonts ^
   -dNODISPLAY ^
   -dSAFER ^
   -dDELAYBIND ^
   -dWRITESYSTEMDICT ^
   -dCOMPLEX ^
   -f ps2ascii.ps ^
   -dFirstPage=3 ^
   -dLastPage=7 ^
   input.pdf ^
   -dQUIET ^
   -c quit

このコマンドは、input.pdfの3-7ページを処理します。 ps2ascii.psファイル自体のコメントを読んで、「奇妙な」数字と追加情報の意味を確認してください(これらは、文字列、位置、幅、色、写真、長方形、フォント、改ページを示します。) 。)。 「単純な」テキスト出力を取得するには、-dCOMPLEX部分を-dSIMPLEに置き換えます。

2
Kurt Pfeifle

画像抽出の場合、pdfimagesはLinuxまたはWindows(win32)用の無料のコマンドラインツールです。

pdfimages:ポータブルドキュメント形式から画像を抽出して保存(PDF)ファイル

2
Sun

Apache pdfboxにはこの機能があります-テキスト部分は以下で説明されています:

http://pdfbox.Apache.org/apidocs/org/Apache/pdfbox/util/PDFTextStripper.html

実装例については https://github.com/WolfgangFahl/pdfindexer を参照してください

テストケースTestPdfIndexer.testExtractingは、それがどのように機能するかを示します

2
Wolfgang Fahl

QuickPDFは、リーズナブルな価格で必要なことを行うべき合理的なライブラリのようです。

http://www.quickpdflibrary.com/ -30日間のトライアルがあります。

1
Andrew Cash

私のMacintoshシステムでは、「Adobe Reader」がかなり良い仕事をしていることがわかりました。 「Adobe Reader.app」を指すエイリアスをデスクトップに作成しました。エイリアスにpdfファイルをドロップするだけで、Adobe Readerでアクティブなドキュメントになり、[ファイル]メニューから、 「テキストとして保存...」を選択し、名前と保存場所を指定して、「保存」をクリックします。

0
Dick Guertin