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

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

2019-10-31 | |  151 |   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

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

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

用户评价
全部评价

热门资源

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

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

  • 自然语言处理起源...

    选自towardsdatascience作者:Raimi Karim机器之心...

  • 构建贝叶斯深度学...

    这篇文章将讲述如何使用 Keras 和 Tensorflow 训练...

  • 神经架构搜索在视...

    视频理解一直是项颇具挑战性的难题。视频中包含时...

  • 时至今日,NLP怎么...

    在微博和知乎上关注自然语言处理(NLP)技术的朋友...