2

表だけを含む一連のページを含む非常に大きなPDFファイル(200,000 KB以上)があります。どういうわけかRubyを使用してこの情報を解析し、結果のデータをMySQLデータベースにインポートしたいと思います。

PDFからこのデータを引き出す方法を知っている人はいますか?データは次のようにフォーマットされます。

名前| 住所| 報告された現金| 報告された年| ホルダーネーム

[名前]フィールドがアドレスフィールドにオーバーフローすることがあります。その場合、残りの列は次の行に表示されます。

不規則なフォーマットのために、私はこれを理解することに固執しています。少なくとも、このタスク用のRuby PDFライブラリを誰かに教えてもらえますか?

更新:誤って間違った情報を提供しました!ファイルの実際のサイズは300MB、つまり300,000KBです。これを反映するために上記の変更を行いました。

4

5 に答える 5

2

PDFをAcrobatReaderまたはその他のPDFビューアで開いたときに、問題なくテキストスニペットをコピーして貼り付けることができると思いますか?

プログラムでそのようなモンスターファイルからテキストを解析して抽出しようとする前に(200メガバイトのみであっても-巨大なテーブルの単純なテキストの場合、200000ページがない限り...)、私は次のように進めます:

  1. 最初にファイルを再蒸留してサニタイズしてみてください。
  2. さまざまなCLIツールを使用して、テキストを.txtファイルに抽出してみてください。

これはほんの数分です。これを行うためのRubyプログラムの作成は、確かに数時間、数日、または数週間の問題です(PDFファイル形式の内部に関する知識によって異なります...まだあまり経験がないようです)。

「2」の場合。動作します、あなたはすでに途中で終わっているかもしれません。それが機能する場合は、Rubyを使用してプログラムで実行することが、原則として解決できる作業であることもご存知でしょう。「2」の場合。動作しません。プログラムで達成するのは非常に難しいかもしれません。

'Monster.pdf'をサニタイズします。

Ghostscriptを使用することをお勧めします。アクセスできる場合は、AdobeAcrobatDistillerを使用することもできます。

gswin32c.exe ^
  -o Monster-PDF-sanitized ^
  -sDEVICE=pdfwrite ^
  -f Monster.pdf

(入力と比較した場合、その1つのコマンドで出力PDFがどれだけ縮小されるのか興味があります。)

PDFからテキストを抽出します。

最初に試してみることをお勧めしますpdftotext.exeXPDFの人々から)。他にも、もう少し不便な方法がありますが、これですでに機能する可能性があります。

pdftotext.exe ^
   -f 1 ^
   -l 10 ^
   -layout ^
   -eol dos ^
   -enc Latin1 ^
   -nopgbrk ^
   Monster-PDF-sanitized.pdf ^
   first-10-pages-from-Monster-PDF-sanitized.txt

これにより、すべてのページが抽出されるわけではなく、1〜10ページのみが抽出されます(概念実証のために、まったく機能するかどうかを確認します)。すべてのページから抽出するには、-f 1 -l 10パラメータを省略します。-enc ASCII7パラメータを(またはUTF-8、 )に変更して、エンコーディングを微調整する必要がある場合がありますUCS-2

これがすばやく簡単に機能しない場合(場合によっては、元のPDFの一部のフォントが「カスタムエンコーディングベクトル」を使用しているため)、これまでの調査結果の詳細を説明する新しい質問をする必要があります。次に、問題を解決するために、より大きな口径に頼る必要があります。

于 2010-09-15T10:16:19.597 に答える
1

少なくとも、このタスク用のRuby PDFライブラリを誰かに教えてもらえますか?

まだ行っていない場合は、前の2つの質問「Ruby:PDFファイルの読み取り」と「rubypdf解析gem/library」を確認する必要があります。PDF :: ReaderPDF :: Toolkit、およびDocsplitは、比較的人気のある推奨ライブラリの一部です。JRubyといくつかのJavaPDFライブラリパーサーを使用するという提案さえあります。

これらの解決策のいずれかが実際にあなたの問題に適しているかどうか、特にあなたがそのような巨大なPDFファイルを扱っているかどうかはわかりません。したがって、誰かがより有益な答えを提供しない限り、おそらくライブラリを1つか2つ選択して、それらを試乗する必要があります。

于 2010-09-14T21:45:39.623 に答える
0

レンダリングされたPDFには表形式のレイアウトの概念がなく、所定の場所に線とテキストがあるだけなので、これは難しい作業になります。行と列を判別できない場合がありますが、PDF自体に依存する場合があります。

Javaライブラリは最も堅牢であり、テキストを抽出するだけではありませんそこで、JRubyとiTextまたはPDFboxを調べます。

于 2010-09-15T02:25:20.017 に答える
0

PDFに構造化されたコンテンツがあるかどうかを確認します。これを説明するブログ記事をhttp://www.jpedal.org/PDFblog/?p=410に書きました。

そうでない場合は、それを構築する必要があります。

于 2010-09-15T07:26:17.797 に答える
-1

たぶんエビのルビーライブラリ?リンクテキスト

于 2010-09-14T22:07:14.433 に答える