2011-10-12 3 views
5

나는 기관들의 목록 (대학, 병원, 기타)의 거대한 데이터베이스가 있습니다. 교육 기관의 이름은 여러 출처에서 제공되며 동일한 교육 기관에서 철자가 다를 수 있습니다. 예를 들어 맞춤법이 틀리거나 단어를 짧게 할 수 있습니다 ("유니"또는 "유니버설"또는 "대학")데이터베이스에서 개체의 近似 검색

데이터베이스에 삽입해야하는 이름이 주어지면 실용적인 방법이 있습니까? 이 기관이 이미 데이터베이스에 있는지 확인 하시겠습니까? 이것은 연구 프로젝트가 아니므로 합리적으로 빠른 솔루션을 찾고 있습니다.

저는 django와 postgresql을 사용하고 있습니다.하지만 상관 없습니다.

+0

실행중인 PostgreSQL의 버전은 무엇입니까? – Kuberchaun

+0

모든 버전을 설치할 수 있습니다. 그래서, 내가 생각하는 최신. – akonsu

답변

5

이것은 record linkage의 문제입니다. 많은 데이터베이스는 문자 수준 n -gram matching과 같은 기본 방법을 제공합니다. 여기서 "university"와 같은 용어는

[ "uni", "ive", "ver" N = 3에 대한 "ERS", ...]

데이터베이스 인덱스 그러한 N -grams를 것이고 가중 정합 일종의 검색을 허용한다. pg_trgm 정확히 이것을 수행하는 것처럼 보입니다.

0

주어진 값에서 어휘 거리가 작은 값을 데이터베이스에서 찾는 것처럼 들리는군요. 접두사를 사용하여 물건을 찾는 것은 간단하지만 철자가 틀린 단어는 더 어렵습니다. Peter Norvig's post on spell correctors을 읽고 싶을 수도 있습니다.

+0

Norvig의 알고리즘이 그렇게 순진하지 않으면 좋을 것입니다. 가중치를 적용한 Levenshtein automata (아마도 trie 형식)는 작동하도록 만들지 만 모든 퍼지 검색에 대한 극단적 인 액세스 횟수를 방지하기 위해 데이터베이스 측에서 구현해야합니다. 좋은 결과 내길 바랄 게... –

1

아마도 전용 검색 엔진을 사용해야합니다. Django-haystack을 사용하면 으로 쉽게에 Solr, Whoosh 또는 Xapian과 같은 검색 엔진을 프로젝트에 추가 할 수 있습니다.

관련 문제