top of page

Python na Veia: Domine Dados Caóticos com Facilidade, documentos (.docx,doc e odt) Parte 1-2

  • Foto do escritor: Roger Sampaio
    Roger Sampaio
  • 10 de mai.
  • 7 min de leitura

Olá meus guerreiros. Uma fonte de dados bastante rica e utilizada são os documentos de texto, os quais podem ser facilmente abertos em aplicativos Microsoft Word ou Libre Office. Entre alguns exemplos de documentos podemos ter: trabalhos escolares ou universitários, resumos de algum tema, currículos, relatórios corporativos, ata de reunião entre outros. Dependendo do propósito da construção da solução de inteligência artificial, eles podem ser bastante valiosos e torna-se necessária a extração e manipulação de texto deles. Exemplo: construção de um aplicativo que traduza dissertações entre idiomas. E agora, meu guerreiro, o que faremos? A boa notícia é que a famosa linguagem de programação Python, bastante conhecida pela versatilidade, conta também com bibliotecas para essa situação. Prepara-se, aperte os cintos porque viajaremos juntos.

The Simpsons
The Simpsons


  1. Explorando ferramentas

As extensões mais famosas de documentos textos são doc, docx e odt, as duas primeiras reconhecidas pelo Microsoft Word e a última usada pelo Libre Office. Algumas bibliotecas Python disponíveis na comunidade do pip para manipular esses documentos são: 1. python-docx, 2. textract, 3.odtpy. Com esse artigo focaremos principalmente na etapa de extração, especificamente textos; uma vez extraídos podemos expandir as funcionalidades da solução como, por exemplo, geração de relatórios, treinar algum modelo LLM. Os documentos textuais são enquadrados na categoria dados semiestruturados, ou seja, possuem alguma organização interna (títulos, parágrafos, tabelas, ...), porém não seguem um esquema rígido e padronizado como os bancos de dados relacionais. A manipulação desses dados torna mais desafiadora comparado com os dados estruturados, consequentemente a escolha de uma boa ferramenta de extração faz toda a diferença.

Guerreiro, trabalharemos com três documentos no decorrer do artigo. O primeiro é um resumo explicativo sobre Inteligência Artificial, está na extensão docx. O segundo trata-se de uma receita de estrogonofe de carne e está no formato .doc. Por fim o último é um trabalho acadêmico sobre tuberculose e está na extensão odt. Para cada tipo de documento exploraremos uma biblioteca diferente conforme mencionado acima, a intenção é mostras as muitas possibilidades de executar a tarefa. Visualizando brevemente os documentos, temos:

Documento 1 - Resumo sobre Inteligência Artificial
Documento 1 - Resumo sobre Inteligência Artificial
Documento 2 - Receita de Estrogonofe de Carne
Documento 2 - Receita de Estrogonofe de Carne
Documento 3 - Trabalho Acadêmica sobre Tuberculose
Documento 3 - Trabalho Acadêmica sobre Tuberculose

A estrutura dos documentos variam, sendo alguns puramente textuais, outros contendo imagens, tabelas, o que aumenta exponencialmente o desafio da extração e propositalmente simulamos o mundo real. Utilizaremos o ambiente do Microsoft Azure Machine Learning, um serviço do Azure que contempla todo o marcenal de recursos, ferramentas para desenvolvimento de projetos de Ciência de Dados incluindo: criação de cluster de computação ou máquinas virtuais únicas, execução de experimentos, utilização de jupyters notebooks seja na linguagem R ou Python. É obrigatório ter uma conta ativa no Azure, caso ainda não possua, crie utilizando o portal da Microsoft. Após a conta estar ativa, acesse o portal inicial do Azure. Crie o ambiente seguindo o passo 2 descrito em detalhes nesse artigo, exceto o tópico ''Subindo os arquivos de notebook e bases''. O git da aula está aqui.


3. Lendo e escrevendo nos documentos

Inicialmente vamos alterar o Kernel para AzureML, que tem uma série de pacotes úteis para Machine Learning e facilita a instalação de pacotes adicionais.

Figura 1 - Definição do Kernel
Figura 1 - Definição do Kernel

Agora devemos instalar as três bibliotecas. Para isso, basta executar o comando pip install <nome_pacote>. Mostraremos também a versão que está sendo instalada no momento que esse artigo é escrito, constantemente são realizados upgrades em pacotes do pip. Posteriormente a instalação devemos importar os pacotes para a utilização.


Figura 2 - Instalando pacotes
Figura 2 - Instalando pacotes

Há diversas maneiras de mostrar as versões dos pacotes: utilizando o pip show <nome_pacote> ou então importlib.metadata. O primeiro comando é utilizado dentro do terminal e mostra diversas informações sobre o pacote tais como nome, versão, resumo, autor. O segundo, introduzido a partir do Python 3.8, serve para mostrar também os metadados de um pacote como, por exemplo, a versão, porém é usado dentro do script Python. Quando quiser executar um comando de terminal dentro de uma célula no notebook basta utilizar a exclamação seguido do comando !<algum_comando>.

Figura 3 - Listando as versões dos pacotes usando pip show
Figura 3 - Listando as versões dos pacotes usando pip show
Figura 4 - Listando as versões dos pacotes usando importlib.metadata
Figura 4 - Listando as versões dos pacotes usando importlib.metadata

Observe acima as versões usadas em cada um dos pacotes. Agora criaremos uma pasta chamada "bases" e faremos upload dos três documentos de exemplos: 1. artigo, 2. receita e 3. trabalho acadêmico. Explore as opções "Criar pasta" e "Carregar arquivos".

Figura 4 - Fazendo Upload dos Arquivos
Figura 4 - Fazendo Upload dos Arquivos

Guerreiro, vamos ler o primeiro documento (o artigo) através da biblioteca do python-docx. Essa biblioteca suporta somente o formato docx, diferente da biblioteca textract que suporta doc, docx incluindo pdf. Perceba que criamos um objeto do tipo Document, o qual especificamos o caminho para o arquivo docx. Uma vez o arquivo carregado na memória através do objeto Document, podemos iniciar a manipulação como, por exemplo, ler e exibir todos os parágrafos através do atributo paragraphs. Perceba que os parágrafos exibidos correspondem aos listados nos documentos.

Figura 5 - Lendo o arquivo usando python-docx
Figura 5 - Lendo o arquivo usando python-docx

Uma boa prática em construção de aplicativos é o tratamento de erros e exceções que podem ocorrer em tempo de execução. O instanciamento do objeto Document pode falhar por diversos motivos como, por exemplo, caso o caminho do arquivo esteja inválido, lançará um exceção do tipo 'FileNot Found(Arquivo Não Encontrado)'. Construiremos uma lógica para lidar com a situação de maneira que somente processará o arquivo caso não ocorra erros. Embora estejamos essa lógica de leitura de arquivo em uma célula do notebook, é recomendável criar uma função generalista, que abrirá um arquivo de documento,

The Simpsons 2
The Simpsons 2

Figura 6 - Lendo o arquivo usando python-docx com tratamentos de exceções
Figura 6 - Lendo o arquivo usando python-docx com tratamentos de exceções

Guerreiro, almejo que realmente você aprenda e não apenas ficar reutilizando e decorando os códigos no decorrer do artigo. Meu propósito é transmitir um bom conhecimento para que você caminhe com suas próprias pernas. Embora no decorrer do artigo, exploraremos as funcionalidades mas utilizadas das bibliotecas, não se restrinja somente a elas. Decorar não costuma ser proveitoso, uma vez que elas podem mudar a cada versão lançada e são muitas opções de customização. Escreva na parede do seu quarto e leia todos os dias: a documentação é nossa amiga. Engana-se quem pensa que um programador sabe especificamente o nome de todas as funcionalidades das bibliotecas, ao contrário, ele sabe como utilizar quando necessário. Caso queira conhecer mais detalhes de um objeto em específico pode utilizar a função help. Ela mostrará todas os atributos, métodos, parâmetros disponíveis para uso fornecendo inclusive exemplos.

Figura 7 - Explorando a função help
Figura 7 - Explorando a função help

Podemos pesquisar no próprio site do pip a biblioteca. Interprete a documentação como uma espécie de manual e as bibliotecas sendo ferramentas.

Figura 8 - Explorando a biblioteca pelo pip
Figura 8 - Explorando a biblioteca pelo pip
Figura 9 - Explorando a documentação oficial
Figura 9 - Explorando a documentação oficial

Caso queiramos adicionar parágrafos no documento aberto, basta usar o método add_paragraph(<texto>), especificando o texto. O parágrafo será adicionado ao final do documento, porém é possível alterar esse comportamento, relatando exatamente o ponto e a localização no documento. Contabilizaremos a quantidade de parágrafos antes e após a adição desse último parágrafo e por fim mostramos o último parágrafo.

Figura 10 - Adicionando parágrafos
Figura 10 - Adicionando parágrafos
The Simpsons 3
The Simpsons 3

Uma opção comum é a adição de imagens no documento, o que facilmente pode ser realizado através do método add_picture(<caminho_imagem>). Antes de acrescentar ao documento, visualizaremos brevemente a imagem. A imagem será acrescentada ao final no documento. Há opções de customização como, por exemplo, definição de largura, altura na chamada da função caso queira utilizar. Salvaremos como um novo documento chamado o_que_ia_2.

Figura 11 - Visualizando imagens
Figura 11 - Visualizando imagens
Figura 12 - Salvando a imagem em um novo documento
Figura 12 - Salvando a imagem em um novo documento

Efetuando download do arquivo novo, percebemos que a imagem foi acrescentada ao final do documento. Para adicionar tabelas ao documento podemos utilizar o método add_tables( ). Guerreiro, programa em Python é como escrever uma carta em inglês ao computador, observe que o nome do próprio método é bem sugestivo ao que ele se propõe a fazer. Antes de acrescentar a tabela, verificaremos se existem tabelas através do atributo doc.tables. Caso não exista uma mensagem informativa é retornado, caso contrário exibe cada tabela.

Figura 13 - Visualizando tabelas no documento
Figura 13 - Visualizando tabelas no documento

Importante ressaltar que o acréscimo de elementos na tabela é matricial, ou seja, no método tabela.cell(i,j) devemos especificar sempre a linha(elemento i) e coluna (elemento j). Devemos obrigatoriamente criar o formato, estrutura da tabela especificando a quantidade de linhas e colunas para depois inserir os valores. Para fins experimentais, inseriremos um texto simples.

Figura 14 - Inserindo tabelas
Figura 14 - Inserindo tabelas
Figura 15 - Visualizando tabelas
Figura 15 - Visualizando tabelas

Salvando o documento, notaremos a presença dos três últimos elementos adicionados: o parágrafo, a imagem e por fim a tabela.

Figura 16 - Salvando o documento
Figura 16 - Salvando o documento

Figura 17 - Visualizando os elementos adicionados
Figura 17 - Visualizando os elementos adicionados

Uma maneira mais simples de criar tabelas é através de dataframes, ou seja, criamos o dataframe e posteriormente convertemos para o objeto do tipo tabela (Table). Para os dataframes, há métodos mais simples, que não requerem a manipulação direta de índices de linhas e colunas como acontece em matrizes. Criaremos um dataframe que explicará alguns conceitos de Inteligência Artificial. O dataframe terá duas colunas: termo, significado. Inseriremos alguns exemplos.


Figura 17 - Criação de um dataframe que será a nossa tabela
Figura 17 - Criação de um dataframe que será a nossa tabela
Figura 18 - Criação de uma tabela a partir do dataframe
Figura 18 - Criação de uma tabela a partir do dataframe
Figura 19 - Salvando a tabela nova
Figura 19 - Salvando a tabela nova

Veja que após o salvamento do arquivo, a nova tabela aparece.

Figura 21 - Visualização no documento da tabela adicionada
Figura 21 - Visualização no documento da tabela adicionada
  1. E no Final das Contas ...

Guerreiro, para o artigo não fica oneroso e grande, continuaremos em outro post. O Python é como uma verdadeiro canivete suíço com mil e uma utilidades incluindo a manipulação de documentos textuais nos mais variados formatos. A biblioteca python-docx é poderosa para lidar com arquivos no formato docx, versão dos arquivos desde Microsoft Office Word 2007, possuindo uma série de métodos uteis para acrescentar parágrafos, tabelas, imagens, efetuar a leitura, salvar entre outros. Exploraremos o documento de conceitos da 'Inteligência Artificial' acrescentando uma imagem robótica e uma tabela de termos associados. Muito bom compartilhar conhecimento com vocês.



  1. Limpa, limpa, limpa ...


Para evitar surpresa no cartão de crédito, excluiremos os recursos utilizado no Azure. Primeiramente interromperemos a instância de computação.

Figura 22 - Interrompendo a Instância de Computação
Figura 22 - Interrompendo a Instância de Computação

Navegue até o portal inicial do Azure e clique em "Todos os Recursos".

Figura 23 - Portal do Azure
Figura 23 - Portal do Azure

Selecione todos os recursos e posteriormente o botão Excluir. A exclusão poderá demorar em torno entre um a cinco minutos. Pronto.

Figura 24 - Exclusão de Recursos
Figura 24 - Exclusão de Recursos

Comments


bottom of page