2012-01-11 71 views
6

情報抽出の研究を行っており、iTextを使用したいと考えています。iTextを使用したPDFテキスト抽出

私たちはiTextを探索しています。我々が検討した文献によると、iTextは使用するのに最適なツールです。 iTextの1行につきpdfからテキストを抽出することは可能ですか?私はここに私のstackoverflowの質問の投稿を読んだが、それはそれを抽出しないテキストを読む。誰も私の問題を助けてくれる?ありがとうございました。

+3

私はあなたがしていることについて完全にはっきりしていません。テキストを読むこととテキストを抽出することは、一般的に同じことです。 iTextはテキストをあなたのためにファイルに保存しませんが、テキストがあればそれをかなり簡単に行うことができます。 iTextは実際にはテキスト(アウトラインやビットマップではない)である限り、テキストを抽出するのに本当に素晴らしい仕事をします。このサイトを検索する際にはiTextの.Netポートである 'iTextSharp'を探してください。より多くの質問/回答があり、コードはC#とほぼ同じです。 –

答えて

3

iTextではこれを行うことができますが、テキストブロックの細かさについては保証されません。テキストブロックは、ドキュメントの作成に使用される実際のPDFレンダラーに依存します。

各単語または文字にも独自のテキストブロックがある可能性があります。信頼性の高い結果を得るには、テキストブロックの座標に基づいてテキストブロックの順序を変更する必要があるため、これらは字句順にする必要はありません。また、テキストブロック間にスペースを挿入する必要があるかどうかを計算する必要があります。

13

セオドア行うための最善のことは買いです

あなたはPDFファイルからテキストを抽出し、クリスのようなものであれば、実際にテキスト(ないアウトラインまたはビットマップ)であるとして

を指摘することができます言ったようにBruno Lowagieの本「Itext in action」。第2版​​では、第15章でテキストの抽出について説明します。

しかし、彼のサイトで例を見ることができます。 http://itextpdf.com/examples/iia.php?id=279

そして、それを解析してプレーンなtxtファイルを作成できます。

/* 
* This class is part of the book "iText in Action - 2nd Edition" 
* written by Bruno Lowagie (ISBN: 9781935182610) 
* For more info, go to: http://itextpdf.com/examples/ 
* This example only works with the AGPL version of iText. 
*/ 

package part4.chapter15; 

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.PrintWriter; 

import com.itextpdf.text.pdf.PdfReader; 
import com.itextpdf.text.pdf.parser.PdfReaderContentParser; 
import com.itextpdf.text.pdf.parser.SimpleTextExtractionStrategy; 
import com.itextpdf.text.pdf.parser.TextExtractionStrategy; 

public class ExtractPageContent { 

    /** The original PDF that will be parsed. */ 
    public static final String PREFACE = "resources/pdfs/preface.pdf"; 
    /** The resulting text file. */ 
    public static final String RESULT = "results/part4/chapter15/preface.txt"; 

    /** 
    * Parses a PDF to a plain text file. 
    * @param pdf the original PDF 
    * @param txt the resulting text 
    * @throws IOException 
    */ 
    public void parsePdf(String pdf, String txt) throws IOException { 
     PdfReader reader = new PdfReader(pdf); 
     PdfReaderContentParser parser = new PdfReaderContentParser(reader); 
     PrintWriter out = new PrintWriter(new FileOutputStream(txt)); 
     TextExtractionStrategy strategy; 
     for (int i = 1; i <= reader.getNumberOfPages(); i++) { 
      strategy = parser.processContent(i, new SimpleTextExtractionStrategy()); 
      out.println(strategy.getResultantText()); 
     } 
     reader.close(); 
     out.flush(); 
     out.close(); 
    } 

    /** 
    * Main method. 
    * @param args no arguments needed 
    * @throws IOException 
    */ 
    public static void main(String[] args) throws IOException { 
     new ExtractPageContent().parsePdf(PREFACE, RESULT); 
    } 
} 

注意この例では、唯一のiTextのAGPLのバージョンで動作するライセンス

: はここでのコード例です。

他の例を見ると、テキストの一部を除外する方法や、pdfの一部を抽出する方法が示されます。

希望します。

関連する問題