2011-10-12 14 views
5

Tengo una gran base de datos con una lista de instituciones (universidades, hospitales, etc.). Los nombres de las instituciones provienen de diferentes fuentes y se pueden escribir de manera diferente para la misma institución. Pueden escribirse mal, por ejemplo, o las palabras pueden acortarse ("uni", o "univ" o "universidad")búsqueda aproximada en una base de datos

Dado el nombre que necesito insertar en la base de datos, ¿hay alguna forma práctica? para encontrar si esta institución ya está en la base de datos? Este no es un proyecto de investigación, entonces estoy buscando una solución que sea razonablemente rápida.

Estoy usando django y postgresql, pero no importa, supongo.

+0

¿Qué versión de PostgreSQL está ejecutando? – Kuberchaun

+0

Puedo instalar cualquier versión. Entonces, el último, supongo. – akonsu

Respuesta

5

Este es el problema de record linkage. Muchas bases de datos proporcionan métodos básicos para este tales como el carácter de nivel n coincidente -gramo, donde un término como "universidad" se expande en

[ "uni", "niv", "ive", "ver", "res", ...]

para n = 3. La base de datos de índice de tales n -grams y permitir una búsqueda con algún tipo de juego ponderada. pg_trgm parece hacer exactamente esto, pruébelo.

0

Parece que quiere encontrar un valor en la base de datos con una pequeña distancia léxica del valor que le da. Encontrar cosas con prefijos es bastante sencillo, pero las palabras mal escritas son más difíciles. Es posible que desee leer Peter Norvig's post on spell correctors.

+0

Esto estaría bien si el algoritmo de Norvig no fuera tan extremadamente ingenuo. El autómata ponderado de Levenshtein (quizás en una forma pequeña) lo haría funcionar, pero aún tendría que implementarse en el lado de la base de datos para evitar números extremos de accesos para cada búsqueda difusa. Buena suerte con eso... –

1

Probablemente deberías utilizar un motor de búsqueda dedicado. Django-haystack le permite fácilmente agregar motores de búsqueda como Solr, Whoosh o Xapian a su proyecto.

Cuestiones relacionadas