Как найти "связанные элементы" в PHP
мы часто видим "связанные элементы". Например, в блогах у нас есть связанные должности, в книгах у нас есть связанные книги и т.д. Мой вопрос заключается в том, как мы скомпилируем эти релевантности? Если это просто тег, я часто вижу связанные элементы, которые не имеют одного и того же тега. Например, при поиске "розового" связанный элемент может иметь "фиолетовый" тег.
У кого-нибудь есть идеи?
Ответы
Ответ 1
Существует множество способов вычисления подобия двух элементов, но для простого метода взгляните на коэффициент Jaccard.
http://en.wikipedia.org/wiki/Jaccard_index
Что такое: J (a, b) = пересечение (a, b)/union (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.
Ответ 2
Вот несколько способов:
- Вручную подключить их. Поместите таблицу с полями
item_id
и related_item_id
, затем создайте интерфейс для вставки соединений. Полезно связать два элемента, которые связаны друг с другом, но не имеют сходства или не относятся к одной и той же категории/тегу (или в таблице без рубрики). Пример: ванна и резиновая утка
- Подтяните некоторые элементы, относящиеся к той же категории, или аналогичные теги. Идея состоит в том, что эти элементы должны быть несколько взаимосвязаны, поскольку они относятся к одной категории. Пример: на ЖК-мониторах просмотра страниц в разделе "Связанные предметы" есть случайные ЖК-мониторы (с одинаковым ценовым диапазоном/производителем/разрешением).
- Сделайте текстовый поиск, сопоставляющий текущее имя элемента (и/или описание) с другими элементами в таблице. Вы получаете идею.
Ответ 3
Чтобы получить простой список связанных элементов на основе тегов, основные решения выглядят следующим образом:
3 таблицы, один с элементами, один с тегами и один с соединением. Таблица соединений состоит из двух столбцов: по одному для каждого идентификатора из остальных таблиц. Запись в таблице соединений связывает тег с элементом, помещая их соответствующие идентификаторы в строку.
Теперь, чтобы получить список связанных элементов.
выберите все элементы, которые содержат по крайней мере один тег с исходным элементом. не забудьте взять теги вместе с элементами, а затем использовать простой механизм оценки, чтобы определить, какой элемент разделяет большинство тегов с оригинальным. каждый тег увеличивает релевантность отношения на единицу.
В зависимости от ваших привычек пометки, возможно, было бы разумно добавить некоторый контр-механизм, чтобы предотвратить добавление значительных перекрывающих тегов. для достижения этого вы могли бы придать больший вес метокам ниже определенного порога приборов. Порог, который обычно хорошо работал у меня, - total_number_of_tag_appliances/total_number_of_tags, что приводит к среднему числу устройств. Если счетчик тегов меньше среднего, релевантность отношений увеличивается вдвое.
Ответ 4
Это может быть больше, чем тег, например, он может быть средним для каждой работы, отображаемой в абзаце, а затем заголовков и т.д.
Ответ 5
Я бы сказал, что они используют ontology для того, что добавляет в приложение более интересные функции.
Ответ 6
он также может быть основан на "люди, которые купили эту книгу, также купили"
Независимо от того, как вам, вам понадобится какая-то порция связи между вашими предметами, и они будут в основном сделаны людьми
Ответ 7
Это моя реализация (GIST) индекс Jaccard с PostgreSQL и Ruby on Rails...
Ответ 8
Вот реализация индекса jaccard между двумя текстами на основе биграмм.
https://packagist.org/packages/darkopetreski/textcategorization