Comparando textos com Python usando similaridade de palavras
Você trabalha com dados empresariais e precisa analisar as diferenças entre dois conjuntos de descrições? Uma forma poderosa de fazer isso é aplicando técnicas de processamento de linguagem natural (NLP) com Python. Neste post, você verá como comparar textos e extrair informações numéricas sobre similaridade entre dois bancos de palavras-chave.

Pergunta: Tenho dois conjuntos de descrições de empresas e palavras-chave de seus negócios e gostaria de desenvolver uma medida para capturar a diferença entre elas com base nessas informações textuais.
Como medir diferenças entre dois conjuntos de texto
Para resolver esse desafio, você pode usar técnicas de similaridade de texto, como:
- Jaccard Similarity
- Cosine Similarity
- Euclidean Distance
Antes de aplicar essas métricas, é importante fazer a limpeza dos textos, remover stop words e transformar os textos em vetores numéricos (tokenização e vetorização).
Método 1: Jaccard Similarity
from typing import List
def jaccard_similarity(text1: List[str], text2: List[str]) -> float:
set1 = set(text1)
set2 = set(text2)
intersection = set1.intersection(set2)
union = set1.union(set2)
return len(intersection) / len(union)
Método 2: Cosine Similarity
from typing import List
import numpy as np
def cosine_similarity(text1: List[str], text2: List[str], all_words: List[str]) -> float:
vec1 = np.zeros(len(all_words))
vec2 = np.zeros(len(all_words))
for word in text1:
if word in all_words:
vec1[all_words.index(word)] += 1
for word in text2:
if word in all_words:
vec2[all_words.index(word)] += 1
return np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))
Método 3: Euclidean Distance
from typing import List
import numpy as np
def euclidean_distance(text1: List[str], text2: List[str], all_words: List[str]) -> float:
vec1 = np.zeros(len(all_words))
vec2 = np.zeros(len(all_words))
for word in text1:
if word in all_words:
vec1[all_words.index(word)] += 1
for word in text2:
if word in all_words:
vec2[all_words.index(word)] += 1
return np.linalg.norm(vec1 - vec2)
Etapas adicionais recomendadas
- Remover pontuação, números e stop words
- Utilizar stemização ou lematização para normalizar as palavras
- Usar bibliotecas como
nltk
,spaCy
ousklearn
para pré-processamento
Aplicações práticas
Essas métricas podem ser usadas em:
- Análise de mercado entre concorrentes
- Comparação de escopos empresariais
- Identificação de similaridade entre perfis de clientes ou produtos
Esse tipo de abordagem é altamente eficaz em business intelligence, especialmente quando você precisa comparar dados textuais que refletem modelos de negócio.
Assista ao vídeo complementar
Confira o conteúdo complementar no canal @CanalQb no YouTube para ver esse código em funcionamento.
Dica: Sempre analise cuidadosamente os dados antes de investir em qualquer solução automatizada. Avalie riscos e valide os resultados com supervisão humana.
Ferramentas recomendadas
Gostou do conteúdo? Deixe um comentário no final da página e compartilhe com quem também trabalha com dados e textos em Python!