2017-06-17 6 views
0

私は大量のPDF文書を持っており、そこからテキストを抽出する必要があります。抽出されたテキストは、後で処理するために使用します。私は線形アプローチでTesseract APIを使用して小さな文書のサブセットに対してこれを行い、必要な出力を得ました。ただし、多数の文書がある場合、これには非常に時間がかかります。Tesseract APIを使用して一括PDF抽出を実装する必要があります

この問題を解決するためにHadoop環境処理機能(Map-Reduce)とストレージ(HDFS)を使用しようとしました。しかし、Tesseract APIをHadoop(Map-Reduce)アプローチに実装するには問題があります。 Teserractはファイルを中間イメージファイルに変換するので、Tesseract-APIプロセスの中間結果イメージファイルをHDFS内部でどのように処理できるか混乱します。

私が検索し、以前のようにunsuccesfullyいくつかのオプションを試してみました:

  1. 私はこのために私は、Apacheを使用し、Hadoopの-地図-削減使って自分のPdfInputFormatクラスにFileInputFormatクラスを拡張してPDFからテキストを抽出していますPDFBoxからpdfからテキストを抽出することができますが、画像を含むscan-pdfの場合、この解決法では必要な結果が得られません。

  2. -Fuseを使用するという同じ話題で、画像ファイルをローカルで生成し、それをhdfsにアップロードして後で処理する必要があると答えた回答はほとんど見つかりませんでした。これが正しい方法であるかどうかは不明です。

これを回避する方法を知りたいですか?

+0

Apache TikaはApache PDFBoxでファイルをレンダリングし、次にtesseractでOCRを行います。おそらくそれがあなたのためのものです... –

+0

@TilmanHausherr応答をありがとう。 Map Reduceアプローチでこの作業を行うことができますか?可能であれば、いくつかの例を丁寧に説明してください。 – Bonson

+0

申し訳ありませんが、私は残りの部分を助けることはできません。私はPDFBoxのためにここに来ました。 –

答えて

0

は、複数のPDFのHadoopのフレームワークのパワーを使用してテキストを抽出し、その後、さらなる処理のために、このテキストを使用することを処理することが見出され、このアプローチである:

  1. 一方にテキストに変換されるすべてのPDFを入れフォルダ。
  2. pdfへのパスを格納するpdfごとに1つのテキストファイルを作成します。例えば変換するPDFファイルが10個ある場合は、10個のテキストファイルが生成され、それぞれにそれぞれのPDFファイルへの一意のパスが含まれています。
  3. これらのテキストファイルは、map-reduceプログラムの入力として与えられます。
  4. 入力ファイルのサイズが非常に小さいので、1入力のフレームワークによって1つの入力分割のみが生成されます。たとえば、10個のpdfを入力として持つと、フレームワークは10個の入力分割を生成します。
  5. 各入力分割から、1行(レコード)がRecord-Readerによって読み取られ、1つのマッパーに値として渡されます。したがって、入力テキストファイルに10レコード(行==ファイルパス)がある場合、マッパーは10回実行されます。入力ごとに1つのレコードがあるので、1つのマッパーレデューサーはその入力分割のタスクを実行するように割り当てられています。
  6. 私は10の入力分割を持っているので、10マッパーは並行して走ります。
  7. マッパーの中でゴーストスクリプトはイメージを生成し、マッパー値属性からファイル名を渡します。イメージは、マッパー自体の内部でTesseractを使用してテキストに変換され、各pdfのテキストが取得されます。これが出力です。
  8. これは、必要に応じて他の分析作業を行うためにレデューサーに渡されます。

これは現在の解決策です。これに関するフィードバックを希望します。

関連する問題