2011-10-12 42 views
5

Tôi có một cơ sở dữ liệu lớn với danh sách các tổ chức (trường đại học, bệnh viện, v.v ...). Tên của các tổ chức đến từ các nguồn khác nhau và có thể được viết khác nhau cho cùng một tổ chức. Ví dụ: chúng có thể sai chính tả hoặc từ có thể được rút ngắn ("uni" hoặc "univ" hoặc "university")tìm kiếm gần đúng trong cơ sở dữ liệu

Đặt tên mà tôi cần chèn vào cơ sở dữ liệu, có cách thiết thực không để tìm xem tổ chức này đã có trong cơ sở dữ liệu chưa? Đây không phải là một dự án nghiên cứu, vì vậy tôi đang tìm kiếm một giải pháp hợp lý nhanh chóng.

Tôi đang sử dụng django và postgresql, nhưng không thành vấn đề tôi cho là vậy.

+0

Bạn đang chạy phiên bản PostgreSQL nào? – Kuberchaun

+0

Tôi có thể cài đặt bất kỳ phiên bản nào. Vì vậy, mới nhất tôi cho là. – akonsu

Trả lời

5

Đây là vấn đề của record linkage. Nhiều cơ sở dữ liệu cung cấp các phương pháp cơ bản cho việc này như kết hợp theo ký tự n đối tượng, trong đó cụm từ như "trường đại học" được mở rộng thành

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

cho n = 3. Cơ sở dữ liệu sẽ index tất cả các ví dụ n -grams và cho phép tìm kiếm với một số loại hợp quân gia quyền. pg_trgm dường như làm chính xác điều này, hãy dùng thử.

0

Có vẻ như bạn muốn tìm một giá trị trong cơ sở dữ liệu với khoảng cách từ vựng nhỏ so với giá trị bạn đã đưa ra. Việc tìm kiếm những thứ có tiền tố khá đơn giản, nhưng những từ sai chính tả thì khó hơn. Bạn có thể muốn đọc Peter Norvig's post on spell correctors.

+0

Điều này sẽ tốt đẹp nếu thuật toán của Norvig không quá ngây thơ. Tự động Levenshtein có trọng số (có thể ở dạng trie) sẽ làm cho nó hoạt động, nhưng vẫn phải được thực hiện ở phía cơ sở dữ liệu để ngăn chặn số lượng truy cập cực đối với mọi tìm kiếm mờ. Chúc may mắn với điều đó... –

1

Có thể bạn nên xem xét sử dụng công cụ tìm kiếm chuyên dụng. Django-haystack cho phép bạn dễ dàng thêm các công cụ tìm kiếm như Solr, Whoosh hoặc Xapian vào dự án của bạn.