2010-02-02 23 views
6

Một trong những trang web lớn hơn của chúng tôi có một phần nơi người dùng có thể gửi câu hỏi đến chủ sở hữu trang web được nhân viên của anh ấy đánh giá cá nhân. Khi cùng một câu hỏi xuất hiện rất thường xuyên, họ có thể thêm câu hỏi cụ thể này vào Faq.Làm cách nào để tạo công cụ 'câu hỏi liên quan'?

Để ngăn không cho chúng nhận được hàng tá câu hỏi tương tự mỗi ngày, chúng tôi muốn cung cấp tính năng tương tự như 'Câu hỏi liên quan' trên trang web này (ngăn xếp ngăn xếp).

Có cách nào để xây dựng loại tính năng này? Tôi biết rằng tôi bằng cách nào đó nên đánh giá các câu hỏi và so sánh nó với các câu hỏi trong faq nhưng làm thế nào so sánh này hoạt động? Các từ khóa được trích xuất và nếu như vậy thì sao?

Có thể đáng nói đến trang web này được xây dựng trên LAMP stack vì vậy đây là những công nghệ có sẵn.

Cảm ơn!

+0

trùng lặp có thể xảy ra [Stackoverflow Hỏi & Related] (http://stackoverflow.com/questions/393505/stackoverflows-related-questions) –

Trả lời

3

Tôi không biết Stack Overflow hoạt động như thế nào, nhưng tôi đoán rằng nó sử dụng thẻ để tìm câu hỏi liên quan. Ví dụ, về câu hỏi này, một số câu hỏi có liên quan hàng đầu đều có thẻ recommendation-engine. Tôi đoán rằng các trận đấu trên các thẻ hiếm hơn được tính nhiều hơn so với các trận đấu trên các thẻ phổ biến.

Bạn cũng có thể muốn xem term frequency–inverse document frequency.

+2

Và có lẽ là kích thước của giao giữa các bộ thẻ. – jensgram

4

Nếu bạn muốn xây dựng một cái gì đó như thế này cho mình từ đầu, bạn muốn sử dụng một cái gì đó được gọi là TF/IDF: Tần suất Tần số/Tần suất nghịch đảo. Điều đó có nghĩa, để đơn giản hóa nó rất nhiều, bạn tìm thấy các từ trong truy vấn không phổ biến trong toàn bộ kho văn bản và tìm các tài liệu có các từ đó.

Nói cách khác, nếu ai đó nhập truy vấn có dòng chữ "Tôi muốn mua một con voi" trong đó, sau đó là từ trong truy vấn, từ "con voi" có lẽ là từ ít phổ biến nhất trong kho văn bản của bạn. "Mua" có lẽ là tiếp theo. Vì vậy, bạn xếp hạng tài liệu (trong trường hợp của bạn, truy vấn trước đó) bởi bao nhiêu họ chứa từ "con voi" và sau đó bao nhiêu họ chứa từ "mua". Các từ "I", "to" và "an" có thể nằm trong danh sách dừng, vì vậy bạn bỏ qua chúng hoàn toàn. Bạn xếp hạng từng tài liệu (truy vấn trước đó, trong trường hợp của bạn) theo số lượng từ phù hợp (trọng số theo tần suất tài liệu ngược - nghĩa là trọng số cao cho các từ không phổ biến) và hiển thị số ít từ đầu.

Tôi đã đơn giản hóa và bạn cần phải đọc về điều này để làm đúng, nhưng thực sự không phức tạp để triển khai một cách đơn giản. Các trang Wikipedia có thể là một nơi tốt để bắt đầu:

http://en.wikipedia.org/wiki/Tf%E2%80%93idf

1

Với bạn đang làm việc trong một LAMP stack, sau đó bạn sẽ có thể tận dụng tốt các MySQL's Fulltext search functions. Mà tôi tin rằng làm việc trên các TF-IDF hiệu trưởng, và nên làm cho nó khá dễ dàng để tạo ra các 'câu hỏi liên quan' mà bạn muốn.

1

Có một cuốn sách tuyệt vời của O'Reilly - Programming Collective Intelligence - bao gồm khám phá nhóm, đề xuất và các chủ đề tương tự khác. Từ bộ nhớ, các ví dụ có trong Perl, nhưng tôi thấy dễ hiểu từ một nền tảng PHP và trong vòng vài giờ đã tạo ra một cái gì đó giống như những gì bạn đang theo dõi.

Yahoo có một webservice từ khóa vắt tại http://developer.yahoo.com/search/content/V1/termExtraction.html

+0

Các mẫu tôi đang tìm trong bản xem trước của O'reilly là * P.C.I. * có trong Python. – isomorphismes