Segundo o próprio site oficial do NLTK (www.nltk.org), em livre tradução:
NLTK é uma plataforma líder para construir programas em Python para trabalhar com dados de linguagem humana. Esta plataforma oferece recursos fáceis de usar para processamento de textos em tarefas de classificação, "tokenização", "stemming", "tagging", "parsing" e compreensão semântica.Instalando o Pacote
A ferramenta NLTK está disponível gratuitamente para download no site www.nltk.org/install.html. Após instalado o pacote básico (seguindo as instruções apresentadas no site), é necessário instalar o conjunto de dados que dá suporte a esta ferramenta, disponível no link www.nltk.org/data.html. Após instalados esses dois módulos, a ferramenta poderá ser utilizada.
Tokenização
Paralelamente às técnicas de pré-processamento que vimos nos posts anteriores, vamos aprender aqui o conceito de "tokenização". Na prática, significa a divisão do texto em partes menores segundo algum critério objetivo. Já fizemos isso anteriormente quando dividimos o texto em diversas palavras. Mas vamos voltar um pouco no tempo neste caso. Antes de dividir o texto em palavras, podemos olhar de forma um pouco mais abrangente quais são as partes de um texto.
Um texto simples pode ser estruturado em parágrafos e frases. Parágrafos e frases podem apresentar ideias distintas e são utilizados para estruturar os assuntos que são abordados no texto. Desta forma, fazer análises de texto considerando esta separação parece ser coerente.
No exemplo a seguir, utilizamos o pacote NLTK para separar o conteúdo de um texto bem simples em frases. O resultado é uma lista (array) de frases:
# coding=utf-8
# Importação das Bibliotecas
from nltk.tokenize import sent_tokenize
texto = 'Este é um texto simples. Este é o pacote NLTK.'
print sent_tokenize(texto)
Veremos que este processo é importante quando escolhermos as métricas de relevância para os termos. Antecipando um pouco, um termo que aparece com muita frequência em muitos documentos (neste caso, frases), pode não ser tão relevante assim. Desta forma, separar em frases pode nos ajudar a identificar quais palavras realmente importam nos conjuntos de textos.
Uma vez separadas as frases, podemos novamente separar as palavras, mas desta vez utilizando a biblioteca NLTK. Após isso, podemos fazer o filtro das stopwords que prometi nos posts anteriores com um comando bem simples e utilizando uma biblioteca de stopwords em português existente na própria biblioteca NLTK:
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
print word_tokenize(texto)
filtrado = [w for w in word_tokenize(texto) if not w in stopwords.words('portuguese')]
print filtrado
Aliado às técnicas de remoção de acentos, caracteres especiais, tabulações e quebras de linhas vistas nos posts anteriores, estamos quase finalizando o pré-processamento básico de textos. Mas ainda temos uma etapa importante: stemming.Stemming
Não consegui encontrar uma palavra boa para traduzir este termo, mas o processo de stemming consiste em se remover os plurais, gêneros e flexões verbiais das palavras, sobrando apenas o radical, que contém o sentido em si da palavra. Continuando nosso programa:
import nltk
stemmer = nltk.stem.RSLPStemmer()
filt_stem = []
for i in filtrado:
filt_stem.append(stemmer.stem(i))
print filt_stem
Por fim, podemos aplicar ao nosso texto exemplo dos posts anteriores (texto_longo) e observar a frequência dos termos, agora utilizando o NLTK:
fdist = nltk.FreqDist(filt_stem)
for i in fdist:
print i + ': ' + str(fdist[i])
No próximo post veremos um pouco de teoria sobre as diferentes medidas de relevância de textos e uma parte prática sobre como calculá-las utilizando a biblioteca NLTK.
Obrigado!
Danilo, o post ficou excelente! Hoje mesmo coloquei em prática todo o fluxo. Parabéns!
ResponderExcluirOpa, que bom que foi util! Um abraco!
ResponderExcluirOlá, Danilo! Obrigada por compartilhar!
ResponderExcluirGostaria de perguntar se existe a possibilidade de importar um csv de dados (que na verdade são comentários oriundos do facebook) e com a biblioteca NLTK filtrar palavras chaves e contar sua frequência no texto.
Obrigada!
Este comentário foi removido pelo autor.
ResponderExcluirDanilo o post foi de grande ajuda, obrigado!
ResponderExcluir