2011-10-12 21 views
5

Kurumlar listesi (üniversiteler, hastaneler, vb) ile büyük bir veritabanına sahibim. Kurumların isimleri farklı kaynaklardan gelir ve aynı kurum için farklı şekilde yazılabilir. Örneğin yanlış yazılabilirler veya kelimeler kısaltılabilir ("uni" veya "univ" veya "üniversite")yaklaşık arama veritabanında yaklaşık

Veritabanına eklemem gereken bir ad verildiğinde, pratik bir yol var mı? Bu kurumun veritabanında olup olmadığını bulmak için? Bu bir araştırma projesi değil, bu yüzden oldukça hızlı bir çözüm arıyorum.

django ve postgresql kullanıyorum, ama sanmıyorum önemli değil.

+0

Hangi sürümü PostgreSQL kullanıyorsunuz? – Kuberchaun

+0

Herhangi bir sürümü yükleyebilirim. Yani, en son varsayım. – akonsu

cevap

5

Bu, record linkage'un sorundur. Birçok veri tabanları "üniversite" gibi bir terim

[ "uni", "NIV", "ive", "ver" genişletilir bu tür karakter düzeyi olarak n -g eşleştirme, temel yöntemler sağlamak, n = 3 için "ers", ...]

veritabanı indeks bu tür tüm n -grams olur ve ağırlıklı eşleştirme çeşit bir arama izin verir. pg_trgm tam olarak böyle görünüyor, onu deneyin.

0

Veritabanında, verdiğiniz değerden küçük bir sözlükle bir değer bulmak istediğiniz gibi görünüyor. Önekleri olan şeyleri bulmak oldukça basittir, ancak yanlış yazılmış kelimeler daha zordur. Peter Norvig's post on spell correctors'u okumak isteyebilirsiniz.

+0

Norvig'in algoritması bu kadar aşırı derecede saf olmazsa, bu güzel olurdu. Ağırlıklı Levenshtein automata (belki de bir trie formunda) çalışmasını sağlar, ancak her bulanık aramada aşırı sayıda erişimi önlemek için veritabanı tarafında uygulanmalıdır. Bununla iyi şanslar ... –

1

Muhtemelen özel bir arama motoru kullanmayı düşünmelisiniz. Django-haystack kolayca kolayca projenize Solr, Whoosh veya Xapian gibi arama motorları ekleyebilirsiniz.

İlgili konular