Как найти "связанные элементы" в PHP


Мы часто видим "связанные элементы". Например, в блогах у нас есть связанные посты, в книгах у нас есть связанные книги и т. Д. Мой вопрос в том, как мы составляем эти релевантности? Если это просто тег, я часто вижу связанные элементы, у которых нет одного и того же тега. Например, при поиске "розовый" связанный элемент может иметь тег "фиолетовый".

У кого-нибудь есть какие-нибудь идеи?

Author: Álvaro González, 2010-01-28

8 answers

Существует множество способов вычисления сходства двух элементов, но для простого метода взгляните на коэффициент Джаккарда.

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

Что означает: J(a, b) = пересечение(a, b)/объединение(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.
 31
Author: sfrench, 2010-01-28 08:40:14

Вот некоторые из способов:

  1. Подключение их вручную. Создайте таблицу с полями item_id и related_item_id, затем создайте интерфейс для вставки соединений. Полезно связать два элемента, которые связаны, но не имеют сходства или не принадлежат к одной и той же категории/тегу (или в таблице записей без категорий). Пример: Ванна и резиновая уточка
  2. Найдите некоторые элементы, которые относятся к той же категории или имеют похожий тег. Идея состоит в том, что эти предметы должны быть несколько связанные, так как они находятся в одной категории. Пример: на странице просмотра ЖК-мониторов в разделе "Связанные товары" представлены случайные ЖК-мониторы (с одинаковым ценовым диапазоном/производителем/разрешением).
  3. Выполните текстовый поиск, сопоставляя имя (и/или описание) текущего элемента с другими элементами в таблице. Вы поняли идею.
 4
Author: andyk, 2010-01-28 08:42:00

Чтобы получить простой список связанных элементов на основе тегов, основные решения выглядят следующим образом:

3 таблицы, одна с элементами, одна с тегами и одна с подключением. Таблица соединений состоит из двух столбцов, по одному для каждого идентификатора из остальных таблиц. Запись в таблице соединений связывает тег с элементом, помещая их соответствующие идентификаторы в строку.

Теперь, чтобы получить этот список связанных элементов.

Извлеките все элементы, которые имеют хотя бы один общий тег с оригиналом пункт. обязательно извлеките теги вместе с элементами, а затем используйте простой механизм оценки, чтобы определить, какой элемент имеет наибольшее количество тегов с исходным. каждый тег увеличивает релевантность отношения на единицу.

В зависимости от ваших привычек пометки, возможно, было бы разумно добавить какой-нибудь встречный механизм, чтобы предотвратить смешивание больших общих тегов с релевантностью. чтобы достичь этого, вы могли бы придать больший вес тегам ниже определенного порога устройств. Порог, который обычно имеет хорошо сработало для меня, это total_number_of_tag_appliances/total_number_of_tags, что приводит к среднему количеству устройств. Если количество устройств тегов меньше среднего, релевантность отношений увеличивается вдвое.

 2
Author: hans, 2012-03-06 14:01:53

Это может быть больше, чем тег, например, это может быть среднее значение каждой работы, появляющейся в абзаце, а затем заголовки и т. Д.

 1
Author: Sarfraz, 2010-01-28 08:02:27

Я бы сказал, что они используют онтологию для того, что добавляет в приложение больше возможностей.

 1
Author: Bakhtiyor, 2010-06-07 10:30:49

Он также может быть основан на "люди, которые купили эту книгу, также купили"

Независимо от того, как, вам понадобится какая-то связь между вашими предметами, и в основном они будут сделаны людьми

 0
Author: Natrium, 2010-01-28 08:20:56

Это моя реализация (СУТЬ) индекса Джаккарда с PostgreSQL и Ruby на рельсах...

 0
Author: Oto Brglez, 2011-07-12 20:55:07

Здесь представлена реализация индекса джаккарда между двумя текстами, основанными на биграммах. https://packagist.org/packages/darkopetreski/textcategorization

 0
Author: darpet, 2017-03-13 11:14:47