2010-01-28 27 views
15

chúng ta thường thấy 'các mục có liên quan'. Ví dụ trong blog, chúng tôi có các bài viết liên quan, trong sách chúng tôi có sách liên quan, vv Câu hỏi của tôi là làm cách nào để chúng tôi biên dịch những mức độ liên quan đó? Nếu chỉ là thẻ, tôi thường thấy các mục có liên quan không có cùng một thẻ. Ví dụ: khi tìm kiếm 'màu hồng', một mục có liên quan có thể có thẻ 'màu tía'.Cách tìm "các mục có liên quan" trong PHP

Bất kỳ ai cũng có ý tưởng gì?

+0

Đây cũng là câu hỏi liên quan http://stackoverflow.com/questions/18019976/mysql-php-find-similar-related-items-by-tag-taxonomy –

Trả lời

29

có rất nhiều cách để tính toán giống nhau của hai mặt hàng, nhưng đối với một phương pháp đơn giản, mất xem xét hệ số Jaccard.

http://en.wikipedia.org/wiki/Jaccard_index

Đó là: J (a, b) = giao điểm (a, b)/đoàn (a, b)

So lets say you want to compute the coefficient of two items: 

Item A, which has the tags "books, school, pencil, textbook, reading" 
Item B, which has the tags "books, reading, autobiography" 

intersection(A,B) = books, reading 
union(A,B) = books, school, pencil, textbook, reading, autobiography 

so J(a,b) = 2/6 = .333 

So the most related item to A would be the item which results in the highest Jaccard Coefficient when paired with A. 
1

Nó có thể có nhiều hơn một thẻ, ví dụ nó có thể là trung bình của mỗi công việc xuất hiện trong một đoạn văn, và sau đó tiêu đề, vv

0

nó cũng có thể dựa trên "những người mua cuốn sách này cũng mua"

Không có vấn đề như thế nào, bạn sẽ cần một số dort của mối liên hệ giữa các mục của bạn, và họ chủ yếu sẽ được thực hiện bởi con người

4

Dưới đây là một số trong những cách sau:

  1. Kết nối thủ công chúng. Đặt một bảng với các trường item_idrelated_item_id, sau đó tạo giao diện để chèn các kết nối. Hữu ích để liên kết hai mục có liên quan nhưng không giống nhau hoặc không thuộc cùng một danh mục/thẻ (hoặc trong bảng mục nhập chưa được phân loại). Ví dụ: Bồn tắm và cao su ducky
  2. Kéo lên một số mục thuộc cùng một danh mục hoặc có thẻ tương tự. Ý tưởng là các mục đó phải liên quan một chút vì chúng nằm trong cùng một danh mục. Ví dụ: trong trang xem màn hình LCD, có màn hình LCD ngẫu nhiên (với cùng một phạm vi giá/nhà sản xuất/độ phân giải) trong phần "Các mục có liên quan".
  3. Thực hiện tìm kiếm văn bản phù hợp với tên của mục hiện tại (và hoặc mô tả) so với các mục khác trong bảng. Bạn có được ý tưởng.
1

Tôi muốn nói rằng họ sử dụng ontology để có thêm nhiều tính năng tuyệt vời hơn cho ứng dụng.

2

Để có được một danh sách đơn giản các mặt hàng liên quan dựa trên thẻ, các giải pháp cơ bản đi như thế này:

3 bảng, một với các mục, một với thẻ và một với kết nối. Bảng kết nối bao gồm hai cột, một cột cho mỗi id từ các bảng còn lại. Một mục trong bảng kết nối liên kết thẻ với một mục bằng cách đặt các id tương ứng của chúng trong một hàng.

Bây giờ, để có danh sách các mục có liên quan.

tìm nạp tất cả các mục chia sẻ ít nhất một thẻ với mục gốc. hãy chắc chắn tìm nạp các thẻ cùng với các mục và sau đó sử dụng cơ chế xếp hạng đơn giản để xác định, mục nào chia sẻ nhiều thẻ nhất với thẻ gốc. mỗi thẻ tăng mối quan hệ liên quan của một.

Tùy thuộc vào thói quen gắn thẻ của bạn, bạn nên thêm một số cơ chế phản đối để ngăn các thẻ bao quát lớn trộn lẫn tính thích hợp. để đạt được điều này, bạn có thể cung cấp trọng lượng lớn hơn cho các thẻ bên dưới ngưỡng thiết bị nhất định. Ngưỡng mà thường hoạt động tốt với tôi, là total_number_of_tag_appliances/total_number_of_tags, kết quả là số lượng thiết bị trung bình. Nếu số lượng thiết bị thẻ nhỏ hơn mức trung bình, mức độ liên quan của mối quan hệ được tăng gấp đôi.

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