我想做一些类似于gmail的“考虑在我的博客上包含”建议,但有标签。
我在考虑存储这样的标签集:
我想到了以下算法:
//a blog post is published
//it has the tags "A", "B" & "C" :
if the tag set "A,B,C" doesn't exist
create it
else
add 1 to "number of times used"
并建议标签:
//a blog post is being written.
//the author includes the tags "A" and "C"
//which tags should I suggest ?
find all the tags sets that contain "A" and "C"
among them, find the one with the highest "number of times used"
suggest the tags of the set not already picked (A & C)
有没有更好/更聪明的方法来完成这项任务?那数据库模型怎么样?我可以对其进行优化,以便像“设置包含A& C”这样的搜索不会太慢吗?
答案 0 :(得分:1)
我认为这是典型的数据关联挖掘和推荐问题。您可以尝试使用谷歌Apriori算法进行数据挖掘,并提出建议。
您的解决方案可行,但在我的选项中并不全面。例如设置“A,B”和设置“A,B,C”不是独立的集合。
答案 1 :(得分:1)
搜索模型问题:
你的模型对我来说似乎有点过于简单,因为非常频繁的标签最有可能始终是建议的标签,即使标签与A,C对更相关。
如果它们也连接到“查询”[此处的查询为A and B
],那么您可能应该对tf-idf模型进行调整,这会增加罕见字词,因为如果罕见的话术语通常与A and B
一起使用 - 它可能与它们非常相关。
这个想法很简单:如果标签经常与A and B
一起使用 - 请给它一个提升。 [TF]
另外,如果一个术语很少[该标签的总使用次数] - 给它一个提升[idf]
每个标签的“得分”将是合并的tf-idf得分
效果问题:
您也可以为此任务创建inverted index - 以加快搜索速度。
如果您使用的是java,apache lucene是一个可以帮助您的成熟库。