Herramienta de búsqueda de patrones de texto o biblioteca para documentos MS Word y PDF

Estoy buscando una herramienta que pueda identificar un cierto patrón dentro del texto de un documento de Microsoft Word (.doc) o un documento PDF.

Por patrón quiero decir, por ejemplo, "todos los párrafos que comiencen con xxx y terminen con zzz".

Necesito poder recopilar estos datos de dos documentos y compararlos entre sí y generar una hoja de Excel con las diferencias.

¿Hay alguna herramienta que pueda ayudarme con eso? preferentemente de código abierto. Lo usaré en Windows y tiene que ser FOSS y, si no está disponible, una biblioteca (con una interfaz C/C++) estaría bien.

Entonces, en realidad no está buscando un analizador de archivos DOC o PDF, está buscando una herramienta de búsqueda/recorrido de texto. Además, marcó esta pregunta con C y C++, pero parece que no está buscando el código fuente en C o C++... ¿verdad?
si hay un software listo que pueda hacer eso, por favor dígamelo; si no, una biblioteca que pueda usar con algún código C/C++ es mi única opción. Si tiene alguna otra idea, dígamela.

Respuestas (2)

Para documentos de MS-Word, use LibreOffice en la línea de comandos. Funcionará con archivos .doc y .docx, así como con otros formatos (tal vez incluso con archivos PDF, no estoy seguro). Extrae el texto así:

libreoffice --headless --cat my_file.doc

Y ahora puede introducir eso en una utilidad de búsqueda de texto o en su propio código. En un sistema Unix-ish, o usando Cygwin en Windows, lo haría de esta manera:

libreoffice --headless --cat my_file.doc | grep "some_search_term"

Para documentos PDF, puede utilizar la pdftotextutilidad:

pdftotext my_document.pdf - | grep "my_search_term"

Aquí hay una página de descarga de binarios o código fuente; y muchas distribuciones de Linux lo empaquetan (aunque el nombre puede diferir).

Puede combinar la salida de texto de Libre Office como entrada al motor Apache Lucene. Esto indexará automáticamente el texto y le brindará una amplia gama de capacidades de búsqueda. Es de código abierto.
@PaulJowett: +1 en el comentario, pero recuerde que OP solo solicitó una búsqueda de patrón de texto, por lo que Lucene suena como una exageración.
acordado. Interpreté "todos los párrafos que comienzan con xxx y terminan con zzz" como un indicador razonable de que los requisitos de búsqueda se volverían no triviales y tal vez difíciles de grep.

Con una curva de aprendizaje bastante superficial, puede hacer todo esto en Python con un par de bibliotecas:

  • Para extraer el texto de formatos recientes de MS-Word (.docx), deberá instalar python-docx
  • Para extraer el texto de los archivos .doc más antiguos, deberá tener instalado LibreOffice o MS-Word para convertir formatos (que se pueden automatizar).
  • Para extraer el texto de los archivos pdf, no es un esfuerzo garantizado , puede instalar uno de: pdfminer o PyPDF2
  • Para crear un archivo para Excel, lo más simple es usar la biblioteca csv incorporada, pero también hay escritores .xlsx como xlwt y muchos otros.

El proceso será:

  1. Lea un archivo de entrada y divídalo en párrafos.
  2. Utilice los métodos de cadena starswith y closureswith o la biblioteca de expresiones regulares re estándar para obtener una lista de los párrafos que coincidan con sus criterios.
  3. Haz lo mismo con el otro documento.
  4. Genere una lista que consista en aquellos que son diferentes entre las dos listas.
  5. Escríbalo en el archivo de salida.

Características de esta solución:

  • Completamente FOSS (aparte de Word y Excel, pero no es necesario que los tenga)
  • Windows (y la mayoría de las otras plataformas)
  • Tendrás que hacer un poco de trabajo
  • No se requiere C/C++ de su parte
+1, pero como OP no indicó que conoce Python, será más que un poco de trabajo. Sin embargo, me pregunto si no debería hacer de esto una respuesta a una pregunta separada.
Lo intentaré y te actualizaré con el resultado, gracias.