2

PDFファイルからテキスト、正確に表形式のデータを抽出することに関する一般的な質問があります。

PDFビューアはどのようにしてテーブルを読み込んで表示できますか? そして、必要な列情報を同じ方法で取得できないのはなぜでしょうか?

私はこれを1週間探しています.pdftoxmlを使用して、トークン座標と幅が広すぎるテーブルセル(正確な中間の空のテーブルセルの認識が不可能になるなど)に悩まされています。

テキストを正規表現することで、大量のpdfファイルに対してこれを回避しました(これは、行間距離が無視されて「貼り付けられた」場合、行ごとに非常に成功しました)が、もちろんそれは単なるインスタンスソリューションです。

これは私に頭を悩ませます。PDFビューアはセルの線を描画し、セルの開始位置と終了位置を認識しますが、これをPDFソースから読み取ることはできません. これはどのように可能ですか?私たちが推測できないことを、彼らは何を知っているのでしょうか?

4

2 に答える 2

5

あなたが持っている誤解は、列が列として PDF ファイル内に格納されているということです。そうではありません。PDF ビューアーは、表、列、段落、テキストの行、または単語を理解できません。

PDF はページ記述言語として作成されたもので、さまざまなデバイスでまったく同じページを再現するのに非常に優れています。それがその目標であるため、構造は気にせず、あなたが言及しているのはすべて構造です。

PDF でテキストを描画する方法は、非常にシンプルです。ページの指示は次のようになります。

  • このフォントを設定
  • ページのこのポイントに移動
  • これらの文字をレンダリングします。
  • ページのこの別のポイントに移動します
  • さらにいくつかの文字をレンダリングします。

これらの手順と一緒に一部の構造情報を PDF に保存することもできますが、通常は行われず、とにかく後付けとして PDF 形式で実装されました。

上記の (疑似) 説明を見ると、表がどのように描かれているかを簡単に理解できます。ファイルには、1 つのセルの特定の位置に移動してテキストを描画するための指示が含まれているだけです。次に、別のセルに移動してそのテキストを描画するための追加の指示。

操作を逆にして PDF ページから構造化された情報を抽出したい場合は、構造化された情報を「作り直す」必要があります。これは、どのテキストが同じベースライン上にあり、したがって同じ行に属している可能性があるかを把握することなどを意味します。そのベースライン上で互いに十分に近接しているため、単語または列である可能性があるテキストはどれですか...など...

あなたが理解したように、まったく簡単な作業ではありません!

于 2012-12-22T12:20:09.637 に答える
-2

圧縮されていない pdf ドキュメントには、疑似正規表現形式の次の不明確な形式 ((0,0) が左下) の「ストリーム オブジェクト」があります。

(x1 y1 m x2 y2 l [whitespace or blank or newline seperator symbol])* S (BT .* ET)*

どこ

x1, y1, x2, y2 are coordinates
l probably for "draw line"
m move to, "from to" or "merge"
S is the command for "draw" or the like
BT Begin Text
ET End Text

すべてのコマンドの後置。

編集:

1 つの可能な Java 正規表現は (ref PDF32000_2008.pdf) で、圧縮されていない pdf ソースで改行を空白に置き換えた後です。

((\s+\d+(\.\d+)?){2}(\s+m|\s+l|(\s+\d+(\.\d+)?){2}(\s+re|\s+y|\s+v|(\s+\d+(\.\d+)?){2}\s+c))\s+)+([SsFn]|[fBb](\*)?) 

ストリームには「W*」や「Q q」などの他の要素があり、一般的に線の太さやフォント プロパティを調整しているように見えます。アドホックな言語仕様を見つけることができなかったので、これは私が実験から推測したものです。

この情報とテキスト トークンの座標 (ET と BT の間) を使用して、テーブル セルの幅、テーブルの開始位置と終了位置 (異なるテーブルを識別するため) を推測できます。

問題は、あらゆる種類のストリームを圧縮しないままです。pdftk を使用すると、openoffice ライターから作成された pdf ファイルを圧縮解除できましたが、任意の pdf ファイルにはまだ暗号化された記号が含まれています。

さらに詳しい情報:

http://www.gnupdf.org/Introduction_to_PDF

http://blog.idrsolutions.com/2011/05/understanding-the-pdf-file-format-%E2%80%93-carriage-returns-spaces-and-other-gaps/

http://blog.idrsolutions.com/2012/03/understanding-the-pdf-file-format-names-locations/

http://blog.idrsolutions.com/2011/05/understanding-the-pdf-file-format-%E2%80%93-pdf-xref-tables-explained/

PDF ページ ストリーム オプティマイザー ライブラリ?

http://www.gnupdf.org/Stream

于 2012-12-22T21:47:15.930 に答える