2011-10-31 13 views
11

Cuando intento extraer texto de mis archivos PDF, parece insertar espacios en blanco entre varias palabras al azar.PDFBox agregando espacios en blanco dentro de las palabras

estoy usando PDFBox-app-1.6.0.jar (última versión) el siguiente archivo de ejemplo en la sección de Descargas de esta página: http://www.sheffield.gov.uk/roads/children/parents/6-11/pedestrian-training

He intentado con varios otros archivos PDF y parece estar haciendo lo mismo en varias páginas.

que hacer lo siguiente:

java-jar PDFBox-app-1.6.0.jar ExtractText force -console ~/Desktop/ped formación PDF.pdf

en el archivo descargado y usted ver espacios en el seguimiento insertado incorrectamente en el resultado en la consola: "• Si ildren ch son capaces de caminar a Schoo l con seguridad que esto podría reducir la congestión "

"• Desarrolla buena hab su para la vida futura."

"www.sheff ield.gov.uk"

"Think Ahead !, ich WH se basa en la"

, etc, etc

Como se puede ver varias de las palabras anteriores tienen espacios entre ellos sin ninguna razón que pueda comprender.

Estoy en Ubuntu y ejecutando Sun's JDK 1.6.

He intentado esto en varios archivos PDF diferentes y he intentado buscar soluciones en foros, había errores similares pero todos parecían haberse resuelto.

Cualquier ayuda o si alguien más tiene el mismo problema, por favor comente. Esto está causando un gran problema al indexar el contenido correctamente para la búsqueda.

Respuesta

11

Lamentablemente, actualmente no existe una solución fácil para esto.

Los documentos PDF internos simplemente contienen instrucciones como "colocar caracteres 'abc' en la posición X" y "colocar caracteres 'def' en posición Y", y PDFBox intenta razonar si el texto extraído resultante debe ser "abc def" o "abcdef" se basa en cosas como la distancia entre X e Y. Estas heurísticas son generalmente bastante precisas, pero como puede ver, no siempre producen el resultado correcto.

Una forma de mejorar la calidad del texto extraído es intentar una búsqueda de diccionario en cada palabra o token extraídos. Si la búsqueda falla, intente combinar el token con el siguiente. Si la búsqueda del diccionario en el token combinado tiene éxito, entonces es bastante probable que el extractor de texto haya agregado erróneamente un espacio adicional dentro de la palabra. Desafortunadamente, esa característica aún no existe en PDFBox. Ver https://issues.apache.org/jira/browse/PDFBOX-1153 para la solicitud de función presentada para esto. Parches bienvenidos!

+1

Gracias Jukka, a veces es un alivio comprender por qué algo no está funcionando como se esperaba y también que no estoy haciendo nada que esté causando el problema. –

+0

Aquí hay un ejemplo de cómo crear dicho diccionario de términos si está usando Lucene. [Cómo extraer un vector de término de documento en Lucene] (http://stackoverflow.com/a/8901758/165085) –

5

La clase org.apache.pdfbox.util.PDFTextStripper (pdfbox-1.7.1) permite modificar la propensión a decidir si dos cadenas son parte de la misma palabra o no.

Al aumentar spacingTolerance se reducirá el número de espacios insertados.

/** 
* Set the space width-based tolerance value that is used 
* to estimate where spaces in text should be added. Note that the 
* default value for this has been determined from trial and error. 
* Setting this value larger will reduce the number of spaces added. 
* 
* @param spacingToleranceValue tolerance/scaling factor to use 
*/ 
public void setSpacingTolerance(float spacingToleranceValue) { 
    this.spacingTolerance = spacingToleranceValue; 
} 
Cuestiones relacionadas