Mineração de Textos: 7 Técnicas e Aplicações para Você Extrair Valor dos Dados e Alavancar Suas Análises.

Mineração de textos ou Text Mining, é uma técnica usada para tirar valiosas informações de bases de dados de textos.

Onde podemos usar isso ?

Imagine extrair as palavras mais usadas em uma notícia de um jornal?

Quais são os principais termos usados em um tópico de discussão no Facebook?

Ou ainda, um político que tem milhares de seguidores nas suas redes sociais, como saber se as pessoas estão falando bem ou mal com relação as suas postagens?

O fato é que existem muitas pessoas interessadas em informações como essas. Informações valiosas que podem ser usadas para alavancar análises. 

Em tempos onde discussões em redes sociais são algo bem comum, eu me lembro de um frase clássica: “Tudo que você disser, será usado contra você um dia”

Quando se tratando de dados públicos, acho que essa frase se faz verdadeira, o que você acha?

Resumo da ópera:

Se você já gostou do assunto desse artigo, não deixe de compartilhar com seus amigos para que cada vez mais pessoas aprendam sobre Mineração de textos 🙂

Aproveite e assine nossa lista para ficar sempre atualizado com novas postagens.

Coloque o seu e-mail abaixo para receber gratuitamente as atualizações do blog!

 

Bibliotecas, Datasets e Scripts

Bibliotecas Mineração de Textos

Para acompanhar todo o artigo, baixe o notebook com todos os scripts utilizados aqui 🙂

E ainda no final do artigo, plotamos uma nuvem de palavras usando uma base de texto sobre o debate entre candidatos a presidente do EUA, baixe aqui

Para trabalhar com textos nada melhor que usar a famosa NLTK.

Essa biblioteca é extremamente útil, pois, possui um extenso dicionário embutido, diversas ferramentas para manipulação, tratamento de bases e muitos outros recursos.

Para instalar essa ferramenta, acesse nosso artigo aqui onde eu faço a instalação passo a passo.

São 2 linhas de comando, mais fácil que isso não existe 🙂

Manipulação de strings

python Mineração de Textos

Fazer Mineração de Textos e não trabalhar com Strings é o mesmo que visitar Minas Gerais e não comer pão de queijo. Não dá !

Com Python tudo fica mais simples, veja que a linguagem já tem recursos nativos que ajudam em muito o Cientista de dados. Veja:

Como concatenar sentenças ? é fácil:

O python irá concatenar as duas string.

E com listas como funciona ? mesma coisa:

No caso de listas você pode ainda usar o método append para adicionar apenas um elemento por exemplo:

Ainda com strings podemos varrer uma frase imprimindo as posições dos caracteres, veja:

No caso das listas, se quisermos imprimir do quarto elemento em diante seria:

Obs: Lembrando que os índices das listas iniciam com 0.

Objeto String

É muito comum contar quantos termos tem em uma sentença ou um texto. Por exemplo, em nossa frase acima, quantas palavras contém na frase?

A função len() irá contar quantos elementos tem na lista

Como temos as palavras na lista, é só usar a função len do python.

Agora imagine que você precisa contar quantas ocorrências aconteceram para a palavra “six” na frase “Six six six the number of the Beast

Na linha 2 a função lower() coloca todas as palavras da frase em minúsculo, assim contamos quantas ocorrências existem para a palavra ‘six’ na linha 3 com o método count().

E se você quiser contar quantos caracteres temos na frase acima:

Em caso de uma string a função len() conta quantos caracteres tem essa string, ou seja, seu tamanho.

Outro recurso interessante quando estamos trabalhando com Strings é a função index, essa permite encontrarmos o índice de uma palavra ou caractere em uma frase, veja um exemplo:

Imagine que quero saber o índice onde se começa a palavra ‘cientista’:

Com o valor retornado, sem a posição na frase, ou seja, o índice. Agora quero varrer os outros caracteres e imprimir do 14 até o 35, veja:

A função join é bem útil também. Com esta podemos fazer uniões, veja um exemplo onde quero unir dois elementos de uma lista e transformá-los em uma única string:

Obs: Um espaço entre as aspas antes do join vai unir os elementos com o espaço em branco entre eles

NLTK Wins!

nltk Mineração de Textos

Para começar vamos ver como separar palavras de uma frase, ou seja, pegar cada palavra de uma sentença.

Essa tarefa é chamada também de tokenization. Veja um exemplo:

No comando acima, na primeira linha importamos a biblioteca do NLTK, na segunda linha atribuímos uma frase para a variável “frase” e imprimimos o seu conteúdo.

Na terceira linha usamos um método do nltk chamado word_tokenize. Esta recebe uma sentença por parâmetro e faz a separação das palavras.

Na última linha imprimimos o conteúdo da variável palavras.

Algo muito usado e bem útil é contar a frequência de palavras em texto, o Nltk tem a função FreqDist() que nos retorna a frequência das palavras de um texto, veja um exemplo:

Perceba que este retorna a frequência de cada palavra, mas e se eu quiser a palavra mais frequente? Use a função max()

Podemos plotar a frequência das palavras na frase, veja o código abaixo:

Pronto, agora ficou fácil ver que a palavra “six” teve uma maior frequência na frase…

O código acima é bem simples, apenas usei a variável frequência que contém as palavras e suas frequências como eixos para o gráfico de barras.

Simples e objetivo, usando matplotlib é claro.

Obs: Caso você queira aprender mais sobre como plotar gráficos, não deixe de ler nosso artigo 7 Tipos de Gráficos que Todo Cientista de Dados Deve Conhecer

Coloque o seu e-mail abaixo para receber gratuitamente as atualizações do blog!


Pre-Processing – Data Transform

data-transform Mineração de Textos

Quando estamos trabalhando com textos, é bem comum ter que fazer um pré-processamento nos dados, principalmente quando trabalhamos com Classificação de documentos.

É quase impossível não fazer pré-processamento de dados quando trabalhamos em algum projeto de Mineração de Textos

Podemos usar as expressões regulares para fazer muita coisa

Imagine uma base de textos onde é interessante remover os números por exemplo.

Quando você quer apenas os termos da base, números pode ser um problema.

Mas como remover os números de uma frase ? veja como é simples usando expressão regular:

A biblioteca nativa do python chamada “re” ajuda muito para implementarmos as expressões regulares.

Outro Pré-processamento muito útil é a remoção de pontuação da base.

As pontuações em algumas tarefas como Análise de Sentimentos podem ser interessantes, pois, expressam um sentimento na escrita

Mas em muitos casos, essas pontuações mais atrapalham do que ajudam..

Veja o uso da biblioteca “re” novamente, agora para remoção de pontuações:

Simples e útil hein? 😉

Stemming

Outra tarefa extremamente útil é o Stemming, esta consiste na redução da palavra até o seu radical.

Isso é possível ao remover seus afixos e vogais temáticas das palavras.

Veja um exemplo abaixo:

Perceba que as palavras são reduzidas para seu radical

Essa técnica causa uma diminuição das palavras da base de dados, por exemplo, a palavra “copiar” tem seu radical em ‘copi’ o que seria o mesmo no caso de copiou ou copiava, tudo isso seria reduzido a copi..

A vantagem é que um modelo que leva em consideração palavras separadamente, todas as variações de uma palavra poderiam ser tratadas com apenas uma.

Isso também pode ser uma vantagem se levado em consideração do tempo computacional em algumas tarefas.

Abaixo criei uma função que recebe por parâmetro uma frase ou um texto e retorna as palavras já com o stemming aplicado, veja como é simples:

Agora é só chamar a função, por exemplo:

StopWords

Outra tarefa de pré-processamento é a remoção de Stopwords.

Stopwords são palavras ou artigos muito usados em um texto, como “a”, “de”, “o”, “da” entre outras.

Em muitas tarefas envolvendo NLP é comum a remoção dessas palavras, pois, em muitos casos essas palavras não ajudam o modelo.

Podemos usar o NLTK para fazer a remoção das stopwords também.

O NLTK já contém um dicionário com as palavras que são consideradas stopwords em português, veja um exemplo:

Na primeira linha criei uma variável chamada stopwords onde será uma lista das palavras fornecidas pelo nltk.

Na linha seguinte imprimo a variável com as palavras..

Podemos fazer uma função para remover as stopwords de um texto ou uma sentença, como fizemos anteriormente, veja:

A função acima recebe uma instância (uma frase) em seguida transforma a frase em minúsculo e define uma variável chamada stopwords que conterá o conjunto fornecido pela Nltk.

Em seguida, faz uma interação em cada palavra da instância e se caso a palavra esteja presente na lista de stopwords esta é removida, veja o exemplo abaixo:

Chamando a função

Tanto a remoção de Stopwords e Stemming são tarefas muito comuns em trabalhos relacionados com NLP e Mineração de textos.

Dicionários Léxicos – “Open your eyes”

wordnet Mineração de Textos

O Wordnet é um grande banco de dados léxico de substantivos, verbos, adjetivos e advérbios que são agrupados em conjuntos de sinônimos, cada um expressando um conceito distinto.

Os sinônimos são interligados pelo seu significado semântico conceitual e suas relações léxicas, dessa forma o Wordnet é uma grande rede de conceitos interligados.

O Wordnet é uma ferramenta amplamente utilizada em pesquisas no mundo todo, principalmente em trabalhos relacionados com linguística. Na industria essa ferramenta também é muita usada em projetos de Mineração de Textos.

Felizmente o NLTK contém uma interface de acesso ao Wordnet, para começar a trabalhar com esse dicionário faça:

O comando acima importa o wordnet através do nltk.

Para consultar o sinônimo de uma palavra, faça:

Perceba que tivemos 3 sinônimos para a palavra bike. È possível consultar uma definição para cada sinônimo veja:

As definições são diferentes, pois, cada sinônimo se refere a uma relação com a palavra bike diferente, veja:

Hierarquia Wordnet

Hierarquia Mineração de Textos
hierarquia-wordnet-mineracao-textos

È interessante como o wordnet mantém uma hierarquia entre seus conceitos, veja se quisermos os hipônimos da palavra bicycle, teríamos:

Os Hipônimos são palavras cujos significados são hierarquicamente mais específicos do que de outras, por exemplo no caso de bicycle temos ‘mountain-bike, velocipede’ entre outros, ou seja, palavras que são derivadas de bicycle

No sentido oposto do hipônimos temos os hiperônimos. Este são palavras cujos significados são mais abrangentes do que os hipônimos, no nosso exemplo de bicycle temos:

Nos é retornado “wheeled_vehicle” o que significa veículo de rodas. Algo mais geral que bicycle.

Temos também os merónimos, ou seja, as conceitos que são partes de outros conceitos, por exemplo, no caso de bicycle, quais são suas partes?

Veja que temos na lista ‘seat (selim)’, ‘pedal’, ‘handlebar(guidon)’ entre outros..

Interessante né?

Coloque o seu e-mail abaixo para receber gratuitamente as atualizações do blog!


Sentiwordnet

sentiwordnet Mineração de Textos

É muito comum em projetos de Mineração de Textos ter algo relacionado com Análise de sentimentos.

Além da extensão com o wordnet a NLTK também estende seu dicionário com um valor de sentimento aos sinônimos.

Esse recurso é bem interessante e tem bastante aplicação.

Para usar tal recurso, importe a extensão sentiwordnet, veja:

Veja a saída, para a palavra “love” é retornada uma pontuação, nesse caso a escala é de 0 a 1, e a pontuação dessa palavra é 0.625 positiva..

Tente outro exemplo, a palavra “sad” já tem uma pontuação negativa bem maior, veja:

Perceba o quanto útil isso pode ser em tarefas envolvendo análise de sentimentos.

Por falar em Análise de Sentimentos, abordamos esse assunto aqui, mas usando uma metodologia diferente. Mineração de Textos

Parts of Speech

Parts of Speech Mineração de Textos

Fazer tagging de palavras é classificar uma palavra conforme sua função gramatical na frase.

Por exemplo, em uma frase você identificar qual é o sujeito, o verbo, advérbio, adjetivos etc.

Isso te dar uma ideia do que fazer com isso ?

Essa tarefa pode ser bem útil para um sistema de perguntas e respostas por exemplo.

Imagine um chatboot que precisa entender e interagir com um usuário através de texto.

O chatboot precisará saber quem é o sujeito da frase, (sujeito aqui pode ser interpretado como o “ser” que está interagindo com o robô), qual o verbo (o verbo poderia ser uma ação, por exemplo, imprimir fatura) para tomar uma ação.

Consegue perceber o poder dessa técnica?

Com NLTK podemos usar essa técnica, pois no seu dicionário, este contém centenas de palavras já classificadas

Veja como é simples:

O primeiro passo é usar a função word_tokenize() para retornar as palavras da frase, em seguida, use a função pos_tag() do nltk para fazer a classificação.

É retornado uma lista com cada palavra e sua classificação (tags).

Veja que para frase acima, o nltk classificou a palavra “invoice” (fatura) como um substantivo(NN) e a palavra “print” como um verbo(VB), ou seja, a ação que quero que ele entenda.

Para descobrir o significado das tags (siglas) use o método help do NLTK, esse mostra o significado e alguns exemplos, veja:

A rapadura é doce mas …

Post Tagging não é uma tarefa tão simples como parece, pois, as palavras mudam de classificação de acordo o seu uso na frase.

Veja o caso da palavra “print”, na frase acima ela foi classificada como um verbo, por causa do “to” antes. Neste exemplo ela significava “imprimir” ou seja, uma ação.

Mas podemos também usar a palavra “print” para nos referenciar a um sentimento(impressão, sentido), ou um objeto (impressão) E nessa situação ela se torna um substantivo, concorda?

Veja:

Perceba que aqui a palavra print foi classificada como um substantivo (NN)

Podemos usar também para o idioma português, mas para esse idioma o dicionário é mais limitado, veja:

Sem dúvidas Parts of Speech é mais uma tarefa interessantíssima que é usada em Mineração de Textos

Coloque o seu e-mail abaixo para receber gratuitamente as atualizações do blog!


Word Cloud – “Uma imagem vale mais que mil palavras”

word-cloud Mineração de Textos

Um recurso muito interessante quando estamos falando de texto são as nuvens de palavras

Também conhecidas como nuvens de tags

Todo mundo já viu uma, é muito usado na web.

A nuvem é composta por termos mais frequentes de um texto, ou de uma base de discussão por exemplo.

A nuvem é plotada levando em consideração a frequência das palavras naquela base, de forma que as palavras mais frequentes com um tamanho maior, ou seja, com mais destaque na nuvem

Image fazer uma nuvem das palavras faladas em debate político, seria interessante né?

Poiseh…

Pensando nisso, vamos gerar uma nuvem de tags das palavras faladas em um debate político de 2016 nos EUA.

O Dataset pode ser facilmente baixado aqui, eu peguei ele diretamente do site de datasets do Kaggle.

Para criar a nuvem de tags, use a biblioteca WordCloud

Esta biblioteca é muito poderosa funciona muito bem

Instalando a Lib..

Instale a biblioteca com o pip:

Aguarde a instalação e pronto ta funcionando.

Importante: Caso você esteja no Windows tenha problemas de instalação faça download da extensão na plataforma que você estiver usando (x86 ou 64) aqui

E instale como no exemplo abaixo:

Com a lib instalada e com o dataset em mãos vamos gerar a nuvem

Segue o código:

As 3 primeiras linhas importamos as bibliotecas usadas

Em seguida colocamos dentro da variável text o conteúdo do arquivo ‘debate.csv’

Nas linhas 6 e 7 criamos uma variável chamada wordcloud que instancia a classe WordCloud com seus parâmetros de altura, largura e tamanho máximo da fonte das palavras maiores.

Ainda na linha 7 usamos a função generate() para passar a variável text (nossa base de debate)

Na linha 8, usamos o matplotlib para plotar a imagem e dizemos seu tamanho com a função figsize().

Na linha 9,10 e 11 dizemos ao matplotlib para plotar uma imagem, em seguida desabilitamos os eixos do gráfico e finalmente mandamos exibir o gráfico. Mineração de Textos

Será gerada uma nuvem como a seguinte:

wordcloud Mineração de Textos

A nuvem está criada..  Perceba que as palavras maiores são as mais frequentes na base

A nuvem é um recurso simples e que pode nos dizer algo.. Mineração de Textos

Talvez seja possível melhorar a nuvem, fazendo um trabalho de pré-processamento na base de dados..

Talvez ela se torne mais útil para quem está analisando os dados

Mas isso seria um trabalho para um outro artigo 🙂

Conclusão

Como vimos nesse artigo, Mineração de textos pode ser algo muito interessante

Essa área vem crescendo muito e a tendência é aumentar ainda mais, pelo simples fato de que estamos cada dia mais produzindo mais dados.

Aqui vimos como trabalhar com Strings, como usar as bibliotecas certas e também sobre algumas tarefas do cotidiano de um cientista de dados.

Vimos também sobre os Dicionários léxicos e sobre a utilização destes.

Por fim, vimos como gerar uma nuvem de tags usando uma base de dados real.

Para quem gostou desse artigo, ainda teremos outro artigo mais avançado em Mineração de Textos

Se você gostou desse artigo compartilhe com seus amigos e assine nossa lista de e-mail para ficar sempre atualizado sobre novas publicações. Mineração de Textos

E me fale o que achou deste artigo, ok?

Abraço!

Coloque o seu e-mail abaixo para receber gratuitamente as atualizações do blog!

  • Rodrigo Santana Ferreira

    teste de comentario pelo discus

  • Felipe Santana

  • Daniel Luiz da Silva

    Cara, obrigado, esse foi um dos melhores artigos na internet que encontrei para manipulação de texto para ciência de dados. Explana conceitualmente as principais ferramentas para realizar as principais tarefas. Muito legal.
    Obrigado.

    • Rodrigo Santana Ferreira

      Olá Daniel !

      Que bom que gostou do artigo, fico feliz que lhe foi útil 🙂

      Forte Abraço.