PDFファイルから矩形を使用して非構造化テキストを抽出する
構造化PDFファイル(ページ構造に関する情報を含む)または非構造化PDFファイル(構造情報を含まず、コンテンツが任意の順序で配置されている)を作成することができます。これはPDFが作成される際に決まるもので、非構造化PDFファイルを構造化PDFファイルに変換することはできません。
JPedalは、PDFファイルからテキストコンテンツを抽出するいくつかのメソッドを提供しています。このケースでは、指定した矩形内のすべてのテキストを抽出することができます。
java --module-path . --add-modules com.idrsolutions.jpedal org/jpedal/examples/text/ExtractTextInRectangle
"inputFileOrFolder" "outputFolder"
モジュールの使用を推奨しますが、必要に応じてclasspathを使用 することもできます。
ExtractTextInRectangle extract = new ExtractTextInRectangle("inputFile.pdf");
extract.setOutputFormat(OUTPUT_FORMAT.XML);
//extract.setEstimateParagraphs(true); //ドキュメント内の段落を推定
//extract.setPassword("password");
if (extract.openPDFFile()) {
int pageCount = extract.getPageCount();
for (int page = 1; page <= pageCount; page++) {
String text = extract.getTextOnPage(page);
//別の方法
//座標は x1, y1(左上隅)、x2, y2(右下隅)
//String text = extract.getTextOnPage(page, x1, y1, x2, y2);
}
}
extract.closePDFfile();
ExtractTextInRectangle extract = new ExtractTextInRectangle("inputFile.pdf");
extract.setOutputFormat(OUTPUT_FORMAT.TXT);
//extract.setEstimateParagraphs(true); //ドキュメント内の段落を推定
//extract.setPassword("password");
if (extract.openPDFFile()) {
int pageCount = extract.getPageCount();
for (int page = 1; page <= pageCount; page++) {
String text = extract.getTextOnPage(page);
//別の方法
//座標は x1, y1(左上隅)、x2, y2(右下隅)
//String text = extract.getTextOnPage(page, x1, y1, x2, y2);
}
}
extract.closePDFfile();
//プレーンテキストの抽出
ExtractTextInRectangle.writeAllTextToDir("inputFileOrFolder", "password_or_null", "outputFolder", -1, OUTPUT_FORMAT.TXT, false);
//XMLとしてテキストを抽出
ExtractTextInRectangle.writeAllTextToDir("inputFileOrFolder", "password_or_null", "outputFolder", -1, OUTPUT_FORMAT.XML, false);
この例では、JPedalのExtractTextInRectangle クラスを使用しています。ExtractTextInRectangleは、ページごとにtxtファイルを出力し、各ファイルにはそのページから抽出されたすべてのテキストが含まれます。
出力を抽出する際、PDFページのテキストが構造化されていない 可能性があることに注意することが重要です。非構造化ドキュメントには、コンテンツがどのようにレイアウトされているか、またはページに追加されているかに関する詳細情報が含まれていません。ページ上のすべての文字’a’が追加され、次にすべての文字’b’が追加される、というようなケースに遭遇したこともあります。
これに対処するため、ExtractTextInRectangleは、抽出時に矩形内に表示される順序でコンテンツを並べ替えようとします。
ページ(または選択された領域)に複数の向き(HORIZONTAL_LEFT_TO_RIGHT、HORIZONTAL_RIGHT_TO_LEFT、VERTICAL_TOP_TO_BOTTOM、VERTICAL_BOTTOM_TO_TOP)のテキストが含まれている場合、最も一般的な向きのテキストのみが抽出され、他のテキストは無視されます。
抽出メソッドはすべて、指定された矩形内のPDFテキストを抽出します。この矩形の座標に必要な形式は、x1, y1(左上隅)とx2, y2(右下隅)です。ページの原点は左下(Javaとは逆)です。
