资源技术动态遗忘算法系列(五)文本相似度

遗忘算法系列(五)文本相似度

2019-10-31 | |  115 |   0

原标题:非主流自然语言处理——遗忘算法系列(五):文本相似度     

来源:CSDN          接:https://blog.csdn.net/gzdmcaoyc/article/details/50202359


前文介绍了词权重的计算方法,本篇介绍词权重的另一种应用:文本相似度计算。


算法原理

文本相似度计算的方法很多,我们这里通过计算“两篇文本中都出现的词汇的权重占比”来衡量相似的程度,具体计算公式如下:

image.png


词的权重利用前文中的公式获得:

image.png



代码实现

1、统计单篇文章的词汇权重

————————————————————————————————

 /// <summary>

        /// 更新文章的权重词典

        /// </summary>

        /// <param name="mdl">文章对象,定义了:标题、正文、权重词典</param>

        /// <param name="objKeyCharColl">邻键集,用于生成词库</param>

        /// <param name="objKeyWordColl">词库,用于分词</param>

        /// <param name="maxWordLen">分词的最大词长</param>

        /// <param name="bUpdateCharBondColl">是否更新邻键集</param>

        /// <param name="bUpdateKeyWordColl">是否更新词库</param>

        public static void UpdateArticleWeight(ArticleMDL mdl, MemoryBondColl<string> objKeyCharColl, MemoryItemColl<string> objKeyWordColl, int maxWordLen = 7, bool bUpdateCharBondColl = true, bool bUpdateKeyWordColl = true)

        {

            //引用文章对象中的权重字典,用于存放统计文章中各词的权重

            Dictionary<string, double> objKeyWordDict = mdl.KeyWeightDict;

 

            //标题分词

            List<string> objKeyTitleList = SegmentDAL.Segment(mdl.Title, objKeyCharColl, objKeyWordColl, maxWordLen, bUpdateCharBondColl, bUpdateKeyWordColl);

            //内容分词

            List<string> objKeyContentList = SegmentDAL.Segment(mdl.Content, objKeyCharColl, objKeyWordColl, maxWordLen, bUpdateCharBondColl, bUpdateKeyWordColl);

 

 

            //遍历标题中的每个词

            foreach (string keyWord in objKeyTitleList)

            { 

                //权重字典中不存在该词

                if (!objKeyWordDict.ContainsKey(keyWord))

                {

                    //往词典中新增一个零权重的词

                    objKeyWordDict.Add(keyWord, 0);

                }

                //如果词库包含该词则累加(不包含则权重为零)

                if (objKeyWordColl.Contains(keyWord))

                {

                    //计算并累加一个词的权重

                    objKeyWordDict[keyWord] += -Math.Log(objKeyWordColl[keyWord].ValidCount / objKeyWordColl.MinuteOffsetSize);

                }

            }

 

            //遍历正文中的每个词,处理过程同标题

            foreach (string keyWord in objKeyContentList)

            {

                if (!objKeyWordDict.ContainsKey(keyWord))

                {

                    objKeyWordDict.Add(keyWord, 0);

                }

                if (objKeyWordColl.Contains(keyWord))

                {

                    objKeyWordDict[keyWord] += -Math.Log(objKeyWordColl[keyWord].ValidCount / objKeyWordColl.MinuteOffsetSize);

                }

            }

        }

————————————————————————————————


演示程序

下载地址:遗忘算法(新闻相似度)演示程序.rar

1572464338876700.png


感谢中科点击授权此演示程序开源。

版权声明:本文为CSDN博主「gzdmcaoyc」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/gzdmcaoyc/article/details/50202359

THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:遗忘算法系列(四):关键词提取

下一篇: 遗忘算法系列(一):算法概述

用户评价
全部评价

热门资源

  • 应用笔画宽度变换...

    应用背景:是盲人辅助系统,城市环境中的机器导航...

  • GAN之根据文本描述...

    一些比较好玩的任务也就应运而生,比如图像修复、...

  • 端到端语音识别时...

    从上世纪 50 年代诞生到 2012 年引入 DNN 后识别效...

  • 人体姿态估计的过...

    人体姿态估计是计算机视觉中一个很基础的问题。从...

  • 谷歌发布TyDi QA语...

    为了鼓励对多语言问答技术的研究,谷歌发布了 TyDi...