Processamento de Linguagem Natural com Python – Por onde começar?

Processamento de Linguagem Natural com Python – Por onde começar?

Por Caio Fernando Gonçalves Francisco e Ricardo Augusto Fernandes Junior

A área de Processamento de Linguagem Natural (PLN) tem se tornado bastante presente atualmente, sendo voltada para a compreensão e geração automática de alguma língua natural. Esta área tem sido aplicada na análise de opinião de consumidores, na criação de chatbots, na tradução e interpretação de textos, além de diversas outras situações. O principal objetivo desta matéria é apresentar algumas ferramentas em Python que podem servir de referência para as pessoas que buscam entrar nessa área de alguma forma.

Estrutura de Dados em Python

Apesar de ser evidente que é necessário saber Python para usá-lo em PLN, é válido revisar alguns conceitos antes de apresentar as ferramentas. O objetivo aqui é referir-se a estruturas de dados, em especial listas (list), tuplas (tuple), dicionários (dict) e conjuntos (set). Saber quando e como utilizar essas estruturas ajuda muito na criação de uma aplicação voltada para análise de dados. Exemplo: Tuplas são imutáveis (não podem sofrer modificações) mas são muito rápidas de acessar e criar, tornando-as úteis para armazenar dados fixos.

Alguns conceitos especiais de cada estrutura permitem economizar várias linhas de código, como quando se quer criar uma lista simples. No exemplo a seguir, uma lista com os 10 primeiros números pares após o 0 é criada:

>>> pares = [ ]

>>> for x in range(10):

 . . .        pares.append( x * 2 )

>>> pares

[ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 ]

Essa lista poderia ser facilmente feita numa lista comprimida, e ficaria da seguinte forma:

>>> pares = [ x * 2 for x in range(10) ]

>>> pares

[ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 ]

Mais informações a respeito podem ser encontradas na documentação oficial de Python, disponível tanto na versão em inglês como em português.

A biblioteca Pandas

Uma forma de manipular dados de maneira mais visual e simples, com mais recursos disponíveis para essa manipulação, é utilizando a poderosa biblioteca Pandas. Com este recurso em Python, facilita-se o acesso à várias formas de análise e estruturação de dados.

Com ela, é possível definir um DataFrame (uma estrutura de dados que representa o comportamento de uma tabela), fazer uma querry (pesquisa) selecionando os dados que atendam as condições que você precisar, limpar dados sujos, nulos, ou que apresentem algum comportamento que atrapalhem a sua análise, utilizar métodos simples voltados para descrever o comportamento de algum dos seus dados (como por exemplo plotar um histograma de uma coluna específica), dentre diversas outras funções. O exemplo a seguir mostra a criação e exibição de um DataFrame.

>>> import pandas as pd

>>> df = pd.DataFrame({‘Aluno’ : [“Wilfred”, “Abbie”, “Harry”, “Julia”, “Carrie”],

 . . .         ‘Faltas’ : [3,4,2,1,4],

 . . .        ‘Prova’ : [2,7,5,10,6],

 . . .        ‘Seminário’: [8.5,7.5,9.0,7.5,8.0]})

>>> df


Tabela criada pelo DataFrame

A documentação do Pandas está disponível em inglês, e possui todas as informações necessárias para quem deseja se aprofundar, mas também recomendamos um tutorial em português, escrito por Vinícius Figueiredo, no blog Data Hackers, com exemplos e tópicos que ensinam diversas funcionalidades disponíveis na biblioteca (o exemplo de DataFrame foi retirado deste tutorial), além de outras ferramentas em Python voltadas para a visualização de dados.

A biblioteca NLTK

Falando especificamente sobre processamento de linguagem natural, há uma ferramenta com diversos recursos voltados especificamente para isso, que é a biblioteca NLTK (Natural Language Toolkit, que em português significa Kit de Ferramentas de Linguagem Natural). Dentre os diversos recursos oferecidos, vale citar inicialmente as funções de tokenização e radicalização. Ambas as técnicas são muito importantes para o processamento de textos, e consistem respectivamente em: dividir um texto em uma lista de palavras (algo que nem sempre se resume a apenas separá-los pelo espaço em branco); e reduzir uma palavra ao seu radical (mais explicado depois do exemplo abaixo). O seguinte código mostra um simples processo de tokenização, seguido de uma radicalização.

>>> import nltk

>>> tokenizador = nltk.WhitespaceTokenizer()

>>> radicalizador = nltk.RSLPStemmer()

>>> frase = “Amamos muito comer cuscuz todo dia”

>>> frase_tokenizada = tokenizador.tokenize(frase)

>>> palavras_radicalizadas = [ ]

>>> for palavra in frase_tokenizada:

 . . .        palavra_radicalizada = radicalizador.stem(palavra)

 . . .        palavras_radicalizadas.append(palavra_radicalizada)

>>> palavras_radicalizadas

[ ‘am’,  ‘muit’, ‘com’, ‘cuscuz’, ‘tod’, ‘dia’ ]

Ao reduzir uma palavra a um radical, a dimensão do léxico analisado pelo programa também é reduzida. Em termos mais simples, fazer o programa entender palavras como “amamos” e “amaremos” como “am”, tende a facilitar e até mesmo melhorar a análise de textos feita pelo computador (algo também conhecido como uma forma de “normalizar” textos). No exemplo, foi utilizado um tokenizador simples que apenas separa pelos espaços em branco, mas outros e muitas outras ferramentas de PLN podem ser encontrados na documentação oficial da biblioteca. Exemplos voltados para a análise de textos em português também podem ser encontrados no mesmo site, apresentados na página.

Considerações Finais

O conteúdo aqui exposto consiste numa boa base por onde começar na área de PLN e de Análise de Dados, contudo, existem diversas outras ferramentas em Python que valem a pena explorar, seja para PLN ou para a área de IA no geral. Por fim, deixamos como recomendação duas bibliotecas consideradas importantes para os que desejam se aplicar ainda mais na área.

  • SKlearn (scikit-learn), uma biblioteca voltada para o aprendizado de máquina, com diversos classificadores e outras técnicas de inteligência artificial.
  • Gensim, uma biblioteca voltada também para o processamento de linguagem natural, muito usada para incrementar significados semânticos nas análises de textos.

Fonte do banner: https://www.datageeks.com.br/processamento-de-linguagem-natural/