Data

5 nov, 2018

Trabalhando com extração estatística de termos em textos

Publicidade

Uma forma bastante prática de realizar a extração de termos em textos, é utilizando a estatística. Esse tipo de abordagem baseia-se em modelos matemáticos e medidas estatísticas para cálculo e identificação dos termos a serem extraídos de um corpus.

Esta abordagem de extração é um campo de pesquisa em PLN que recebe atualmente muita atenção da comunidade científica, aproveitando-se do uso de algoritmos de machine learning e deep learning para evoluir os resultados finais.

Mas afinal, por que extrair termos de textos pode ser tão importante? Por inúmeras razões, mas principalmente porque a extração de termos é importante para que se tenha conhecimento sobre o conteúdo de um determinado corpus. Pode ser útil em ambientes jornalísticos, por exemplo, onde pretende-se categorizar notícias pelo conteúdo. Ou então, para construção de dicionários, ontologias ou tesauros.

Este artigo visa apresentar ao leitor uma ferramenta para realizar a extração estatística de termos em textos: o NSP, ou Ngram Statistics Package, capaz de identificar palavras ou caracteres Ngram em corpora. Essa ferramenta utiliza-se de uma matemática simples e expressões regulares para identificar tokens de texto, que são conjuntos de caracteres alfanuméricos.

Dessa forma, o usuário pode definir uma expressão regular padrão para fazer a busca, ou então, não informar e deixar que o NSP busque por uma sequencia contínua de caracteres alfanuméricos ou símbolos de pontuação. Um exemplo de token encontrado pela ferramenta pode ser: O<>rato<>roeu<>o<>queijo, resultado da sentença “O rato roeu o queijo.”.

O NSP consiste em dois principais programas: o primeiro, count.pl, considera como entrada um conjunto de arquivos de texto, e gera uma lista de todos os Ngram que ocorrem naqueles arquivos, sendo que a saída do software é composta pelos Ngram e suas frequências, em ordem descendente pela frequência; o segundo item do pacote NSP é o programa statistic.pl, cuja entrada é sempre uma lista de Ngram e suas frequências (no formato gerado pelo programa count.pl).

Com isso, o programa executa um dos testes estatísticos selecionados pelo usuário com a finalidade de calcular o “score” para cada Ngram, sendo que a saída do programa será sempre a lista de Ngram acompanhada de seu score, em ordem descendente por score.

Neste artigo mostrarei apenas como funciona o programa count.pl, para uma próxima oportunidade falarmos sobre o statistic.pl.

Corpus escolhido para extração

Para este artigo escolhi um corpus já padronizado e no formato adequado para nossa extração. Trata-se de um corpus que construí durante meu mestrado na PUCRS, e gostaria de compartilhar com vocês. Reuni todos os discursos transcritos do ex-presidente americano Barack Obama, que estavam disponíveis no site da Casa Branca, e converti para o formato TXT. O corpus, bem como os demais arquivos usados nessa extração estão no meu Github.

Download do NSP

Para baixar o NSP é preciso acessar o site da ferramenta, e clicar no link INSTALL. Você será redirecionado para o site metacpan.org onde poderá proceder com o download da ferramenta. O arquivo baixado é um compactado com inúmeros recursos que merecem sua atenção se você deseja explorar mais sobre a ferramenta. No mais, para essa extração vamos utilizar apenas um dos arquivos, o count.pl, localizado dentro da pasta bin.

Executando a extração

Executar a extração é tão simples quanto baixar o pacote da ferramenta. De posse do corpus, e do programa count.pl, basta executá-lo para cada arquivo texto do corpus usando a linha de comando abaixo:

perl count.pl output/out1.txt obama/Barack_Obama_-_13th_Amendment_150-Year_Anniversary.txt --ngram 1

Onde output/out1.txt é o diretório e arquivo de saída contendo a extração, obama/Barack_Obama_-_13th_Amendment_150-Year_Anniversary.txt o arquivo de onde estão sendo extraídos os termos, e por fim, o parâmetro –-ngram 1, que informa que estamos fazendo uma extração de unigramas (termos simples, de uma palavra).

Fique atento, a extração é feita por arquivo, e não do corpus todo de uma vez. Se você tem n arquivos para extrair termos, precisará executar o count.pl n vezes também. Aqui vale uma dica: automatize esse processo usando algum script para ler todo o diretório de uma vez, e chamar o extrator para cada arquivo.

Ou então, faça um cat com todos os arquivos do seu corpus para obter um único arquivo texto (isso pode tornar a extração mais demorada dependendo do tamanho do seu corpus).

Outro ponto importante diz respeito ao número de Ngram. Se você quiser extrair outras unidades de Ngram (bigramas ou trigramas, por exemplo), basta substituir o número 1 por 2 ou 3, lembrando que quanto maior o número de Ngram, maior o tempo de processamento.

O resultado dessa extração de unigramas do arquivo texto acima pode ser visualizado também no repositório do GitHub. Apresento abaixo alguns poucos resultados de tokens obtidos com a respectiva frequência que ocorrem no texto.

Nessas alturas da empreitada, provavelmente você deve pensar: de que me adianta saber que the apareceu 52 vezes no texto? Eu simpatizo com o seu pensamento. O termo the nem traz valor conceitual para o texto, não é mesmo? Pois bem, uma extração estatística, por si só, trará para você os termos (simples ou compostos) e as suas respectivas frequências. E nada mais. É isso! Entenda o resultado dessa extração como algo que pode ou não ter valor conceitual. As próximas etapas de PLN vão lhe ajudar a separar o joio do trigo, ou o que tem valor para sua extração do lixo.

O que fazer com o resultado dessa extração?

A extração resultante desse processo pode ser utilizada para inúmeros fins. É certo que esse resultado ainda precisa ser melhor trabalhado para que seja possível utilizá-lo adequadamente. Algumas etapas a serem seguidas podem ser:

  • Limpeza dos tokens
  • Unificação de termos com capitalização diferente
  • Remoção de stop words
  • Aplicação de pontos de corte
  • Ordenação por score
  • Separação de Ngram

Todas essas tarefas são sucessoras da extração estatística, mas a ordem de aplicação ou necessidade vai depender do objetivo da extração. Certamente o resultado do NSP por si só não diz muito sobre o texto, por isso é fundamental seguir adiante na extração para refinar os resultados.

Espero que tenha gostado deste artigo e esteja disposto a acompanhar os demais artigos que estou preparando para a sequência. O assunto é bastante amplo, e vale irmos devagar para explorarmos bem cada etapa do processo de extração de termos em PLN.