Apache Tikaを使用してWord/PDFファイルのページごとにテキストを抽出することは可能ですか?
-
26-10-2019 - |
質問
私が見つけることができるすべてのドキュメントは、ファイル全体のコンテンツのみを抽出できることを示唆しているようです。ただし、ページを個別に抽出する必要があります。そのために自分のパーサーを書く必要がありますか?私が欠けているいくつかの明白な方法はありますか?
解決
実際、ティカは要素を送信することにより(少なくともPDFで)ページを処理します <div><p>
ページが始まる前に </p></div>
ページが終了した後。これを使用してハンドラーでページカウントを簡単にセットアップできます(ページをカウントするだけです <p>
):
public abstract class MyContentHandler implements ContentHandler {
private String pageTag = "p";
protected int pageNumber = 0;
...
@Override
public void startElement (String uri, String localName, String qName, Attributes atts) throws SAXException {
if (pageTag.equals(qName)) {
startPage();
}
}
@Override
public void endElement (String uri, String localName, String qName) throws SAXException {
if (pageTag.equals(qName)) {
endPage();
}
}
protected void startPage() throws SAXException {
pageNumber++;
}
protected void endPage() throws SAXException {
return;
}
...
}
PDFでこれを行う場合、パーサーが適切な順序でテキスト行を送信しない場合、問題に遭遇する可能性があります - 参照 Apache Tika 0.9を使用してPDFファイルからテキストを抽出します(およびフードの下のPDFBOX) これを処理する方法について。
他のヒント
基礎となるライブラリを使用する必要があります - ティカはページレベルで何もしません。
PDFファイルの場合、PDFBOXはページのものを提供できるはずです。単語の場合、Apache PoiのHWPFとXWPFはページレベルのことを実際には実行しません - ページブレイクはファイルに保存されませんが、テキスト +フォント +ページサイズに基づいてその場で計算する必要があります...
PDFでページ数を取得できます。 メタデータ オブジェクト xmpTPg:NPages
次のようにキー:
Parser parser = new AutoDetectParser();
Metadata metadata = new Metadata();
ParseContext parseContext = new ParseContext();
parser.parse(fis, handler, metadata, parseContext);
metadata.get("xmpTPg:NPages");
所属していません StackOverflow