構造化PDFファイルから構造化コンテンツを抽出する
構造化PDFファイル(ページ構造に関する情報を含む)または非構造化PDFファイル(構造情報を含まず、コンテンツが任意の順序で配置される)を作成することができます。これはPDFが作成される際に決まるため、非構造化PDFファイルを構造化PDFファイルに変換することはできません。
PDFファイルには、PDF内のテキストコンテンツの構造を保持するためのメタデータタグを含めることができます(これはPDFファイルが作成される際のオプションです)。存在する場合、JPedalはPDFファイルからテキストコンテンツを抽出するためのいくつかのメソッドを提供します。この場合、PDF内に存在する構造化テキストを抽出することができます。存在しない場合、出力ファイルには利用可能なコンテンツがなかったことを説明する簡単なメッセージが含まれます。
構造化PDFファイルの利点は、コンテンツを抽出して他の形式に変換できることです。JPedalは現在、このコンテンツをHTML、JSON、XML、またはYAMLとして出力することをサポートしています。
PDFファイルには、構造化コンテンツに画像が含まれる場合もあり、これらは図(figures)と呼ばれます。図にalt textまたはactualtextがある場合、これらも出力に含まれます。
HTMLとしてコンテンツを抽出するには
java --module-path . --add-modules com.idrsolutions.jpedal org/jpedal/examples/text/ExtractStructuredText
"inputFileOrFolder" "outputFolder" "html"
JSONとしてコンテンツを抽出するには
java --module-path . --add-modules com.idrsolutions.jpedal org/jpedal/examples/text/ExtractStructuredText
"inputFileOrFolder" "outputFolder" "json"
Markdownとしてコンテンツを抽出するには
java --module-path . --add-modules com.idrsolutions.jpedal org/jpedal/examples/text/ExtractStructuredText
"inputFileOrFolder" "outputFolder" "markdown"
XMLとしてコンテンツを抽出するには
java --module-path . --add-modules com.idrsolutions.jpedal org/jpedal/examples/text/ExtractStructuredText
"inputFileOrFolder" "outputFolder" "xml"
YAMLとしてコンテンツを抽出するには
java --module-path . --add-modules com.idrsolutions.jpedal org/jpedal/examples/text/ExtractStructuredText
"inputFileOrFolder" "outputFolder" "yaml"
図を含めてコンテンツを抽出するには
java --module-path . --add-modules com.idrsolutions.jpedal org/jpedal/examples/text/ExtractStructuredText
"inputFileOrFolder" "outputFolder" "xml" "figuresFolder" "jpeg"
モジュールの使用を推奨しますが、必要であればクラスパスを使用 することもできます。
ExtractStructuredTextProperties properties = new ExtractStructuredTextProperties();
properties.setFileOutputMode(OutputModes.XML);
//properties.setFileOutputMode(OutputModes.HTML);
//properties.setFileOutputMode(OutputModes.JSON);
//properties.setFileOutputMode(OutputModes.MARKDOWN);
//properties.setFileOutputMode(OutputModes.YAML);
ExtractStructuredText extract = new ExtractStructuredText("inputFile.pdf", properties);
//extract.setPassword("password");
if (extract.openPDFFile()) {
// A document containing all the structured content
Document anyStructuredText = extract.getStructuredTextContent();
// An array of documents containing the structured content for each page
Document[] anyStructuredTextPerPage = extract.getStructuredTextContentPerPage();
// These methods also write out the figures (images)
Document anymoreStructuredText = extract.getStructuredTextContentAndFigures("figuresFolder", "imageFormat");
Document[] anymoreStructuredTextPerPage = extract.getStructuredTextContentAndFiguresPerPage("figuresFolder", "imageFormat");
}
extract.closePDFfile();
デフォルトの出力モードは、
setFileOutputMode()で上書きしない限りXMLです
//構造化テキストを抽出するデフォルトはXMLです
ExtractStructuredText.writeAllStructuredTextOutlinesToDir("inputFileOrFolder", "outputFolder");
//オプションをより詳細に制御して構造化テキストを抽出する
final String password = null; //パスワードが不要な場合はnullを使用
final ErrorTracker tracker = null; //ErrorTrackerの実装を使用して抽出を監視できます
ExtractStructuredTextProperties properties = new ExtractStructuredTextProperties();
properties.setFileOutputMode(OutputModes.XML);
//properties.setFileOutputMode(OutputModes.HTML);
//properties.setFileOutputMode(OutputModes.JSON);
//properties.setFileOutputMode(OutputModes.MARKDOWN);
//properties.setFileOutputMode(OutputModes.YAML);
ExtractStructuredText.
writeAllStructuredTextOutlinesToDir("inputFileOrFolder", password, "outputFolder", tracker, properties);
ExtractStructuredText.
writeAllStructuredTextOutlinesAndFiguresToDir("inputFileOrFolder", password, "outputFolder", tracker, properties, "figuresFolder", "imageFormat");
デフォルトの出力モードは、
setFileOutputMode()で上書きしない限りXMLです
この例では、JPedalのExtractStructuredText クラスを使用しています。ExtractStructuredTextは、ファイルに含まれる構造化コンテンツの詳細を記したXMLファイルを出力します。
すべての抽出メソッドは、指定された矩形内のPDFテキストを抽出します。この矩形の座標に必要な形式は、x1、y1(左上隅)、およびx2、y2(右下隅)です。
Javaは左上座標系を使用しますが、PDFは左下座標系を使用するため、AffineTransformで出力を垂直方向に反転する必要がある場合があります。PDFファイルのページ座標について詳しくは、このブログ記事 をご確認ください。
