Python - Comparar palavras entre dois bancos
Python - Comparar palavras entre dois bancos | ||
Canal Qb |
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. Figuras descritivas, como histograma exibindo a distribuição de palavras-chave, são um exemplo simples no qual consigo pensar facilmente. No entanto, gostaria de obter algumas medidas numéricas usando o "texto" para capturar as diferenças nos escopos de negócios dos dois grupos de empresas.
Uma forma de medir a diferença entre dois conjuntos de descrições é através da utilização de métricas de similaridade de texto. Algumas dessas métricas incluem:
Resposta:
Jaccard Similarity: Mede a similaridade entre dois conjuntos, neste caso as descrições das empresas, baseado na interseção de seus elementos.
Cosine Similarity: Mede a similaridade entre dois vetores de texto, onde cada descrição é representada por um vetor de palavras-chave.
Euclidean Distance: Mede a distância entre dois vetores de texto usando a distância euclidiana.
Antes de aplicar essas métricas, é necessário processar o texto, incluindo a limpeza de stop words, a stemização/lematização das palavras e a representação das descrições como vetores.
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)
Cosine Similarity:
from typing import List
import numpy as np
def cosine_similarity(text1: List[str], text2: 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))
Euclidean Distance:
from typing import List
import numpy as np
def euclidean_distance(text1: List[str], text2: 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)
Esses são exemplos simplificados, mas você pode aprimorá-los adicionando mais etapas de pré-processamento e tratamento do texto, como a remoção de stop words ou a normalização das palavras.
Nenhum comentário
Comente só assim vamos crescer juntos!
Observação: somente um membro deste blog pode postar um comentário.