Инструмент поиска текстового шаблона или библиотека для документов MS Word и PDF

Я ищу инструмент, который может идентифицировать определенный шаблон в тексте документа Microsoft Word (.doc) или документа PDF.

Под шаблоном я подразумеваю, например, «все абзацы, начинающиеся с ххх и заканчивающиеся на ззз».

Мне нужно иметь возможность собирать эти данные из двух документов, сравнивать их вместе и создавать таблицу Excel с различиями.

Есть ли инструменты, которые могут помочь мне в этом? желательно с открытым исходным кодом. Я буду использовать его в Windows, и он должен быть FOSS, и если он недоступен, библиотека (с интерфейсом C/C++) была бы неплохой.

Таким образом, на самом деле вам не нужен синтаксический анализатор файлов DOC или PDF, вы ищете инструмент для обхода/поиска текста. Кроме того, вы отметили этот вопрос как C и C++, но, похоже, вы не ищете исходный код на C или C++... не так ли?
если есть готовое программное обеспечение, которое может это сделать, сообщите мне об этом, если нет, то библиотека, которую я могу использовать с некоторым кодом C/C++, является моим единственным вариантом, если у вас есть другие идеи, пожалуйста, сообщите мне

Ответы (2)

Для документов MS-Word используйте LibreOffice в командной строке. Он будет работать с файлами .doc и .docx, а также с другими форматами (может быть, даже с PDF, не уверен). Извлеките текст следующим образом:

libreoffice --headless --cat my_file.doc

И теперь вы можете просто передать это в утилиту текстового поиска или в свой собственный код. В Unix-системе или с помощью Cygwin в Windows вы должны сделать это следующим образом:

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

Для PDF-документов можно использовать pdftotextутилиту:

pdftotext my_document.pdf - | grep "my_search_term"

Вот страница загрузки двоичных файлов или исходников; и многие дистрибутивы Linux упаковывают его (хотя название может отличаться).

Вы можете комбинировать вывод текста из Libre Office в качестве входных данных для механизма Apache Lucene. Это автоматически проиндексирует текст и предоставит вам широкий спектр возможностей поиска. Это с открытым исходным кодом.
@PaulJowett: +1 к комментарию, но помните, что OP просил только поиск по текстовому шаблону, поэтому Lucene звучит как излишество.
согласованный. Я интерпретировал «все абзацы, начинающиеся с xxx и заканчивающиеся на zzz», как разумный показатель того, что требования к поиску станут нетривиальными и, возможно, их будет трудно найти.

С довольно мелкой кривой обучения вы можете сделать все это на питоне с помощью нескольких библиотек:

  • Для извлечения текста из последних форматов MS-Word (.docx) вам необходимо установить python-docx
  • Для извлечения текста из старых файлов .doc вам потребуется установить LibreOffice или MS-Word для преобразования форматов (что может быть автоматизировано).
  • Для извлечения текста из pdf-файлов, что не гарантируется , вы можете установить один из: pdfminer или PyPDF2.
  • Для создания файла для Excel проще всего использовать встроенную библиотеку csv, но есть также средства записи .xlsx, такие как xlwt и многие другие.

Процесс будет:

  1. Прочитайте входной файл и разделите его на абзацы.
  2. Используйте строковые методы starswith и endwith или стандартную библиотеку регулярных выражений re, чтобы получить список абзацев, соответствующих вашим критериям.
  3. Проделайте то же самое с другим документом.
  4. Создайте список, состоящий из тех, которые отличаются между двумя списками.
  5. Запишите его в выходной файл.

Особенности этого решения:

  • Полностью FOSS (кроме Word и Excel, но они вам не нужны )
  • Windows (и большинство других платформ)
  • Вам придется немного поработать
  • С вашей стороны не требуется C/C++
+1, но, поскольку OP не указал, что он знает Python, это будет больше, чем небольшая работа. Интересно, не следует ли вам сделать это ответом на отдельный вопрос.
я попробую и сообщу вам о результате, спасибо