web-dev-qa-db-ja.com

PDF文書のテキスト構造を特定することが非常に難しい場合、PDF読者はどのようにうまく行うのですか?

単純なコンソールアプリケーションまたはPowerShellスクリプトを記述して、多数のPDFドキュメントからテキストを抽出します。これを行うためのライブラリとCLIツールがいくつかありますが、文書構造を確実に識別できるものはないことに注意してください。特に、テキスト列の認識に関心があります。非常に高価なPDFLib TETツールでさえ、隣接する2つのテキスト列の内容を頻繁に混乱させます。

PDF形式には列の概念や単語さえないことに注意してください。SOについての同様の質問に対するいくつかの回答がこれに言及しています。問題学術研究を保証するほど素晴らしい このジャーナルの記事 注記:

PDFファイル内のすべてのデータオブジェクトは、一般にトークン、行などの高レベルのテキスト単位に関する情報を伝えない演算子のシーケンスとして、視覚指向の方法で表されます。または列-そのようなユニット間の境界に関する情報は、空白を介して暗黙的にのみ利用できます。

したがって、私が試したすべての抽出ツール(iTextSharp、PDFLib TET、およびPython PDFMiner))は、テキスト列の境界を認識できませんでした。これらのツールの中で、PDFLib TETが最適に機能します。

ただし、非常に軽量でオープンソースのSumatraPDFは、PDFリーダーなど、列とテキスト領域を完全に識別できる多くのアプリケーションです。これらのアプリケーションのいずれかでドキュメントを開くと、すべてのテキストを選択しますページ(またはCTRL + Aを使用してドキュメント全体)をコピーしてテキストファイルに貼り付けると、テキストは正しい順序でほぼ完璧にレンダリングされます。フッターとヘッダーのテキストがいずれかの列に混在する場合があります。

だから私の質問は、これらのアプリケーションはどうやら(PDFLibのような高価なツールであっても)一見それほど難しいように見えることをどのように実行できるのでしょうか?

編集2014年3月31日:価値のあることとして、PDFBoxはiTextSharpよりもテキスト抽出がはるかに優れており(特注のStrategy実装にかかわらず)、PDFLib TETはPDFBoxよりもわずかに優れていますが、かなり高価です。 Python PDFMinerは絶望的です。私が見た最良の結果はGoogleからのものです。PDF(一度に2GB)をGoogleドライブにアップロードして、テキストとしてダウンロードできます。これは私がやっていることです。私は、PDFを10ページのファイルに分割する小さなユーティリティを作成しました(Googleは最初の10ページのみを変換します)。ダウンロードしたら、それらをつなぎ合わせます。

編集7 2014年4月。私の最後をキャンセルします。最高の抽出は、MS Wordによって実現されます。そして、これはAcrobat Proで自動化できます([ツール]> [アクション] Wizard> [新しいアクションを作成])。NET OpenXmlライブラリを使用して、テキストからテキストへ自動化できます。 ここにクラスがあります 抽出(docxからtxt)を非常にきちんと行います私の最初のテストでは、MS Word変換がドキュメント構造に関してかなり正確であることがわかりましたが、これはプレーンテキストに変換されればそれほど重要ではありません。

18
david004

私はかつてPDFエディター製品についてあなたが述べたことを正確に実行するアルゴリズムを書いたことがありますが、これは今日でも最も使用されているPDFエディターです。あなたが言及する理由はいくつかあります(私はそう思います)が、重要な理由はフォーカスです。

PDF(通常)に構造情報が含まれていないことは正しいです。 PDFは、必ずしもページの「意味」ではなく、ページの視覚的表現に関心があります。つまり、最も純粋な形式では、行、段落、列などの情報は必要ありません。実際には、テキスト自体についての情報さえ必要とせず、意味のわからないテキストをコピーして貼り付けることができないPDFファイルはたくさんあります。

したがって、書式設定されたテキストを抽出できるようにするには、ページ上のすべてのテキストを実際に確認する必要があります。ラインアート情報も考慮に入れて、それらをつなぎ合わせる必要があります。 。通常、これは空白を見て、最初に行、段落などを決定するエンジンを作成することで発生します。テーブルは非常に多様であるため、たとえば、テーブルが難しいことで有名です。

代替戦略は次のとおりです。

  • some PDFファイルで利用可能な構造情報のいくつかを見てください。一部のPDF/AファイルとすべてのPDF/UAファイル(アーカイブ用のPDFおよびユニバーサルアクセシビリティ用のPDF)には、構造を取得するために非常によく使用できる構造情報が必要です。他のPDFファイルにもその情報が含まれている場合があります。
  • PDFドキュメントの作成者を見て、それらのPDFを適切に処理するための特定のアルゴリズムを用意してください。 Wordにのみ興味があることがわかっている場合、または処理するPDFの99%がWord 2011から出力されることがわかっている場合は、その知識を使用する価値があります。

では、なぜこれが他の製品よりも優れている製品があるのでしょうか。フォーカスですね。 PDFの仕様は非常に広範であり、一部のツールは下位レベルのPDFタスクに重点を置いており、一部のツールは上位レベルのPDFタスクに重点を置いています。 「オフィス」での使用を目的としたものもあれば、「グラフィックアート」での使用を目的としたものもあります。あなたの焦点に応じて、あなたは特定の機能が多くの注目に値するかどうかを決めるかもしれません。

さらに、それはお粗末な答えのように思えるかもしれませんが、実際には本当だと思います。これはアルゴリズム的に難しい問題であり、市場の平均的な製品よりもはるかに優れたアルゴリズムを実装するのにたった1人の天才開発者しか必要としません。それはそれらの分野の1つです-賢く、それにいくつかの注意を払うのに十分な焦点を持っている場合、そして特にあなたがこれを書いているターゲット市場が何であるかについて良い考えを持っている場合-あなたはそれを正しく得るでしょう、他の誰もがそれを平凡にするでしょう。

(そして、いいえ、そのコードを書いているときはすぐにはわかりませんでした。フォロースルーして本当に良いものを作るのに十分な焦点がありませんでした)

17

フォーマットされたテキストを適切に抽出するには、ライブラリ/ユーティリティは次のことを行う必要があります。

  1. PDF(グリフのサイズ、ヒント情報など)で使用されるフォントのプロパティに関する正しい情報を取得する
  2. グラフィックスの状態を維持します(テキストやページスケーリングなどの非フォントパラメータ)
  3. アルゴリズムを実装して、ページ上のどの記号を単語、行、または列のように扱うかを決定します。

私はあなたが質問で述べた製品の専門家ではないので、以下の結論は一粒の塩でとられるべきです。

描画 PDFを使用しないツールは、最初の2つの要件に関する専門知識が少ない傾向があります。彼らはより深いレベルでフォントの詳細を扱う必要はなく、グラフィックスの状態を維持するのに十分にテストされていないかもしれません。

PDFを画像に変換する適切なツールがあれば、遅かれ早かれ、テキスト配置の欠点に気付くでしょう。そして、それらを修正することは、テキスト抽出においてExcelに役立ちます。

6
Bobrovsky