приблизительный поиск в базе данных - PullRequest
5 голосов
/ 12 октября 2011

У меня большая база данных со списком учреждений (университетов, больниц и т. Д.).Названия учреждений происходят из разных источников и могут быть написаны по-разному для одного и того же учреждения.Например, они могут быть написаны с ошибками или слова могут быть сокращены («уни», «унив» или «университет»)

Если задано имя, которое нужно вставить в базу данных, есть липрактический способ узнать, есть ли это учреждение в базе данных?Это не исследовательский проект, поэтому я ищу достаточно быстрое решение.

Я использую django и postgresql, но это не имеет значения, я полагаю.

Ответы [ 3 ]

5 голосов
/ 12 октября 2011

Это проблема связывания записей . Многие базы данных предоставляют базовые методы для этого, такие как n -граммное сопоставление на уровне символов, где такой термин, как "университет", расширен до

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

для n = 3. База данных будет индексировать все такие n -граммы и разрешать поиск с каким-либо взвешенным соответствием. pg_trgm, кажется, делает именно это, попробуйте.

1 голос
/ 12 октября 2011

Возможно, вам стоит заняться поиском. Django-haystack позволяет легко добавлять поисковые системы, такие как Solr, Whoosh или Xapian, в ваш проект.

0 голосов
/ 12 октября 2011

Звучит так, будто вы хотите найти значение в базе данных с небольшим лексическим расстоянием от заданного вами значения. Найти вещи с префиксами довольно просто, но слова с ошибками сложнее. Возможно, вы захотите прочесть пост Питера Норвиг о корректорах заклинаний .

...