¿Es posible extraer texto por página para archivos Word/PDF usando Apache Tika?

StackOverflow https://stackoverflow.com/questions/5824867

  •  26-10-2019
  •  | 
  •  

Pregunta

Toda la documentación que puedo encontrar parece sugerir que solo puedo extraer el contenido de todo el archivo. Pero necesito extraer páginas individualmente. ¿Necesito escribir mi propio analizador para eso? ¿Hay algún método obvio que me falta?

¿Fue útil?

Solución

En realidad, Tika maneja las páginas (al menos en PDF) enviando elementos <div><p> antes de que comience la página y </p></div> después de que termina la página. Puede configurar fácilmente el recuento de páginas en su controlador usando esto (solo contando páginas usando solo <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;
    }
    ...
}

Al hacer esto con PDF, puede encontrarse con el problema cuando el analizador no envía líneas de texto en el orden adecuado, ver Extraer texto de archivos PDF con Apache Tika 0.9 (y PDFBox debajo del capó) sobre cómo manejar esto.

Otros consejos

Tendrá que trabajar con las bibliotecas subyacentes: Tika no hace nada a nivel de página.

Para los archivos PDF, PDFBox debería poder darle algunas cosas de página. Para Word, HWPF y XWPF de Apache Poi realmente no hacen cosas de nivel de página: los descansos de la página no se almacenan en el archivo, sino que deben calcularse en la mosca en función del texto de texto + fuentes + tamaño de página ...

Puede obtener el número de páginas en un PDF usando el metadatos objetos xmpTPg:NPages clave como en lo siguiente:

Parser parser = new AutoDetectParser();
Metadata metadata = new Metadata();
ParseContext parseContext = new ParseContext();
parser.parse(fis, handler, metadata, parseContext);
metadata.get("xmpTPg:NPages");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top