2011-02-26 9 views
7

Estoy haciendo un procesamiento simple de una variedad de documentos (ODS, MS office, pdf) usando Apache Tika. Tengo que obtener al menos:Apache Tika y metadatos del documento

word count, author, title, timestamps, language etc. 

que no es tan fácil. Mi estrategia es utilizar el patrón de método de plantilla para 6 tipos de documentos, donde primero encuentro el tipo de documento y, en función de eso, lo proceso individualmente.

Sé que apache tika debería eliminar la necesidad de esto, pero los formatos de los documentos son bastante diferentes ¿no?

Por ejemplo

InputStream input = this.getClass().getClassLoader().getResourceAsStream(doc); 
ContentHandler textHandler = new BodyContentHandler(); 
Metadata metadata = new Metadata(); 
Parser parser = new OfficeParser(); 
parser.parse(input, textHandler, metadata, new ParseContext()); 
input.close(); 

for(String s : metadata.names()) { 
    System.out.println("Metadata name : " + s); 
} 

he tratado de hacer esto para las SAO, MS Office, documentos PDF y la metadados difiere mucho. Hay una interfaz MSOffice que enumera las claves de metadatos para los documentos MS y algunos Lista de metadatos Dublic Core. Pero, ¿cómo se debe implementar una aplicación como esta?

¿Podría agradar a alguien con experiencia compartir su experiencia? Gracias

Respuesta

6

En general, los analizadores deben devolver la misma clave de metadatos para el mismo tipo de cosas en todos los formatos de documentos. Sin embargo, hay algunos tipos de metadatos que solo ocurren en algunos tipos de archivos, por lo que no los obtendrás de los demás.

Es posible que desee sólo tiene que utilizar el AutoDetectParser, y si es necesario hacer nada especial con el mango de metadatos que después basa en el tipo MIME, por ejemplo

Metadata metadata = new Metadata(); 
metadata.set(Metadata.RESOURCE_NAME_KEY, filename); 
ParseContext context = new ParseContext(); 

Parser parser = new AutoDetectParser(); 
parser.parse(input, textHandler, metadata, new ParseContext()); 

if(metadata.get(CONTENT_TYPE).equals("application/pdf")) { 
    // Do something special with the PDF metadata here 
} 
Cuestiones relacionadas