Как искать текст в документах разных форматов по ключевым словам, используя Python?

Построение отчётов на основании большого количества файлов – рядовая задача. Но всё становится сложнее, если вместо одного формата исходных файлов, мы получаем кучу файлов разного расширения.

Ранее я говорил о том, как скачивали файлы из базы и распознавать их, здесь я расскажу о том, как вытаскивать информацию (для анализа данных для спринта), по ключевым словам, или фразам из документов разных форматов (.rtf,. doc,. docx,. xls,. xlsx,. pdf). Вообще эту тему можно отнести к text mining, data mining. Text Mining — это если простыми словами, то добыча информации из текстов. Data Mining – это примерно то же самое что и ™ только не в тексте, а большом наборе данных для последующего анализа.

В этой задаче столкнулся с такой проблемой как отсутствие нормальных библиотек для Python для парсинга информации с файлов!

Так как файлы были разных форматов (.rtf,. doc,. docx,. xls,. xlsx,. pdf) и что бы открыть и прочитать информацию из них помощью Python нужно было найти подходящие библиотеки. В. pdf были сканы, и мы вопрос с ними уже решили (об этом я рассказывал в предыдущей статье). Для работы с форматами. xls,. xlsx есть отличная библиотека pandas, которая на ура справляется с поставленной целью и не только. Pandas это высокоуровневая Python библиотека для анализа данных. В экосистеме Python, pandas является лучшей и быстроразвивающейся библиотекой для обработки и анализа данных. Мне приходится пользоваться ею практически каждый день!

Осталось решить вопрос с. rtf,. doc,. docx.

.rtf

Rich Text Format, RTF — это формат текста придуманный группой программистов из Microsoft и Adobe в 82 году.

Для работы с этим форматом использовал разные библиотеки в том числе pyth.

#RTF import pandas as pd from pyth.plugins.rtf15.reader import Rtf15Reader from pyth.plugins.plaintext.writer import PlaintextWriter import re import glob #from pyth.plugins.xhtml.writer import XHTMLWriter

.doc

.doc — то же является текстовым форматом, но более лучшим чем предыдущий.

Для работы с ним использовал разные библиотеки, но также, как и с форматом. rtf проблема заключалась в том, что в документах были таблицы и нормально прочитать их не получалось никакой библиотекой (ни. rtf, ни. doc), просто текст читает без проблем если там нет таблиц (.rtf и. doc)!

В связи с этим. rtf и. doc просто приходилось конвертировать в формат. docx (про него ниже) и также сделал просто. exe-шник с помощью Python который конвертирует эти форматы в. docx.

import os import win32com.client for all_doc in files_doc: print(dir_name + '/' + all_doc + 'x') word = win32com.client.Dispatch('Word.Application') wb = word.Documents.Open(dir_name + '/' + all_doc) wb.SaveAs2(dir_name + '/' + all_doc + 'x', FileFormat=16) wb.Close()

.docx

Начиная с 2007 появился новый формат на основе XML — docx.

И так, с форматами. xls,. docx, проблем никаких не возникло. С помощью необходимых библиотек (docx, pandas, tkinter) работа с файлами, вытаскивание информации, по ключевым словам, или фразам была реализована! Сделан графический интерфейс (графический пользовательский интерфейс (ГПИ) (англ. graphical user interface, GUI)) также скомпилирована в. exe и добавлена инструкция.

import tkinter as tk from docx import Document from os import listdir from pandas import ExcelFile from pandas import DataFrame my_columns = df1.columns for col in my_columns: my_val_ind = df1[df1[col].astype(str).apply(lambda x: any(s in x for s in spis_to_find))].index # ищем вхождение ключевой фразы из списка spis_to_find (либо функц any) и берем индекс # print(my_val_ind) if len(my_val_ind ) > 0: # если индекс какой то был найден то тянем значения for ival in df1[df1.index == my_val_ind[0]].values: Data_xlsx.append(xlsx_name) key_conteins.append(ival)

Что получилось:

0
1 комментарий
Марат Тимурович

Не могу найти ссылку на статью где писали про разрозненнее pdf? 

Ответить
Развернуть ветку
-2 комментариев
Раскрывать всегда