web-dev-qa-db-ja.com

PDF座標によるテキスト抽出

PDF Ghostscriptを使用して)の部分(座標を使用)からテキストを抽出したいと思います。

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

40
AMER

はい、Ghostscriptを使用すると、PDFからテキストをcan抽出できます。しかし、いや、それは仕事に最適なツールではありません。いいえ、「部分」(単一ページの一部)でそれを行うことはできません。できること:特定の範囲のページのテキストのみを抽出します。

最初: Ghostscript'stxtwrite出力デバイス(あまり良くない)

 gs \
   -dBATCH \
   -dNOPAUSE \
   -sDEVICE=txtwrite \
   -dFirstPage=3 \
   -dLastPage=5 \
   -sOutputFile=- \
   /path/to/your/pdf

これにより、ページ3〜5に含まれるすべてのテキストが標準出力に出力されます。テキストファイルに出力する場合は、-sOutputFile=textfilename.txtを使用します。


gs更新:

Ghostscriptの最近のバージョンでは、txtwriteデバイスの大幅な改善とバグ修正が行われています。詳細については、 最近のGhostscriptの変更ログtxtwriteを検索)を参照してください。


2番目:Ghostscriptの ps2ascii.ps PostScriptユーティリティ (より良い)

これには、最新バージョンのファイルps2ascii.psGhostscript Gitソースコードリポジトリ からダウンロードする必要があります。 PDF=をPostScriptに変換してから、PSファイルで次のコマンドを実行する必要があります。

gs \
  -q \
  -dNODISPLAY \
  -P- \
  -dSAFER \
  -dDELAYBIND \
  -dWRITESYSTEMDICT \
  -dSIMPLE \
   /path/to/ps2ascii.ps \
   input.ps \
  -c quit

-dSIMPLEパラメーターが定義されていない場合、各出力行には、使用されるフォントとフォントサイズに関する純粋なテキストコンテンツ以外の追加情報が含まれます。

そのパラメーターを-dCOMPLEXに置き換えると、使用されている色と画像に関する追加情報が得られます。

このユーティリティの詳細については、ps2ascii.ps内のコメントをお読みください。使用するのは快適ではありませんが、私にとってはほとんどの場合それが必要でした。

3番目: XPDF'spdftotext CLIユーティリティ(Ghostscriptよりも快適)

テキスト抽出を行うより快適な方法:pdftotextを使用します(Windows、Linux/Unix、またはMac OS Xで使用可能)。このユーティリティは、PopplerまたはXPDFに基づいています。これはあなたが試すことができるコマンドです:

 pdftotext \
   -f 13 \
   -l 17 \
   -layout \
   -opw supersecret \
   -upw secret \
   -eol unix \
   -nopgbrk \
   /path/to/your/pdf
   - |less

これにより、ページ範囲13(f最初のページ)から17(lastページ)、PDFファイル(ユーザーと所有者のパスワードsecretおよびsupersecret)、Unix EOL規則を使用しますが、PDFページの間にページ区切りを挿入せず、パイプスルーを少なくします...

pdftotext -hは、使用可能なすべてのコマンドラインオプションを表示します。

もちろん、両方のツールは、PDFのテキスト部分に対してのみ機能します(ある場合)。ああ、数式もうまく機能しません... ;-)


pdftotext更新:

Popplerのpdftotextの最近のバージョンには、OPが要求したように "PDFの一部(座標を使用)"ページを抽出するオプションがあります。パラメーターは次のとおりです。

  • -x <int>:作物領域の左上隅のx座標
  • -y <int>:作物領域の左上隅のy座標
  • -W <int>:トリミング領域の幅(ピクセル単位)(デフォルトは0)
  • -H <int>:ピクセル単位のトリミング領域の高さ(デフォルトは0)

-layoutパラメーターと共に使用する場合に最適です。


4番目:MuPDFのmutool drawコマンドもテキストを抽出できます

クロスプラットフォームのオープンソース MuPDF アプリケーション(Ghostscriptも開発している同じ会社が作成)には、コマンドラインツールmutoolがバンドルされています。このツールでPDFからテキストを抽出するには、次を使用します。

mutool draw -F txt the.pdf

抽出されたテキストを<stdout>に出力します。 -o filename.txtを使用して、ファイルに書き込みます。

5番目:PDFLibのテキスト抽出ツールキット(TET)(何よりも...しかしPayWareです)

[〜#〜] tet [〜#〜]pdflib からのテキスト抽出ツールキット=製品ファミリは、テキストコンテンツのxy座標をPDFファイル(およびその他))で見つけることができます。TETにはコマンドラインインターフェイスがあり、すべてのテキスト抽出ツールの中で最も強力ですm(リガチャーも処理できます...)彼らのウェブサイトからの引用:

Geometry
TETは、ページ上の位置、グリフの幅、テキストの方向など、テキストの正確なメトリックを提供します。ページ上の特定の領域を除外したり、テキスト抽出に含めることができます。ヘッダーとフッターまたはマージンを無視します。

私の経験では、想像できる最も単純なCLIインターフェースを備えていませんが、慣れると、約束されたとおりに動作します。


また、さらに多くのオプションがあります。

  1. podofotxtextract (CLIツール)PoDoFoプロジェクト(オープンソース)
  2. calibre (通常、eBookを処理するためのGUIプログラム、オープンソース)には、PDFからテキストを抽出できるコマンドラインオプションがあります。
  3. AbiWord (GUIワープロ、オープンソース)はPDFをインポートし、ファイルを.txtとして保存できます:abiword --to=txt --to-name=output.txt input.pdf
99
Kurt Pfeifle

GhostScriptが座標を受け入れるかどうかはわかりませんが、PDFを画像に変換し、指定された座標から切り取られたサブ画像として、または画像全体としてOCRエンジンに送信できます。一部のOCR APIは、OCRの領域を狭めるために矩形パラメーターを受け入れます。

OCRエンジンとして Tesseract を使用し、PDF-to-imageコンバーターとしてGhostScriptを使用する実際の例については、 VietOCR を参照してください。

1
nguyenq

Debenu Quick PDF Library ページ上の定義された領域からテキストを抽出できます。 SetTextExtractionArea 関数を使用すると、xおよびy座標を指定できます領域の幅と高さも指定できます。

  • Left=エリアの左端の水平座標
  • Top=領域の上端の垂直座標
  • Width=エリアの幅
  • Height=エリアの高さ

次に、この直後に GetPageText 関数を呼び出して、定義された領域からテキストを抽出できます。

C#を使用した例を次に示します(ただし、ライブラリはマルチプラットフォームであり、さまざまなプログラミング言語で使用できます)。

DPL.LoadFromFile(@"Sample.pdf", "");
DPL.SetOrigin(1); // Sets 0,0 coordinate position to top left of page, default is bottom left
DPL.SetTextExtractionArea(35, 35, 229, 30); // Left, Top, Width, Height
string ExtractedContent = DPL.GetPageText(8);
Console.WriteLine(ExtractedContent);

GetPageTextを使用すると、その領域にあるテキストまたはその領域にあるテキストだけでなく、名前、色、サイズなどのテキストのフォントに関する情報を返すこともできます。

1
Rowan