Практическое руководство по импорту неструктурированных данных текста / изображений

Будучи частью команды специалистов по обработке и анализу данных, вы, вероятно, столкнетесь со многими типами файлов для импорта и анализа в Python. В идеальном мире все наши данные находятся в облачных базах данных (например, SQL, NoSQL), которые легко запрашивать и извлекать. Однако в реальном мире мы редко получаем аккуратные табличные данные. Кроме того, если нам нужны дополнительные данные (структурированные или неструктурированные) для расширения анализа, мы неизбежно будем работать с файлами необработанных данных, которые бывают разных форматов.

Недавно моя команда начала проект, который в качестве первого шага включает интеграцию файлов необработанных данных в форматах .csv, .xlsx, .pdf, .docx, и .doc . Моя первая реакция: могучие панды! который, безусловно, обрабатывает .csv и .xlsx, но что касается .pdf и .docx, у нас будет чтобы изучить возможности, выходящие за рамки панд.

В этом блоге я поделюсь своими советами и приемами, которые помогут вам легко импортировать документы PDF и Word (в Python) на тот случай, если они возникнут в вашей собственной работе, особенно в ваших проектах обработки естественного языка NLP. Все образцы файлов данных общедоступны, а копии файлов вместе с соответствующими ссылками для скачивания доступны в моем репозитории Github.

  1. Python-docx → работать с файлами MS Word .docx

Как один из наиболее часто используемых инструментов документации, MS Word часто является лучшим выбором для написания и публикации текста. Для документов Word с расширением. docx удобно использовать модуль Python docx, а ниже показано, как импортировать .docx абзацы всего с двумя строками кода,

Теперь давайте распечатаем выходную информацию,

Как мы видим, возвращаемый результат представляет собой список строк / предложений, и поэтому мы можем использовать методы обработки строк и регулярное выражение, чтобы подготовить текстовые данные для дальнейшего анализа (например, НЛП).

2. Win32com → работа с файлами MS Word .doc

Несмотря на простоту использования, модуль python-docx не может принимать устаревшее расширение .doc, и хотите верьте, хотите нет, файл .doc по-прежнему является основным текстовым процессором для многих заинтересованных сторон (несмотря на то, что .docx существует уже более десяти лет). Если в этом случае преобразование типов файлов невозможно, мы можем обратиться к пакету win32com.client . с парой уловок.

Базовый метод - сначала запустить приложение Word как активный документ, а затем прочитать содержимое / абзацы в Python. Функция docReader (), определенная ниже, демонстрирует, как (и полностью запрограммированный фрагмент кода связан здесь),

После запуска этой функции мы должны увидеть тот же результат, что и в разделе 1. Два совета: (1) мы устанавливаем word.Visible = False, чтобы скрыть физический файл, чтобы вся обработка выполняется в фоновом режиме; (2) аргумент doc_file_name требует полного пути к файлу, а не только имени файла. В противном случае функция Documents.Open () не распознала бы файл, даже если в качестве рабочего каталога выбрана текущая папка.

Теперь перейдем к файлам PDF.

3. Pdfminer (вместо PyPDF2) → работа с текстом PDF

Когда дело доходит до обработки файлов PDF в Python, хорошо известный модуль PyPDF2, вероятно, станет первой попыткой большинства аналитиков, включая меня. Следовательно, я закодировал его с помощью PyPDF2 (полный код доступен в моем репозитории Github), который дал текстовый вывод, как показано ниже,

Хммм, очевидно, это не кажется правильным, потому что все пробелы отсутствуют! Без соответствующих пробелов мы не сможем правильно проанализировать строки.

В самом деле, этот пример демонстрирует одно предостережение относительно функции extractText () в PyPDF2: она не работает с PDF-файлами, содержащими сложный текст или непечатаемые пробелы. Поэтому давайте переключимся на pdfminer и узнаем, как импортировать этот PDF-текст,

Теперь результат выглядит лучше, и его можно легко очистить с помощью методов интеллектуального анализа текста,

4. Pdf2image + Pytesseract → работа с отсканированными изображениями PDF

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

В этом случае лучший метод, который я нашел, - это сначала явно извлечь изображения, а затем прочитать и проанализировать эти изображения в Python. Мы реализуем эту идею с помощью модулей pdf2image и pytesseract. Если последнее звучит незнакомо, pytesseract - это инструмент оптического распознавания символов OCR для Python, который может распознавать и читать текст, встроенный в изображения. . А теперь основная функция:

На выходе вы должны увидеть текст отсканированного изображения, показанный ниже:

PREFACE   In 1939 the Yorkshire Parish Register Society, of which the Parish Register Section of the Yorkshire Archaeological Society is the successor (the publications having been issued in numerical sequence without any break) published as its Volume No. 108 the entries in the Register of Wensley Parish Church from 1538 to 1700 inclusive. These entries comprised the first 110 pages (and a few lines of p. 111) of the oldest register at Wensley.

Миссия выполнена! В качестве бонуса теперь вы знаете, как извлекать данные из изображений, то есть с помощью image_to_string () в модуле pytesseract!

Примечание. для успешного запуска модуля pytesseract может потребоваться выполнить дополнительные действия по настройке, включая установку poppler и tesseract. Опять же, не стесняйтесь брать более надежную реализацию и подробный список конфигураций в моем Github здесь.

В заключение Грег Хортон упомянул анекдот в области науки о данных в своей статье о правиле 80–20 в борьбе с данными:

Специалисты по обработке данных тратят 80% своего времени на решение проблем с подготовкой данных, а остальные 20% жалуются на то, сколько времени требуется на решение проблем с подготовкой данных.

Пройдя через различные способы очистки текста из файлов Word и PDF, я надеюсь, что этот блог сделает ваши 80% немного проще / менее скучными, чтобы вы не рвали волосы, а также уменьшит остальные 20%, чтобы вы можете проводить больше времени за чтением интересных статей на Medium.

Последний совет. После завершения работы с файлом рекомендуется всегда закрывать соединение, чтобы другие приложения могли получить доступ к файлу. Вот почему вы видели метод close() в конце каждой функции выше. 😃

Понравился этот блог? Вот еще один блог по науке о данных, который вам может понравиться: