J'ai une charge de documents, qui ont une charge de paires de valeurs clés en eux. La clé peut ne pas être unique, il peut donc y avoir plusieurs clés du même type avec des valeurs différentes.
Je veux comparer la similitude des clés entre 2 documents. Plus précisément la similitude des chaînes de ces valeurs. Je pense utiliser quelque chose comme l' algorithme Smith-Waterman pour comparer la similitude.
J'ai donc dessiné une image de la façon dont je pense à représenter les données -
Les valeurs dans les cellules sont le résultat de l'algorithme smith-waterman (ou d'une autre métrique de similitude de chaîne).
Image que cette matrice représente un type clé de "choses" J'ai ensuite besoin d'ajouter le score de similitude "choses" dans un vecteur de 0 ou 1. C'est correct.
Ce que je ne peux pas comprendre, c'est comment déterminer si la matrice est similaire ou non similaire - idéalement, je veux convertir la matrice en un nombre compris entre 0 et 1, puis je vais simplement définir un seuil pour le marquer comme 0 ou 1.
Des idées sur la façon dont je peux créer une partition de la matrice? Quelqu'un connaît-il des algorithmes qui font ce genre de chose (évidemment, des choses comme le fonctionnement de Smith Waterman sont applicables).
la source
Réponses:
Si j'ai bien compris, le Document 1 et le Document 2 peuvent avoir un nombre différent de clés. Et vous voulez obtenir une évaluation finale de la similitude entre 0 et 1. Si oui, je proposerais l'algorithme suivant:
L'estimation finale serait égale à 1, si les deux documents ont une longueur identique, et que chaque mot du Doc 1 a son équivalent dans le Doc 2.
Vous n'avez pas mentionné de logiciel, vous l'utilisez, mais voici un exemple de fonction R , calculant une telle similitude (il faut en entrée l'objet de la matrice de classe):
En python -
la source
Si votre objectif est de transformer votre matrice en nombre (votre mesure de similitude), vous pouvez utiliser une norme matricielle .
Par exemple, l'utilisation de la norme Frobenius sur votre exemple retournerait 1,488086.
la source
Je pense que votre objectif est de trouver à quel point deux documents sont similaires, si c'est le cas, je suggère d'appliquer l'algorithme suivant:
Cette approche donne à quel point Doc1 est similaire à Doc2. (Les valeurs de similarité seront différentes pour Doc2 par rapport à Doc1 s'il ne s'agit pas d'une matrice carrée)
Cela signifie que Doc2 est similaire à 82,67% à Doc1 . La similitude ne peut pas dépasser cette valeur car nous avons sélectionné un maximum d'articles similaires dans chaque ligne.
la source