Oii, tudo bem com você? Hoje vou explicar do zero, como implementar um algoritmo que analisa o quanto semelhante são dois comentários (frases, textos, etc), apenas usando o produto escalar entre dois vetores, algo que é visto no início dos cursos de exatas. Está não é uma solução completa para este tipo de análise, mas te dar uma ideia geral de como podemos mensurar a similaridade entre comentários.
O código foi escrito na linguagem de programação python versão 3 e além de utilizar as bibliotecas padrão do python, vou utilizar a biblioteca numpy.
Primeiro importamos as bibliotecas que serão utilizadas nesta parte e montamos um vetor com frases curtas que foram escolhidas de maneira aleatória.
A variável corpus contém os textos (frases, comentários, etc) que serão analisados, e como pode notar, os textos estão um pouco sujos, mas foi de propósito.
A primeira função que iremos definir será a função clear_text. Esta função fará a limpeza nos textos, mantendo todo o texto com as letras minúsculas, eliminando as pontuações com o auxílio de expressões regulares (biblioteca re) e salvando apenas as palavras com comprimento maior que 1, isso faz com que ignore as vogais.
Na cédula seguinte é feito o comparativo entre antes e depois da limpeza nos textos.
Em seguida vamos construir um vetor com todas as palavras do corpus, após ser feita a limpeza do mesmo, ou seja, estamos construindo o “vocabulário” do algoritmo.
Com o vocabulário construído, transformamos cada frase do vetor corpus de maneira que o computador entenda, ou seja, vamos comparar se cada palavra do vetor vocabulary contém ou não em cada frase do vetor corpus. Se sim insere o valor numérico 1 se não insere 0.
Em outras palavras estamos transformando cada frase em vetores com dimensão igual ao tamanho da variável vocabulary.
Para determinar o quanto similar são os comentários, é necessário utilizar algum procedimento (fórmula) para medir esta similaridade. Uma delas é a métrica chamada similaridade do cosseno. Quem já cursou álgebra linear deve saber que o produto vetorial de dois vetores é igual ao módulo de cada vetor vezes o cosseno do ângulo formado entre eles.
v.w = |v||w|cos(θ), sendo v e w vetores
E é justamente o cosseno do ângulo ( cos(θ) )que utilizaremos para determinar o quanto similar são os comentários. Lembrando que a função cos(θ) vai do intervalo fechado -1 à 1, sendo que quando:
cos(θ) = 1 -> Os vetores são paralelos e com mesmo sentido;
cos(θ) = 0 -> Os vetores são perpendiculares;
cos(θ) = 1 -> Os vetores são paralelos e com mesmo oposto.
De maneira simples, quanto maior for o valor do cos(θ) mais similar são as frases.
Por fim definimos a função text_simillarities que irá calcular a similaridade entre o comentário escolhido com os demais e retornar em ordem decrescente os comentários e sua nota de similaridade. Nesta função temos 4 argumentos, o primeiro id_text, refere-se qual linha do vetor corpus está o texto a ser analisado, features é a matriz de 1 e 0 obtida na linha 6 com a função fit_transform, text é o próprio vetor corpus e n_text refere-se a quantos comentários será retornado na função.
Com tudo pronto, vamos fazer a análise, para isto escolhi a frase “Oi eu sou o goku!” (de maneira aleatória, rsrs), e verificaremos com as demais frases, quais são mais semelhantes e o quanto semelhante elas são em ordem decrescente.
Conclusão
Fiz uma breve ilustração partindo do zero de como podemos analisar de maneira bem simples a similaridade entre comentários, frases ou textos. Como foi dito no início do texto, este procedimento é para fins de estudo e não é uma solução final para este tipo de análise. Você pode melhorar a análise filtrando as “stopwords” (tradução livre — palavras de paradas), como também considerar fazer a mesma análise usando n-gram (em vez de considerar apenas uma única palavra, considera n-grupos de palavras vizinhas, por exemplo, o bigrama do texto [‘oi eu sou o goku’] ficaria [‘oi eu’, ‘eu sou’, ‘sou o’, ‘o goku’]), entre outros procedimentos.
Uma aplicação que pode ser feita é um sistema de recomendação de abstract, ou seja, a partir de um abstract de seu interesse, o código pode recomendar outras abstract semelhante. Neste link tem um artigo onde explico como raspar informações do site web science a partir do tema de busca, no qual uma das informações obtidas é justamente o abstract de cada paper.
Linkedin: https://www.linkedin.com/in/octavio-santana
Github: https://github.com/Octavio-Santana
Categorias:	DicasPara DevsTecnologia	
0 comentário	
Deixe uma resposta Cancelar resposta
O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *
Nome *
E-mail *
Site
O que você está pensando?
Salvar meus dados neste navegador para a próxima vez que eu comentar.
Newsletter Blog
E-mail*
Qual conteúdo deseja receber?*
Newsletter RH Newsletter Dev
Ao informar meus dados, eu concordo com a Política de Privacidade.
Assinar Newsletter
Posts recentes
Dicas para desenvolvedores: seja um profissional organizado
Preciso contratar profissionais de TI, e agora?
Suas aplicações se preocupam com acessibilidade de cores?
Categorias
Para Devs
Carreira
Dicas
Linguagem de programação
Tecnologia
Para Empresas
Contratar
Desenvolver
Extras
Reter e Motivar
Vulpi
Cases
Posts relacionados
Dicas
Dicas para desenvolvedores: seja um profissional organizado	
Você se considera um profissional organizado? Seja sincero consigo mesmo, observe o seu ambiente de trabalho e a sua agenda de compromissos, como você está se saindo nessa questão? Provavelmente, você já deve ter ouvido Leia mais…
Dicas
Suas aplicações se preocupam com acessibilidade de cores?	
Esse é um conteúdo produzido por um autor convidado. Neste texto será abordado o que é acessibilidade de cores. Vou começar o post de hoje com algumas perguntas: você sabe o que é acessibilidade Leia mais…
Carreira
Soft Skills para profissionais de tecnologia	
Esse é um conteúdo produzido por um autor convidado. O texto irá abordar soft skills para profissionais de tecnologia. Você sabe quais são as competências essenciais para um colaborador dessa área? Mesmo antes de Leia mais…