PDFファイルから矩形を使用して非構造化テキストを抽出する
構造化PDFファイル(ページ構造に関する情報を含む)または非構造化PDFファイル(構造情報を含まず、コンテンツが任意の順序で配置されている)を作成することが可能です。これはPDFが作成される際に決定され、非構造化PDFファイルを構造化PDFファイルに変換することはできません。
JPedalはPDFファイルからテキストコンテンツを抽出するための複数のメソッドを提供しています。この場合、指定された矩形内のすべてのテキストを抽出することができます。
java --module-path . --add-modules com.idrsolutions.jpedal org/jpedal/examples/text/ExtractTextInRectangle
"inputFileOrFolder" "outputFolder"
モジュールの使用を推奨しますが、必要に応じてクラスパスを使用 することもできます。
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とは逆になります)。
