Mineração de emoção em textos utilizando a linguagem Python.
Atualmente temos inúmeras fontes de armazenamento de textos:
- Livros
- Jornais
- Revistas
- Páginas Web
- Blogs
- Redes Sociais
- E-mails
- Arquivos em PDF, XML e JSON
- ... etc
Estas fontes são ricas para se encontrar e extrair padrões de textos.
Uma característica importante é que estes tipos de dados normalmente não possuem um esquema para descrever sua estrutura de armazenamento, eles estão armazenados em diversos formatos, o que dificulta a interpretação do dado.
Há basicamente dois tipos de textos
- Formatado: possuem tags que definem onde que está o título, os autores, etc.
- Ex: Arquivo XML, JSON, HTML, etc
- Livre: não possuem indicadores explícitos, estão num formato puro
- Ex: O corpo de um e-mail, uma postagem de rede social, etc.
É utilizada para reconhecer padrões que descrevem o grupo ao qual um determinado item pertence. Chega numa saída por meio do exame dos itens já classificados e pela inferência de um conjunto de regras.
Pode ser usado para classificação de mensagens de spam através mensagens recebidas em caixas de e-mails como Gmail, Outlook para determinar e-mails de spam
- Entrada: Mensagem (assunto, texto)
- Classificador
- Saída: Classe da Mensagem (normal, spam, etc)
Pode ser utilizado para classificação de notícia, onde um jornalista cadastra um texto de uma notícia e o mesmo é processado para determinar automáticamente os tópicos para indexação da notícia.
- Entrada: Texto da notícia
- Classificador Multirrótulo
- Saída: Tópicos (esporte, rio de janeiro, economia, etc)
ℹ️ Outros exemplos mais aprofundados podem ser encontrados em
docs/classificacao.md
É semelhante a Classificação só que para grupos ainda não definidos.
Pode ser utilizado numa fonte como o IBGE para a descoberta de bairros similares (Jardim Angélica e Jdim Angélica), evitando problemas como erros de digitação
É utilizado por revistas científicas para detecção de plágio na submissão de artigos com frases e palavras similares à outros já publicados.
Ter um texto livre e extrair atributos que estão descritos neste texto.
Dado o texto:
"Apesar de ter sido escrito em 1516, Utopia continua sendo um dos mais interessantes livros sobre pensamento político. A obra de Thomas More descreve uma ilha imaginária onde não existe propriedade privada e todos se preocupam com o bem da coletividade. A nova edição foi lançada pela Editora XYZ e está sendo vendida por R$ 9,90"
Pode ser extraído o template abaixo:
- Livro: Utopia
- Ano: 1516
- País: -
- Autor: Thomas More
- Editora: XYZ
- Preço: 9,90
Baseado no exemplo acima, é possível ainda fazer a utilização de ontologias para representar conceitos e relacionamentos em um determinado domínio (a biblioteca NLTK possui algumas funcionalidades para trabalhar com isso)
Exemplo de um relacionamento de entidades:
Livro {nome: "Utopia"}
é escrito porAutor {nome: "Thomas More"}
emPaís {nome: "Brasil"}
quandoData {ano: 1516}
É utilizada para se obter a correlação entre palavras
Nesta técnica temos um exemplo clássico, do Walmart, onde foi identificado que sempre que se vendia fralda também se vendia cerveja, fazendo-os reposicionar fisicamente os objetos nos supermercados para aprimorar vendas.
Dado que:
60% dos textos que contêm a palavra 'Internacional' também contêm a palavra 'Grêmio'. 3% de todos os textos contêm ambas as palavras
Temos a Representação de Correlação: {"Internacional"} <-> {"Grêmio}
Dado que:
A presença do termo 'Pelé' aumenta 5 vezes a chance de ocorrência dos termos 'Copa' e '1970'
Temos a Representação de Correlação: {"Pelé"} <-> {"Copa", "1970"}
Pode ser utilizado para entender correspondências semânticas (mesmos significados)
Migração de dados entre duas bases de dados, onde possuem tabela origem e destino porém com a primary_key com nomes diferentes. É usado então entender automáticamente o de-para dos campos.
Através de um algorítimo de correspondência (matcher) permitir que um usuário esquema uma consulta em linguagem natural e a mesma ser convertida para um select no banco de dados.
Consulta do usuário:
Encontre os livros do Robert C. Martin via texto ou voz com técnicas de processamento de linguagem natural (PLN)
Saída:
SELECT titulo, ano, resumo FROM publicacoes WHERE autor like '%Robert C. Martin%' and tipo = 'livro'
É utilizada para localizar e ranquear documentos relevantes em uma coleção de documentos. Esta técnica é utilizada pela ferramenta Apache Lucene
Onde podemos ter uma tabela hash de palavras que apontam para documentos que a contenham.
Palavra | Ponteiro 1 | Ponteiro 2 | Ponteiro 3 | Ponteiro 4 |
---|---|---|---|---|
"goleador" | Documento 3 | Documento 12 | ||
"goleiro" | Documento 7 | Documento 1 | Documento 27 | Documento 19 |
"gol" | Documento 1 | Documento 2 |
Documento 1: "... um belo gol no segundo tempo..."
Documento 2: "Não aconteceu nenhum gol por conta de ..."
É aplicado algoritmo de sumarização em um texto com bastante linhas e obtêm-se um resumo do texto com os principais pontos em poucas linhas.
- Estatística: Frequência dos termos, ignorando informações semânticas.
- Processamento de Linguagem Natural (PLN):
- Interpretação sintática e semântica das frases.
- Fazer o computador entender textos escritos em linguagem humana.
A mineração de emoção em textos faz parte da mineração de textos e é utilizado a técnica de classificação
Em que cenários se faz útil?
- Monitoramento de marcas, entidades, figuras sociais
- Ex: uma pessoa compra uma televisão, e faz um review na Internet, dependendo da emoção transmitida a empresa pode tomar uma decisão, como por exemplo, caso não esteja insatisfeito é bastante provavel que a emoção seja raiva
- Gestão de crises;
- Entender o que as pessoas pensam;
Também chamada de valência é submetido um texto em um algoritmo e recebe-se uma categoria dessas três: "Positivo", "Neutro" e "Negativo".
Segundo estudo do Paul Ekman, o ser humano consegue expressar 6 emoções bases:
- Supresa
- Alegria
- Tristeza
- Medo
- Disgosto
- Raiva
- Atributos previsores: As próprias palavras
- Atributo meta (classe): Emoção (alegria e medo)
Frase | Classe |
---|---|
Me sinto completamente amado | Alegria |
Eu estou muito bem hoje | Alegria |
Isso me deixa apavorada | Medo |
Este lugar é apavorante | Medo |
Abaixo, temos como ficaria uma base de dados da classificação acima.
Todas as características (atributos previsores) são dispostas nas colunas, eliminando duplicados, eliminando stop words.
É comum em uma base real de trabalho possuir mais de 70.000 características.
"stop words" são palavras que não são utilizadas devido ao seu baixo valor de relevância, diminuindo assim dimensão da base de dados (Ex: "a", "é", "ou", "e", "do", "deu") Há também outras técnicas como "stemming" que remove os radicais das palavras também para diminuir a dimensão da base de dados (Ex: livro, livrinho, livreto, livretiol) Estrutura e Formação das Palavras - Morfologia - Raiz/Radical
Me | Sinto | Completamente | Amado | Eu | Estou | Muito | Bem | Hoje | Isso | Deixa | Apavorada | Este | Lugar | Apavorante | Classe |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
S | S | S | S | N | N | N | N | N | N | N | N | N | N | N | Alegria |
N | N | N | N | S | S | S | S | S | N | N | N | N | N | N | Alegria |
S | N | N | N | N | N | N | N | N | S | S | S | N | N | N | Medo |
N | N | N | N | N | N | N | N | N | N | N | N | S | S | S | Medo |
- Instalar o Python
python v3+
- Instalar dependências
pip install -r requirements.txt
É uma biblioteca para processamento de linguagem natural, escrita em Python
Possui varios recursos, como: classificação, tokenização, stemming, tagging, parsing e raciocínio semântico.
Um script de atualização da biblioteca pode ser encontrado em scripts/nltk_gui_update.py
Criar um script em python para atualizar as coleções do NLTK
É um algoritmo de abordagem probabilística (Teorema de Bayes)
É bastante utilizado em:
- Filtros de spam em e-mails, analizando a probabilidade das palavras do seu conteúdo estarem relacionadas a e-mails de spam.
- Mineração de emoções, área de computação afetiva (sub área de inteligência artificial), dado um texto é identificado a emoção do texto, podendo ser usado para avaliar o grau de satisfação dos clientes por comentários relativos a um produto.
Exemplo em ./docs/naive_bayes.md
Exemplos práticos em no diretório ./scripts
- Base de dados de teste
- Base de dados de treinamento (bem maior que a de testes)
Ambas já possuem registros classificados, onde serão aplicados cada registro da base de teste num algoritmo da base de treinamento, e os erros e acertos serão medidos. É importante que os registros das bases sejam diferentes, para não influenciar no teste do algoritmo, um cenário de exemplo é um professor passar 10 questões no quadro para revisão um dia antes da prova, e no dia da prova, passar as mesmas 10 questões, isso não irá de fato medir o conhecimento.
- Cenário
- Número de classes (com as 6 emoções, o algoritmo alcançou acerto de 39%)
- "zero-rules" dependendo da aplicação este método é mais aplicável (classifica todas as frases com base na classe mais utilizada)
- Top Five Emotion / Sentiment Analysis APIs for understanding user sentiment trends.
- Mineração de Emoção em Textos com Python e NLKT @ Udemy
- Introdução ao NLTK na Prática
- NLTK em Português
- Penn Part of Speech Tags
- Estrutura e formação de palavras - Raiz e radical
- Stemming words with NLTK
- Markdown Table Generator