基于常用标签对相关文章进行排序

时间:2013-01-24 18:23:43

标签: c# asp.net algorithm sorting

我有很多文章可以有多个标签。我想拿一篇文章并根据相互标签获得相关文章列表。

因此,如果articla A与B条共有3个标签,但只有2个标签与C条相同,那么相关文章列表中的B应高于C条。

我想对算法提出一些建议

3 个答案:

答案 0 :(得分:1)

我为我公司网站的相关内容做了一个简单的版本,这些内容也与标签相匹配。该代码创建一个新的匿名类型,其中包含项目和匹配标记计数作为其两个属性,然后您可以按匹配数量排序。

以下是我使用的基本算法(其中GetAllItems()返回Tags属性类型为string[]的项目列表,而tagsToMatch是另一个的可枚举item的标签):

return GetAllItems()
         .Select(item => new { Item = item, MatchedTagCount = item.Tags.Intersect(tagsToMatch).Count() })
         .OrderByDescending(a => a.MatchedTagCount)
         .Select(a => a.Item);

答案 1 :(得分:0)

好吧,我们假设Article是班级,而TagsList<Tag>,是Article的成员。然后快速思考你可以做这样的事情(请记住,你可能需要稍微改编一下代码,但这个想法就是:

class Article
{
    public List<Tag> Tags { get; set; }
}

//get related to a
Article a;
List<Article> allArticles;

//So, first filter to get all articles that have at least one tag in common then sort by the count of tags in common
List<Article> related = allArticles.Where(x=> x.Tags.Any(t=> a.Tags.Contains(t))
                         .OrderByDescending(x => x.Tags.Intersect(a.Tags).Count())
                         .ToList();

答案 2 :(得分:0)

一种方法是使用带有标签和文章表的数据库,然后使用查询来查找匹配项。这将是最简单的编程,但需要一个数据库。

另一种方法是扫描每篇文章并找到具有最大匹配标签的文章。如果每篇文章没有太多标签,这可能足够快。

第三种方法是索引所有标记,并在每个叶节点中包含指向与该标记关联的所有文章的链接。这将比以前的方法更快,但需要更多的编程。