web-dev-qa-db-ja.com

C#でPDFからテキストを抽出する

簡単に言うと、SQLデータベースに貼り付ける前にコンテンツを分析するために、複数のPDF(実際にはかなりの数)からテキストをリッピングする必要があります。

一種の作業(最も良いものはiTextSharpを使用する)のかなり大ざっぱな無料のC#ライブラリをいくつか見つけましたが、書式エラーが多く、一部の文字がスクランブルされ、多くの場合、スペース( '')EVERYWHERE-単語の中にありますすべての文字の間で、数行を占めるそれらの巨大なブロックは、すべて少しランダムに見えます。

これを行う簡単な方法はありますか?完全に見落としている(かなり可能性があります!)か、抽出されたバイト値を確実に文字に変換することを伴う少し困難な作業ですか?

28
Duncan Tait

これを確実に行うにはいくつかの困難があるかもしれません。問題は、PDFがプレゼンテーション形式であり、優れたタイポグラフィを重視していることです。1つの単語を出力したいだけだとしましょう:タップ

A PDFレンダリングエンジンは、この疑似コードに示すように、これを2つの個別の呼び出しとして出力する場合があります。

moveto (x1, y); output ("T")
moveto (x2, y); output ("ap")

これは、文字Tとaの間のデフォルトkerning(文字間隔)がレンダリングエンジンに受け入れられないか、マイクロを追加または削除している可能性があるためです完全に揃えられた行を取得するための文字間のスペース。これが最終的に結果として生じるのは、PDFにある実際のテキストフラグメントは、完全な単語ではなく、それらの断片であることが非常に多いということです。

20
Tarydon

Nugetから入手できるDotNetのTikaをご覧ください: https://www.nuget.org/packages/TikaOnDotnet.TextExtractor/

これは、IKVMを使用する非常に優れたTika Javaライブラリのラッパーです。非常に使いやすく、新旧のOffice形式を含む、PDF以外のさまざまなファイルタイプを処理します。自動で実行されます。 -ファイル拡張子に基づいてパーサーを選択するので、次のように簡単です。

var text = new TextExtractor().Extract(file.FullName).Text;

更新:このソリューションでの注意点の1つは、IKVMでの開発が終了したことです。これが長期的に何を意味するのかわかりません。 http://weblog.ikvm.net/2017/04/21/TheEndOfIKVMNET.aspx

14
David Hammond

この記事 をご覧ください。これは、優れた iTextSharp ライブラリに基づいています。

9
Darin Dimitrov

.NETのテキスト/データ抽出フレームワークであるToxyを試すことができます。 Toxy 1.0では、PDFがサポートされます。詳しくは、 http://toxy.codeplex.com)にアクセスしてください

3
Tony Qu

Docotic.Pdfライブラリ (免責事項:私はビットミラクルで働いています)を試して、PDFファイルからテキストを抽出することができます。ライブラリはいくつかのヒューリスティックを使用して、単語の文字間の不要なスペース。

PDFからテキストを抽出する方法 を示すサンプルをご覧ください。

1
Bobrovsky

「無料」の代替案を探している場合は、 PDF Clown をチェックしてください。私は個人的にiFilterベースのアプローチを使用しましたが、他の種類のファイルを簡単にサポートする必要がある場合は問題なく動作するようです。サンプルコード here

0
Jussi Palo

データベースにデータをインポートする目的でPDFファイルを処理している場合は、考慮することをお勧めします ByteScout PDF Extractor SDK 含まれているいくつかの便利な機能は

  • テーブル検出;
  • cSV、XML、またはフォーマットされたテキストとしてテキストを抽出(オプションでレイアウトを復元)。
  • 正規表現をサポートするテキスト検索。
  • テキストオブジェクトにアクセスするための低レベルAPI

免責事項:私はByteScoutと提携しています

0
Eugene