Eu tenho uma carga de documentos, que possuem uma carga de pares de valores-chave. A chave pode não ser exclusiva, portanto, pode haver várias chaves do mesmo tipo com valores diferentes.
Quero comparar a semelhança das chaves entre dois documentos. Mais especificamente, a semelhança de string desses valores. Estou pensando em usar algo como o algoritmo Smith-Waterman para comparar a semelhança.
Então, desenhei uma imagem de como estou pensando em representar os dados -
Os valores nas células são o resultado do algoritmo smith-waterman (ou alguma outra métrica de similaridade de string).
Imagem de que essa matriz representa um tipo-chave de "coisas", preciso adicionar a pontuação de similaridade "coisas" em um vetor de 0 ou 1. Está tudo bem.
O que não consigo descobrir é como determino se a matriz é semelhante ou não - idealmente, quero converter a matriz em um número entre 0 e 1 e depois definirei um limite para pontuá-la como 0 ou 1
Alguma idéia de como posso criar uma pontuação da matriz? Alguém conhece algum algoritmo que faça esse tipo de coisa (obviamente, coisas como o smith waterman funciona são aplicáveis).
fonte
Respostas:
Pelo que entendi, o Documento 1 e o Documento 2 podem ter um número diferente de chaves. E você deseja obter uma avaliação final da similaridade entre 0 e 1. Se sim, proponho o seguinte algoritmo:
A estimativa final seria igual a 1, se os dois documentos tiverem comprimento idêntico e todas as palavras do Doc 1 tiverem equivalente no Doc 2.
Você não mencionou o software, está usando, mas aqui está um exemplo de função R , computando essa semelhança (ela toma como objeto a matriz de classes como entrada):
Em python -
fonte
Se seu objetivo é transformar sua matriz em um número (sua medida de similaridade), convém usar uma norma de matriz .
Por exemplo, o uso da norma Frobenius no seu exemplo retornaria 1.488086.
fonte
Acho que seu objetivo é descobrir como dois documentos são semelhantes, se esse for o caso, sugiro aplicar o seguinte algoritmo:
Essa abordagem fornece o grau de Doc1 semelhante ao Doc2. (Os valores de similaridade serão diferentes para Doc2 e Doc1, se não for uma matriz quadrada)
Isso significa que o Doc2 é 82,67% semelhante ao Doc1 . A similaridade não pode ir além desse valor, pois selecionamos o máximo de itens semelhantes em cada linha.
fonte