16

我们经常看到“相关项目”。例如,在博客中我们有相关的帖子,在书籍中我们有相关的书籍等。我的问题是我们如何编译这些相关性?如果只是标签,我经常会看到没有相同标签的相关项目。例如,当搜索“粉红色”时,相关项目可能有一个“紫色”标签。

有人有什么想法吗?

4

8 回答 8

30

有很多方法可以计算两个项目的相似度,但是对于一种简单的方法,请查看 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.
于 2010-01-28T08:40:14.323 回答
4

以下是一些方法:

  1. 手动连接它们。用字段item_id和建立一个表格related_item_id,然后创建一个接口来插入连接。用于关联两个相关但不相似或不属于同一类别/标签(或未分类条目表)的项目。示例:浴缸和橡皮鸭
  2. 拉出一些属于同一类别或具有相似标签的项目。这个想法是这些项目必须在某种程度上相关,因为它们属于同一类别。示例:在查看液晶显示器的页面中,“相关项目”部分中有随机液晶显示器(价格范围/制造商/分辨率相同)。
  3. 对表中的其他项目执行匹配当前项目名称(和/或描述)的文本搜索。你明白了。
于 2010-01-28T08:42:00.227 回答
2

要获得基于标签的相关项目的简单列表,基本解决方案如下:

3张桌子,一张带物品,一张带标签,一张带连接。连接表由两列组成,一列对应其余表中的每个 id。连接表中的条目通过将它们各自的 id 放在一行中来将标签与项目链接起来。

现在,获取相关项目的列表。

获取与原始项目至少共享一个标签的所有项目。确保将标签与项目一起获取,然后使用简单的评级机制来确定哪个项目与原始项目共享最多的标签。每个标签将关系相关性增加一。

根据您的标记习惯,添加一些反机制以防止大型总体标记混淆相关性可能是明智的。为了实现这一点,您可以为低于某个电器阈值的标签赋予更大的权重。通常对我来说效果很好的阈值是total_number_of_tag_appliances/total_number_of_tags,它会产生平均电器数量。如果标签设备计数小于平均值,则关系相关性增加一倍。

于 2012-03-06T14:01:53.493 回答
1

我会说他们使用本体来为应用程序添加更多强大的功能。

于 2010-06-07T10:30:49.210 回答
1

它可以不仅仅是一个标签,例如它可以是段落中出现的每个作品的平均值,然后是标题等

于 2010-01-28T08:02:27.650 回答
0

也可以基于“买了这本书的人也买了”

无论如何,您的物品之间都需要一些联系,而且它们大多是由人类制造的

于 2010-01-28T08:20:56.093 回答
0

这是我使用 PostgreSQL 和 Ruby on Rails实现的Jaccard 索引(GIST) ...

于 2011-07-12T20:55:07.630 回答
0

这是基于二元组的两个文本之间的jaccard索引的实现。 https://packagist.org/packages/darkopetreski/textcategorization

于 2017-03-13T11:14:47.547 回答