C# SEO系列之批量对比文章标题,取相关性最高的文章

时间:12-07-26 栏目:C#开发, SEO优化 作者:kyle 评论:0 点击: 5,747 次

昨天介绍了字符串相似度算法http://www.lingdonge.com/seo/672.html

后来又看到光年大虾老胡的扩展使用,批量对比所有文章的标题,获取特定数量的最高近匹配结果。

大概的流程是这样的:

1、取文章标题,再取大量的文章,做为最后的匹配。我们的目标是从大量的文章中取出相关性,即字符串相似度最高的文章。并列出来。

2、循环判断对比相似度,并存入List做排序。最后得到相关度最高近的文章。并投入使用。

尤其是采集中非常有用。

测试代码如下:

    public class TestSimilar
    {
        /// <summary>
        /// 把多个文章的相似度取出来,和关键词做对比,把相似度最高的文章排序出来
        /// 默认通过标题识别相似度
        /// </summary>
        public static List<string> TestScore(string title, List<string> articles)
        {
            //1、文章和所有文章做对比取出所有相似度。
            //2、所有的相似度做排序。最好的相关度就是最匹配的文章就拿出来
            List<string> list = new List<string>();

            SimilarJudge test = new SimilarJudge();
            SimilarJudge.SimilarInfo similarInfo = new SimilarJudge.SimilarInfo();
            similarInfo.Count = 5;//最相似度最高的几个结果,2取2个,默认取前5个

            foreach (string article in articles)
            {
                string content = string.Empty;
                //using (StreamReader sr = new StreamReader(article, Encoding.UTF8))
                //{
                //    content = sr.ReadToEnd();
                //}
                FileInfo fi = new FileInfo(article);
                content = fi.Name;//取文章标题做判断,也可以改上面的代码取文章内容做判断

                //计算出来文章的相似度
                double score = (double)new LevenshteinDistance().LevenshteinDistancePercent(title, content);
                //取相似度最多的文件并排序
                similarInfo = test.GetSimilarScore(score, article, similarInfo);
            }

            //得到结果
            foreach (SimilarJudge.ArticleInfo art in similarInfo.List_Similar_Info)
            {
                list.Add("相关度最高的文章是:" + art.Similar_Index + ";相关度得分是:" + art.Similar_Scores.ToString());
            }
            return list;
        }
    }

再贴出老胡的核心代码的排序

        /// <summary>
        /// 判断文章列表的相似度,最后排序,越相关的越排前面
        /// </summary>
        /// <param name="Similar_Scores">文章之间的相似得分,可以用算法取相似度做为值</param>
        /// <param name="Similar_Index">文章的索引,就是文章的标题或者其它能识别文章的字段或ID</param>
        /// <param name="tempData">临时结果,做叠加计算排序</param>
        /// <returns></returns>
        public SimilarInfo GetSimilarScore(double Similar_Scores, string Similar_Index, SimilarInfo tempData)
        {
            ArticleInfo tempArticle;
            if (tempData.Count <= 0)//如果数据量小于5,就等于5
                tempData.Count = 5;

            if (tempData.List_Similar_Info.Count < tempData.Count)
            {
                //如果数据量少于规定数量,绕过判断直接添加. 
                tempArticle = new ArticleInfo(Similar_Scores, Similar_Index);
                tempData.List_Similar_Info.Add(tempArticle);
                tempData.List_Similar_Info.Sort(delegate(ArticleInfo x, ArticleInfo y) { return x.Similar_Scores.CompareTo(y.Similar_Scores); });
            }
            else
            {
                //数组已满,需要判断后剔除最低得分数据 
                if (Similar_Scores > tempData.List_Similar_Info[0].Similar_Scores)
                {
                    //当前相似度得分高于最后一名. 
                    //将最后一个替换为较高分数的. 
                    tempData.List_Similar_Info[0] = new ArticleInfo(Similar_Scores, Similar_Index);
                    //重新排序下 
                    tempData.List_Similar_Info.Sort(delegate(ArticleInfo x, ArticleInfo y) { return x.Similar_Scores.CompareTo(y.Similar_Scores); });
                }
            }
            return tempData;
        }

完整代码,可以参照光年论坛或者自己百度一下。

代码要修改以后才方便使用。我就不贴出所有代码。自己找回来研究一下更好。

扩展利用:

我们可以使用大量的关键词,使用数据库中的文章的ID进行相似度计算,排序,整合结果,并加权,让文章的相似度不仅靠一个词来判定。这样可以更好的表现文章的效果。

最后计算结果小于多少的文章,直接删掉,可以有效的避免采集发布的内容出现完全不相关或者完全垃圾的情况。如果能整合更多算法进去,并高效处理的话。相信效果会非常好。

成都SEO小五嚎2句: 本文是(成都SEO小五)辛苦弄出来的,转载成都SEO小五原创的请保留链接: C# SEO系列之批量对比文章标题,取相关性最高的文章,3Q

C# SEO系列之批量对比文章标题,取相关性最高的文章:等您坐沙发呢!

来给哥评论评论


------====== 小五公告 ======------
成都SEO小五,专注成都搜索引擎优化。
小五善长站内外优化,C#、PHP开发,中英文SEO,Google中英文和百度优化技术。欢迎群内交流。伸手党请绕路,求资源的请绕开,求问题解答的请进群内交流。开放了一个QQ交流群:160750032。加入验证时请标注任何SEO相交字眼。友情链接直接Q我,收录正常,内容大部份原创、SEO或者程序开发、网络营销、线上推广等相关行业即可。

常用工具

赞助广告

来看过哥的人