2008-10-26 16 views
14

Estoy haciendo un sistema de cuestionarios, y cuando los cuestionarios inserten preguntas en el Banco de preguntas, debo verificar las preguntas duplicadas/muy similares en la base de datos.La relevancia de búsqueda de texto se mide en?

Probando MySQL's MATCH() ... AGAINST(), la mayor relevancia que obtengo es 30+, cuando pruebo contra una cadena 100% similar.

Entonces, ¿cuál es exactamente la relevancia? Para citar el manual:

Los valores de relevancia son números de punto flotante no negativos. Cero relevancia significa que no hay similitud. La relevancia se calcula en función del número de palabras en la fila, el número de palabras únicas en esa fila, el número total de palabras en la colección y el número de documentos (filas) que contienen una palabra en particular.

Mi problema es cómo probar el valor de relevancia si una cadena es un duplicado. Si es 100% duplicado, evite que se inserte en el banco de preguntas. Pero si solo es similar, solicite al concursante que verifique, inserte o no. Entonces, ¿cómo hago eso? Más de 30 para una cadena 100% idéntica no es un porcentaje, entonces estoy tocón.

Gracias de antemano.

Respuesta

4

andygeers está en el camino correcto: Esos números no tienen otro significado empírico más que sus relaciones entre ellos y no pueden usarse por sí mismos para determinar qué es o no es una "coincidencia exacta". Debe determinarlo usted mismo.Incluso aparte de las limitaciones de la clasificación de búsqueda de texto completo, también está la pregunta abierta de lo que usted considera que constituye una "coincidencia exacta". (¿Solo texto real o el soundex coincide? ¿Los sinónimos (por ejemplo, "sofá" vs. "sofá") cuentan como coincidentes o distintos? ¿Se debe intentar compensar errores ortográficos? Etc.)

Si Si tuviera la necesidad de realizar dicha comprobación, tomaría solo la entrada con la clasificación más alta devuelta por la búsqueda de texto completo, eliminaría cualquier palabra designada, normalizaría el espacio en blanco, convertiría a minúscula, haría la comparación y lo dejaría así hasta que encontrara un caso eso requería que se refinara aún más. No es realmente todo que mucho trabajo adicional: si especifica el idioma que está utilizando para su aplicación, probablemente pueda encontrar a alguien por aquí que pueda escribir la función de normalización en una docena de líneas de código.

1

No conozco los detalles de la función MySQL que está utilizando, pero me imagino que podría ser que no haya un significado absoluto para esos números: están diseñados para ser comparados con otros valores producidos por el misma función. Para verificar si hay una coincidencia absoluta, puede seleccionar el texto y compararlo manualmente.

+0

Prefiero usar el motor de búsqueda MySQL siempre que sea posible. Si tuviera que comparar el mío, tengo que preparar y controlar mucho, p. Ej. elimine todos los espacios en blanco y los caracteres especiales, convierta todo a mayúsculas y todo lo demás. Ese es mi último recurso. – syaz

7

La estructura de datos básica para un sistema de recuperación de texto es Inverted Index. Esta es esencialmente una lista de palabras que se encuentran en la colección de documentos con una lista de los documentos en los que aparecen. También puede tener metadatos sobre la ocurrencia de cada documento, como el número de veces que aparece la palabra.

Los documentos que contienen las palabras se pueden consultar haciendo coincidir los términos de búsqueda. Para determinar la relevancia, se calcula una heurística conocida como Cosine Ranking en los aciertos. Esto funciona construyendo un vector n-dimensional con un componente para cada uno de los n términos de búsqueda. También puede ponderar los términos de búsqueda si lo desea. Este vector da un punto en el espacio n-dimensional que corresponde a sus términos de búsqueda.

Se puede construir un vector similar basado en las ocurrencias ponderadas en cada documento a partir del índice invertido con cada eje en el vector correspondiente con el eje para cada término de búsqueda. Si calcula un producto escalar de estos vectores, obtendrá el coseno del ángulo entre ellos. 1.0 es equivalente a cos (0), lo que supondría que los vectores ocupan una línea común desde el origen. Cuanto más cerca estén los vectores, menor será el ángulo y más cerca estará el coseno de 1.0.

Si ordena los resultados de la búsqueda por el coseno (o los inserta en una cola de prioridad como mg) obtendrá el más relevante. Los algoritmos de relevancia de Cleverer tienden a jugar con los pesos de los términos de búsqueda, sesgando el producto de puntos a favor de términos con alta relevancia.

Si quiere profundizar un poco, Managing Gigabytes por Bell y Moffet analiza la arquitectura interna de los sistemas de recuperación de texto.

Cuestiones relacionadas