PDFからテキストを抽出する方法は?[閉まっている]


152

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

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

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



1
本当にシンプルなもの(位置情報なし)が必要な場合は、このperl正規表現で十分です/^\s*\[?\((.*?)\)\]?\s*T[Jj]/mg。これは、PDF内のすべての通常のテキストを示すTj / TJ演算子を探すだけです。
Alex R

1
TomRoush PdfBoxライブラリを使用してください。これはAndroidでうまく機能します
FaisalAhmed 2017年

回答:


113

インポートしなければならないデータの表を含む400ページのpdfファイルが与えられました-幸いにも画像はありませんでした。ゴーストスクリプトは私のために働きました:

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

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


37
Linuxおよびcygwinでは、コマンドはではgsなくですgswin64c。完璧に動作します。特許を取得したがらくたはありません。うまくいきます。
Jannes

4
うん、素晴らしい!これで、pdfファイルで「grep」を使用できます。私は読むよりもうまくgrepできるので、それは勝利です!(:-)賛成票。
デビッドエルソン、2015

1
これで私が抱えていた唯一の問題は、「古い」フォントが埋め込まれたPDFで使用することでした。ローカルで生成されたpdfに対しては完全に機能しますが、あいまいなソースではより困難です。それ以外の場合は、優れたスクリプトレット。
Jon M

何をし-sDEVICE=txtwriteますか?Ghostscriptの使用方法を
Ooker

テキストファイルとして保存する代わりにstdout出力の場合は、を使用しますgswin64c -sDEVICE=txtwrite -o- input.pdf。ソース(私が少し変更):gist.github.com/drmohundro/560d72ed06baaf16f191ee8be34526ac
LuH

33

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

PDFlib.comはThomas Merzの会社です。彼の名前がわからない場合は、トーマス・メルツが「PostScript and PDF Bible」の著者です。

TETの最初の化身はライブラリです。そのページのすべての要素に関する位置情報を含め、Budda006が望んだすべてを実行できるはずです。ああ、それはまた、画像を抽出することができます。断片化された画像を再結合します。

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

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

私はデスクトップスタンドアロンツールをテストしたところ、彼らのWebページでの発言が真実でした。コマンドラインは非常に優れています。ツールが問題なく処理した「問題のある」PDFテストファイルの一部。

これからは、洗練された、困難なPDFテキスト抽出要件すべてに対する私の推奨事項になります。

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

試してみる。


32
試用版はありません。440ドルは「試してみる」には少し高額です。
RokStrniša2013


このサービスはAPIを通じて利用できますか?
バート、2016年

1
私はそれをテストしました、それは列を認識しません。英語のタブロイド表紙をスキャンしました。テキストは紙の上で3列に分割されましたが、このプラグインは文章を混合して、意味不明に見せました。無料のGhostscriptもまったく同じ出力でした。
NoWhereToBeSeen 2017

1
@RedHotScalability:ちなみに、TET 正しいパラメーターで使用された場合、列を認識します。しかし、私はそれを、ドキュメントを読んで方法を見つけるための野心的なJSスクリプト作成者への練習問題として残します...
Kurt Pfeifle

29

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

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


4
余談ですが、-layoutスイッチを使用してテーブルを保持してください。
セバスチャン2016


12

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

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

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

お役に立てば幸いです。


2
私はそのオプションを使用したので、お勧めしません。Googleのpdfテキスト抽出は、多くの代替案(特に英語以外の場合)ほど良くなく、また非常に遅いです。
ビョルンLindqvist

10

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

あるいは、オープンソースのApache PDFBoxをご覧ください


PdfTextStreamはAndroidではサポートされていません。Androidで利用できるこのような優れたライブラリはありますか?
FaisalAhmed 2017

@FaisalAhmed PDFBoxはどうですか?
Renaud

はいPdfBoxもandroidでサポートされていません.... PdfTextStreamとPdfBoxの両方で、androidでサポートされていないawtパーツが使用されています
FaisalAhmed

私はこのライブラリを使用していますandroid github.com/TomRoush/PdfBox-Android
FaisalAhmed


6

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

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

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


5

問題は、PDFからXMLとしてデータを取得するための代替ツールに関するものであるため、これを正確に実行できる市販のツール「ByteScout PDF Extractor SDK」ご覧ください。位置決めデータ(x、y)とフォント情報:

ソース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>

PS:さらに、テキストをテーブルベースの構造に分割します。

開示:私はByteScoutで働いています


3

私が(「シンプルな」ツールのリスト内で)考えている中で最も良いのは、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

このコマンドは、ページ3〜7を処理しますinput.pdfps2ascii.psファイル自体のコメントを読んで、「奇妙な」番号と追加情報の意味を確認しますこれらは文字列、位置、幅、色、画像、長方形、フォント、改ページを示します...)。「単純な」テキスト出力を取得するには、-dCOMPLEXパーツをに置き換えます-dSIMPLE


2
ご想像のとおり、これはASCIIテストのみを出力します。無料ではありますが、英語以外の言語を使用する予定のソフトウェアにはあまり適していません。
userx

3
@userx:ご想像のとおり、これはフリーソフトウェアです。したがって、ソースコードを利用できます。非ASCIIのサポートを拡張する可能性があります...
カートPfeifle

@userx:本日、pdflib.comのテキスト抽出ツールキット「TET」を発見しました。私の他の答えを見てください。
Kurt Pfeifle 2010

Ghostscript 9.07のps2asciiは私のOpenBSDシステムで美しく動作しました。526ページのPDFをプレーンテキストに変換しました。これで、メモのテキストを簡単にgrepして抽出できます。簡単なコマンドを使用しましたps2ascii book.pdf notes.txt。ドキュメントが主にASCIIである場合は、運がいいです。
Clint Pachl

3

このトピックはかなり古いですが、このニーズはまだ生きています。私は多くのドキュメント、フォーラム、スクリプトを読んで、圧縮および非圧縮PDFをサポートする新しい高度なドキュメントを作成します。

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

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

それが誰にも役立つことを願っています





0

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


5
OPは、PDFからプログラムでテキスト抽出するソリューションを探しました。あなたの答えは、代わりに手動のルーチンを提案します。
mkl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.