我们经常看到“相关项目”。例如在博客中我们有相关的帖子,在书中我们有相关的书籍等等。我的问题是我们如何编译这些相关性?如果它只是标记,我经常会看到没有相同标记的相关项目。例如,当搜索“粉红色”时,相关项可能会有“紫色”标记。
任何人都有任何想法?
答案 0 :(得分:31)
有很多方法可以计算两个项目的相似度,但是对于一个简单的方法,请看一下Jaccard系数。
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.
答案 1 :(得分:4)
以下是一些方法:
item_id
和related_item_id
的表,然后创建一个接口以插入连接。用于关联两个相关但没有相似性或不属于同一类别/标签(或未分类的条目表)的项目。示例:浴缸和橡皮鸭子答案 2 :(得分:2)
要根据标签获取相关项目的简单列表,基本解决方案如下:
3个表,一个包含项目,一个包含标签,另一个包含连接。连接表由两列组成,其中一列用于其余表中的每个id。连接表中的条目通过将标记与项目放在一行来链接标记。
现在,获取相关项目列表。
获取与原始项目共享至少一个标记的所有项目。一定要获取标签以及项目,然后使用简单的评级机制来确定哪个项目与原始项目共享最多的标签。每个标签将关系相关性提高一个。
根据您的标记习惯,添加一些反制机制以防止大型标记混淆相关性可能是明智之举。为实现这一目标,您可以为低于特定阈值设备的标签赋予更大的权重。对我来说通常很有效的阈值是total_number_of_tag_appliances / total_number_of_tags,这导致平均设备数量。如果标签appliance-count小于平均值,则关系相关性会增加一倍。
答案 3 :(得分:1)
它可以不仅仅是一个标签,例如它可以是段落中出现的每个作品的平均值,然后是标题等等。
答案 4 :(得分:1)
我会说他们使用ontology来为应用程序添加更多强大的功能。
答案 5 :(得分:0)
它也可以基于“购买此书的人也购买”
无论如何,你的物品之间需要一些连接,而且它们大部分都是由人类制造的
答案 6 :(得分:0)
这是implementation(GIST) Jaccard index的{{3}}和PostgreSQL以及Ruby on Rails ......
答案 7 :(得分:0)
这是基于bigrams的两个文本之间的jaccard索引的实现。 https://packagist.org/packages/darkopetreski/textcategorization