Tengo una carga de documentos, que tienen una carga de pares de valores clave en ellos. Es posible que la clave no sea única, por lo que puede haber varias claves del mismo tipo con valores diferentes.
Quiero comparar la similitud de las claves entre 2 documentos. Más específicamente, la similitud de cadena de estos valores. Estoy pensando en usar algo como el algoritmo Smith-Waterman para comparar la similitud.
Así que dibujé cómo estoy pensando en representar los datos:
Los valores en las celdas son el resultado del algoritmo smith-waterman (o alguna otra métrica de similitud de cadenas).
Imagen de que esta matriz representa un tipo clave de "cosas". Luego necesito agregar el puntaje de similitud de "cosas" en un vector de 0 o 1. Eso está bien.
Lo que no puedo entender es cómo determino si la matriz es similar o no, idealmente quiero convertir la matriz a un número entre 0 y 1 y luego estableceré un umbral para calificarla como 0 o 1)
¿Alguna idea de cómo puedo crear una puntuación de la matriz? ¿Alguien sabe algún algoritmo que haga este tipo de cosas (obviamente, cosas como cómo funciona Smith Waterman es más o menos aplicable).
fuente
Respuestas:
Como entendí, el Documento 1 y el Documento 2 pueden tener diferentes números de claves. Y desea obtener una evaluación final de similitud entre 0 y 1. Si es así, propondría el siguiente algoritmo:
La estimación final sería igual a 1, si ambos documentos tienen una longitud idéntica, y cada palabra del Doc 1 tiene equivalente en el Doc 2.
No ha mencionado el software que está utilizando, pero aquí hay un ejemplo de función R , que calcula tal similitud (toma el objeto de la matriz de clase como entrada):
En python -
fuente
Si su objetivo es transformar su matriz en un número (su medida de similitud), es posible que desee utilizar una norma de matriz .
Por ejemplo, usar la norma Frobenius en su ejemplo devolvería 1.488086.
fuente
Creo que su objetivo es encontrar cuán similares son dos documentos, si ese es el caso, sugiero aplicar el siguiente algoritmo:
Este enfoque proporciona cuánto Doc1 similar es wrt Doc2. (Los valores de similitud serán diferentes para Doc2 wrt Doc1 si no es una matriz cuadrada)
Esto significa que Doc2 es 82.67% similar a Doc1 . La similitud no puede ir más allá de este valor, ya que seleccionamos un máximo de elementos similares en cada fila.
fuente