2010-10-23 43 views
6

Tôi muốn xây dựng một công cụ tìm kiếm nội bộ (Tôi có một bộ sưu tập rất lớn gồm hàng nghìn tệp XML) có thể ánh xạ các truy vấn đến các khái niệm. Ví dụ, nếu tôi tìm kiếm "những chú mèo lớn", tôi cũng muốn các kết quả được xếp hạng cao để trả lại các tài liệu với "những con mèo lớn". Nhưng tôi cũng có thể quan tâm đến việc nó trả lại "những con vật khổng lồ", mặc dù có điểm số liên quan thấp hơn nhiều.Làm thế nào để xây dựng một công cụ tìm kiếm khái niệm?

Tôi hiện đang đọc qua chế độ Tự động xử lý ngôn ngữ trong Python, và có vẻ như WordNet có một số ánh xạ từ có thể hữu ích, mặc dù tôi không biết cách tích hợp vào công cụ tìm kiếm. Tôi có thể sử dụng Lucene để làm điều này? Làm sao?

Từ nghiên cứu sâu hơn, có vẻ như "phân tích ngữ nghĩa tiềm ẩn" có liên quan đến những gì tôi đang tìm kiếm nhưng tôi không chắc chắn cách triển khai nó.

Bất kỳ lời khuyên nào về cách thực hiện việc này?

Trả lời

9

Tôi không chắc chắn cách tích hợp công cụ đó vào công cụ tìm kiếm. Tôi có thể sử dụng Lucene để làm điều này? Làm sao?

Bước 1. Dừng.

Bước 2. Nhận một cái gì đó để hoạt động.

Bước 3. Lúc đó, bạn sẽ hiểu thêm về Python và Lucene cũng như các công cụ khác và cách bạn có thể tích hợp chúng.

Đừng bắt đầu bằng cách cố gắng giải quyết các vấn đề tích hợp. Phần mềm có thể luôn được tích hợp. Đó là điều mà một hệ điều hành thực hiện. Nó tích hợp phần mềm. Đôi khi bạn muốn tích hợp "chặt chẽ hơn", nhưng đó là không bao giờ vấn đề đầu tiên cần giải quyết.

Vấn đề đầu tiên cần giải quyết là tìm kiếm hoặc khái niệm của bạn hoặc bất cứ điều gì để làm việc như một ứng dụng dòng lệnh câm cũ.Hoặc cặp ứng dụng đan xen với nhau bằng cách truyền các tập tin xung quanh hoặc đan xen với các ống hệ điều hành hoặc một cái gì đó.

Sau đó, bạn có thể thử và tìm hiểu cách làm cho trải nghiệm người dùng liền mạch.

Nhưng đừng bắt đầu tích hợp và không dừng lại vì câu hỏi tích hợp. Đặt tích hợp sang một bên và nhận được một cái gì đó để làm việc.

+0

Điểm tốt khi bắt đầu đơn giản. Trong trường hợp này, mặc dù khách hàng tiềm năng cho ứng dụng tôi đang xây dựng đã có công cụ tìm kiếm "bình thường". Tôi có lý do để tin rằng một động cơ thông minh hơn có thể thêm giá trị hữu hình, đó là lý do tại sao tôi muốn biết nếu nó là một vấn đề khả thi để tấn công trước khi tôi nhảy vào để tạo ra một sản phẩm "tôi-quá". – DevX

+0

@DevX: Vui lòng chậm lại. Một "động cơ thông minh hơn" là một điều. Xây dựng cái đó trước. Tích hợp là ít nhất của bạn lo lắng. Lưu điều đó cho lần cuối sau khi bạn nhận được "công cụ thông minh hơn" hoạt động. Tôi sẽ lặp lại điều này, bởi vì bạn dường như không đọc nó: tích hợp có thể được để lại cho cuối cùng, sau khi bạn nhận được một số kinh nghiệm với các công cụ và giải quyết vấn đề cơ bản. –

+0

+1 cho bước 2. – Skarab

1

Đây là vấn đề cực kỳ khó và không thể giải quyết theo cách luôn luôn tạo ra kết quả phù hợp. Tôi muốn đề nghị để dính vào một số nguyên tắc rất đơn giản thay vì vậy mà các kết quả ít nhất là dự đoán được. Tôi nghĩ bạn cần 2 thứ: một số công cụ hình thái cơ bản cộng với một từ điển các từ đồng nghĩa.

Bất cứ khi nào một truy vấn tìm kiếm đến, cho mỗi từ bạn

  1. Hãy tìm một trận đấu đen
  2. "Normalize/canonicalze" từ sử dụng công cụ hình thái, tức là làm cho nó ít, hình thức đầu tiên, vv và tìm kiếm trận đấu
  3. Hãy tìm từ đồng nghĩa của từ

Sau đó lặp lại cho tất cả các kết hợp của những từ đầu vào, tức là "mèo lớn", "mèo lớn", "mèo lớn" mèo lớn" vv

Trong thực tế, bạn cũng cần lưu trữ dữ liệu chỉ mục của mình dưới dạng chuẩn tắc (singluar, biểu mẫu đầu tiên, v.v.) cùng với biểu mẫu dạng chữ.

Đối với các khái niệm, chẳng hạn như mèo cũng là động vật - đây là nơi nó trở nên phức tạp. Nó chưa bao giờ thực sự hiệu quả, bởi vì nếu không thì Google đã có thể trả lại các kết quả khái niệm, nhưng nó không làm điều đó.

+1

Ý tưởng tuyệt vời về việc sử dụng chuẩn hóa trước. NLTK Library/WordNet có thể được sử dụng để làm điều này cho chắc chắn. Tôi sẽ không bỏ qua việc gắn thẻ khái niệm là không thực tế bởi vì Google chưa thực hiện nó. Google xử lý các truy vấn rất mở trên hàng tỷ trang. Thực hiện tìm kiếm khái niệm cho chúng sẽ mở ra một hộp sâu và bên cạnh đó, người dùng thường chỉ quan tâm đến 10 câu trả lời hàng đầu. Đó là, những người tìm kiếm chung muốn có độ chính xác cao. Đối với ứng dụng của tôi, bề rộng là một đặc điểm quan trọng của chất lượng của kết quả. Tôi không muốn bỏ lỡ bất cứ điều gì có liên quan. – DevX

0

Trước tiên, viết một đoạn mã python sẽ trả lại cho bạn dứa, cam, đu đủ khi bạn nhập vào quả táo. Bằng cách tập trung vào "là" mối quan hệ của mạng ngữ nghĩa. Sau đó tiếp tục với một mối quan hệ và như vậy.

Tôi nghĩ cuối cùng, bạn có thể nhận được một đoạn mã khá đầy đủ cho một dự án trường học.

1

Trước tiên, tôi đồng ý với hầu hết các lời khuyên ở đây về việc bắt đầu chậm và xây dựng các bit và phần của kế hoạch lớn này, tạo ra một sản phẩm đầu tiên tối thiểu và tiếp tục từ đó. Thứ hai, nếu bạn muốn sử dụng một số chức năng Wordnet với Lucene, có một contrib package để giao tiếp truy vấn Lucene với Wordnet. Tôi không biết liệu nó đã được chuyển sang pylucene hay chưa. Chúc may mắn và cẩn thận ở ngoài đó.

Các vấn đề liên quan