Soy nuevo en pdfbox y quiero extraer un párrafo que coincida con algunas palabras en particular y puedo extraer todo el pdf a texto (bloc de notas) pero no tengo idea de cómo extraer un párrafo en particular para mi programa java. ¿Alguien puede ayudarme con este al menos algunos tutoriales o ejemplos. Gracias tantoPDFBox extracción de párrafos
Respuesta
El texto en documentos PDF está absolutamente posicionado. Así que en lugar de palabras , líneas y párrafos , sólo se ha posicionado absolutamente caracteres.
Digamos que usted tiene un párrafo:
Neque Porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velita
En términos generales, en el archivo PDF que estarán representados como personajes N
en alguna posición, e
un poco derecho a ella, q
, u
, e
más a la derecha, etc.
PDFBox intenta adivinar cómo los personajes hacen palabras, líneas y párrafos. Por lo tanto, buscará una gran cantidad de personajes en aproximadamente la misma posición vertical, para grupos de personajes que estén cerca entre sí y similares para tratar de encontrar lo que necesita. Lo hace extrayendo el texto de toda la página y luego procesándolo carácter por carácter para crear texto (también puede intentar extraer texto de solo un área rectangular dentro de una página). Consulte la clase correspondiente PDFTextStripper (o PDFTextStripperByArea). Para el uso, vea ExtractText.java
en fuentes PDFBox.
Eso significa que no puede extraer párrafos fácilmente utilizando PDFBox. También significa que PDFBox puede, y algunas veces se perderá, al extraer texto (hay muchos documentos PDF muy diferentes).
Lo que puede hacer es extraer el texto de la página entera y luego tratar de encontrar su párrafo buscando a través de ese texto. Regular expressions son generalmente adecuados para tales tareas (disponibles en Java a través de las clases y Matcher, o métodos de conveniencia en la clase String).
He detectado el comienzo del párrafo utilizando el siguiente enfoque. Lea la página línea por línea. Para cada línea: -
- Encuentra el último índice de '.' (punto) en la línea.
- Compare este índice con la longitud de la línea de entrada.
- Si el índice es menor, esto implica que este no es el final del párrafo anterior.
- Si es así, indica que el párrafo anterior ha finalizado y la siguiente línea será el comienzo del nuevo párrafo.
Espero que esto ayude.
Rompí el texto línea por línea y tenía requisitos adicionales, pero eso fue hace mucho tiempo, ¡gracias por la respuesta! – scc
Después de la extracción de texto, el párrafo puede ser construido teniendo en cuenta mediante programación siguientes puntos:
Todas las líneas se inicia con deben unirse con la línea anterior minúsculas. Pero una línea que comienza con mayúscula también puede requerir unirse a la línea anterior. por ejemplo: para expresión citada.
.,?,!," Terminando la línea con estos personajes puede ser el final del párrafo. No siempre.
Si mediante programación se determina un párrafo, a continuación, probar por un número par de comillas. Esto puede ser de doble comilla simple o doble apertura Unicode y las comillas de cierre.
Try this:
private static String getParagraphs(String filePath, int linecount) throws IOException {
ParagraphDetector paragraphDetector = new ParagraphDetector();
StringBuilder extracted = new StringBuilder();
LineIterator it = IOUtils.lineIterator(new BufferedReader(new FileReader(filePath)));
int i = 0;
String line;
for (int lineNumber = 0; it.hasNext(); lineNumber++) {
line = (String) it.next();
if (lineNumber == linecount) {
for (int j = 0; it.hasNext(); j++) {
extracted.append((String) it.next());
}
}
}
return paragraphDetector.SentenceSplitter(extracted.toString());
}
Qué clase de ** ParagraphDetector ** es esa. – mkl
Después de encontrar una palabra específica en el archivo, detecta desde el punto inicial de la palabra hasta el final del párrafo. –
No es parte de PDFBox ni en la API estándar de Java (¿o es una adición más reciente?). Por lo tanto, ¿de qué biblioteca es? – mkl
public static void main(String[] args) throws InvalidPasswordException, IOException {
File file = new File("File Path");
PDDocument document = PDDocument.load(file);
PDFTextStripper pdfStripper = new PDFTextStripper();
pdfStripper.setParagraphStart("/t");
pdfStripper.setSortByPosition(true);
for (String line: pdfStripper.getText(document).split(pdfStripper.getParagraphStart()))
{
System.out.println(line);
System.out.println("********************************************************************");
}
}
chicos intenta lo código de seguridad. Esto funciona con seguridad con PDFBox-2.0.8 Jar
PDFBox incluye algunas heurísticas para adivinar el comienzo y el final del párrafo. Si uno quiere recuperar un párrafo comienza y termina con una tasa de error pequeña, usar un código como ese de hecho es el camino a seguir. Pero recuerde, esos son solo heurísticos, entonces habrá errores de vez en cuando ... – mkl
Estoy de acuerdo contigo @mkl, es solo heurística. De hecho, estaba trabajando en el desarrollo de heurísticas avanzadas y técnicas ML para determinar encabezados, párrafos, tablas, pies de página, etc. (para nuestro propio PDFParser) pero para una solución de código abierto, la heurística PDFBox es la mejor – aavos
De hecho bastante impresionante. – mkl
- 1. Java - PDFBox - Extracción de texto
- 2. ¿Cómo puedo crear párrafos de ancho fijo con PDFbox?
- 3. Extracción de texto R - Combinación de párrafos uno después de otro sin oraciones que mezclan
- 4. región PDFBox PDFTextStripperByArea coordina
- 5. Marca de agua con PDFBox
- 6. ¿LucenePDFDocument ha desaparecido de pdfbox?
- 7. Jsoup - la extracción de texto
- 8. Eliminar párrafos "vacíos" con jQuery
- 9. Desactivar el registro en PDFBox
- 10. Agregar BufferedImage al documento PDFBox
- 11. Cómo compilar PDFBox para .Net
- 12. PDFBox A5 ajuste de tamaño de página
- 13. Raspado con BeautifulSoup y varios párrafos
- 14. Nida listas en párrafos en html
- 15. expresión regular python para dividir párrafos
- 16. Nokogiri encuentra texto en los párrafos
- 17. ¿PDFBox admite colores planos y separaciones?
- 18. PDFBox: trabajando con archivos PDF muy grandes.
- 19. Use PDFBox para completar un formulario PDF
- 20. Cómo firmar pdf en Java usando pdfbox
- 21. extraer imágenes del pdf usando pdfbox
- 22. Método de extracción de texto PDF mediante OCR
- 23. nodos Extracción de XDocument
- 24. extracción de texto Itextsharp
- 25. subvistas Extracción de UIScrollView
- 26. Extracción de palabras completas
- 27. Mejora del rendimiento de OCR en escaneos de varios párrafos
- 28. ¿No hay sangría para los párrafos después de las cifras?
- 29. eliminar ciertas palabras de los párrafos usando jQuery
- 30. Extraer párrafos de API Wikipedia usando PHP cURL
Muchas gracias. Así que no puedo usar pdfbox para extraer un párrafo, en su lugar necesito usar el archivo de texto generado para extraer el párrafo usando la coincidencia de patrones. Gracias por la información. – scc