文本相似度的检测

article/2025/5/17 0:08:00

项目原理

基于词频:统计文章中词频,构建词频特征向量,利用特征向量夹角的余弦值表示文本的相似度。两篇文章最大相似度为1,特征向量夹角为0°。
基于词频的文本相似度检测步骤:

  1. 文本1和文本2
  2. 分词—去停用词
  3. 统计两篇文章的词频
  4. 词频向量1和词频向量2
  5. 相似度的计算
  • 分词:例:“我是一个学生” 分词后为“我//是//一个//学生”
  • 去停用词 分词后可发现有很多词是没有实际含义的功能性词,例如“我” 、“怎么办”、“总之”。因此分词后不能直接对词频进行统计,应先去掉停用词后,再对词频进行统计。
  • 词频 单词在文章中出现的次数,词频越大,可以认为该词越重要
  • 词频向量在构建词频向量时,需要考虑向量的意义,也必须保障向量的一致性,即两个文本向量每一维的值应该代表的是同一个词的词频。
    例:
    文档1 今天//有事//,//没办法//去//学校//上课//了
    文档2 真想//去//学校//上课//,//但是//今天//有事//,//去不了//学校//了
    去掉停用词后
    文档1中的词频:[有事1,没办法1,去1,学校1,上课1]
    文档2中的词频:[真想1,去1,学校2,上课1,有事1,去不了1]
    直接用上述词频构建每一个文本的词频向量是无意义的,因为每一维表示的意思均不同,因此需构建一致的词频向量。
    将所有的有效词结合起来构建[学校,去,真想,上课,有事,去不了,没办法]
    计算词频向量:
    文档1 :[1,1,0,1,1,0,1] 文档2:[2,1,1,1,1,1,0]
  • 向量相似度 采用余弦相似度
    采用余弦相似度
    在TextSimilarity类中对各个接口进行声明
class TextSimilarity
{
public:typedef std::unordered_map<std::string, double> WordFrep;//词频typedef std::unordered_set<std::string> WordSet;//词表typedef std::pair<std::string, double> PSI;//键值对TextSimilarity(const char* dictPach);//构造函数TextSimilarity(Config& cfg);void printStopWordSet();//打印停用词表void printWordFrep(const WordFrep& wordFreq);//打印词频double getTextSimilarity(const char* file1, const char* file2);//提供获取文本相似度的接口//private: //获取停用词表void getStopWordSet(const char*file);//获取IDF(逆文档率),表示每个词重要性的权重void getIDF(const char* file);//统计词频: word   num(map中序遍历是有序的,本身是无序的)//项目本身需要Value有序,但map不支持,所以使用无序的map,效率较高void getWordFrep(const char* file, WordFrep& wordFreq);//统计相对词频,单词词频/文章单词总数void getNormalizedWordFrep(WordFrep& wordFreq);//统计加入IDF权重的词频void getTfIdf(WordFrep& wordFreq, WordFrep& outTfIdf);//GBK转UTF8std::string GBK2UTF8(const std::string& gbk);//UTF8转GBKstd::string UTF82GBK(const std::string& utf8);//根据Value值进行排序void sortReverseByValue(const WordFrep& wordFreq, std::vector<PSI>& outSortedWordFreq);//构建统一的词表void getWordCode(std::vector<PSI>& inSortWordFreq, WordSet& wordCode);//根据词表,创建词频向量void getVector(WordSet& wordCode, WordFrep& wordFreq, std::vector<double>& outVec);//计算文本相似度double getCosine(std::vector<double>& vec1, std::vector<double>& vec2);//分词对象成员std::string DICT_PATH;//词典路径cppjieba::Jieba _jieba;//分词对象//停用词表,只需要存放停用词,用string(字符串)来存储,给一个哈希表WordSet _stopWordSet;int _maxWordNum;WordFrep _Idf;
};

成员变量有5个,分别是分词的词典路径,分词对心,停用词表,构建统一词表的最大个数_maxWordNum,以IDF方式计算的词频_Idf;

IDF(Inverse Document Frequency): 逆文档率,它表示每一个词重要性的权重,一个词越少见,它的值就越大,反之,一个词越常见,它的值就越小。
下面分别实现各个接口的功能:

//构造函数:
TextSimilarity::TextSimilarity(const char* dictPach):DICT_PATH(dictPach), _jieba(DICT_PATH + "/jieba.dict.utf8", DICT_PATH + "/hmm_model.utf8", DICT_PATH + "/user.dict.utf8", DICT_PATH + "/idf.utf8", DICT_PATH + "/stop_words.utf8"), _maxWordNum(20)//统一的词表最大的个数,初始化为20
{ std::string stopFileDir = DICT_PATH + "/stop_words.utf8";getStopWordSet(stopFileDir.c_str());getIDF((DICT_PATH + "/idf.utf8").c_str());
}
//获取停用词,填充在对象_stopWordSet中
void TextSimilarity::getStopWordSet(

http://chatgpt.dhexx.cn/article/on4mVyNU.shtml

相关文章

网页抓取:PHP实现网页爬虫方式小结

抓取某一个网页中的内容&#xff0c;需要对DOM树进行解析&#xff0c;找到指定节点后&#xff0c;再抓取我们需要的内容&#xff0c;过程有点繁琐。LZ总结了几种常用的、易于实现的网页抓取方式&#xff0c;如果熟悉JQuery选择器&#xff0c;这几种框架会相当简单。 一、Ganon …

php中取页面的值_php如何抓取网页上的数据

php中抓取网页内容的实例详解 方法一&#xff1a;使用file_get_contents方法实现$url "http://news.sina.com.cn/c/nd/2016-10-23/doc-ifxwztru6951143.shtml"; $html file_get_contents($url); //如果出现中文乱码使用下面代码 //$getcontent iconv("gb2312…

关于如何使用PHP抓取网页数据并进行处理的经验

在网络时代&#xff0c;数据是无处不在的。很多时候&#xff0c;我们需要从网页上获取特定的数据&#xff0c;以便进行进一步的处理和分析。而PHP作为一种强大的编程语言&#xff0c;提供了丰富的函数和库来帮助我们实现这个目标。本文将分享一些关于如何使用PHP抓取网页数据并…

php根据URL获得网页内容

php 中根据url来获得网页内容非常的方便&#xff0c;可以通过系统内置函数file_get_contents(),传入url,即可返回网页的内容&#xff0c;比如获得百度首页的内容代码为&#xff1a; <?php $html file_get_contents(http://www.baidu.com/);echo $html; 就可以显示出百度首…

php抓取网页内容,获取网页数据

php通过simple_html_dom实现抓取网页内容&#xff0c;获取核心网页数据&#xff0c;将网页数据写入本地 xxx.json 文件 其代码实现逻辑&#xff1a; 1. 引入simple_html_dom.php文件 require_once simple_html_dom-master/simple_html_dom.php; 2. 获取远程或者本地html文件…

PS Adobe软件使用 快捷键

两年前学的&#xff0c;为了考一个高新 怕自己忘了 仅为防止以后自己忘记而做的备忘笔记&#xff0c;请勿吐槽 图片类型 JPEG 有损压缩格式(能够将图像压缩在很小的储存空间&#xff0c;图像中重复或不重要的资料会被丢失&#xff0c;因此容易造成图像数据的损伤。尤其是…

html选区控制怎么用,ps载入选区的快捷键是什么?

ps载入选区的快捷键是&#xff1a;ALTSO。在ps中&#xff0c;使用“ALTSO”快捷键&#xff0c;会弹出“载入选区”对话框&#xff0c;然后选择相应的通道&#xff0c;点击“确定”&#xff0c;即可载入选区。 ps载入选区有三种方法&#xff1a;右键菜单、ps载入选区快捷键、以及…

计算机中的PS颜色填充快捷键,ps颜色填充快捷键【设置办法】

喜欢使用电脑的小伙伴们一般都会遇到win7系统ps颜色填充快捷键的问题&#xff0c;突然遇到win7系统ps颜色填充快捷键的问题就不知道该怎么办了&#xff0c;其实win7系统ps颜色填充快捷键的解决方法非常简单&#xff0c;按照 1&#xff1a;首先我们先打开打开ps软件&#xff0c;…

html自由变换图形,ps自由变换的快捷键是什么?

在当前图层中&#xff0c;执行“编辑”——“自由变换”&#xff0c;或者使用ps自由变换快捷键ctrlT&#xff0c;周围会出现变换控件定界框。 当我们使用ps自由变换快捷键ctrlT&#xff0c;开启自由变换之后&#xff0c;然后再配合Ctrl、Shift、Alt&#xff0c;可以对图像进行缩…

计算机中的PS颜色填充快捷键,ps颜色填充快捷键【解决技巧】

很多小伙伴都遇到过ps颜色填充快捷键的困惑吧&#xff0c;一些朋友看过网上零散的ps颜色填充快捷键的处理方法&#xff0c;并没有完完全全明白ps颜色填充快捷键是如何解决的&#xff0c;今天小编准备了简单的解决办法&#xff0c;只需要按照 1&#xff1a;首先我们先打开打开ps…

计算机中的PS颜色填充快捷键,ps中填充颜色的快捷键是什么(填充Shift+F5)

很多小伙伴都遇到过ps颜色填充快捷键的困惑吧&#xff0c;一些朋友看过网上零散的ps颜色填充快捷键的处理方法&#xff0c;并没有完完全全明白ps颜色填充快捷键是如何解决的&#xff0c;今天小编准备了简单的解决办法&#xff0c;只需要按照下面方法操作就行。 PS填充快捷键是S…

PS常用快捷键

PS常用快捷键 1. PS工具快捷键2. 常用的通用快捷键2.1 文档操作2.2 画面显示操作2.3 其他操作 3. 图层操作的快捷键4. 图像调整操作快捷键5. 移动工具模式快捷键6. 选区类工具模式快捷键6.1 选框工具模式6.2 套索工具模式6.3 快速选择工具模式 7. 画笔工具模式快捷键 声明&…

html5如何快速选择工具,PS快速选择工具怎么使用?快捷键是什么?

快速选择工具是创建选区时使用频率相当高的一个工具&#xff0c;不但使用起来十分方便&#xff0c;创建的选区精度也十分高。下面我们就一起来看看PS快速选择工具怎么使用&#xff1f;快捷键是什么吧&#xff01; 1、快速选择工具 快速选择工具使用一个可以调节大小的原型笔尖来…

Ps怎么进行反选

Ps怎么进行反选&#xff0c;ps是我们日常生活中也会经常用到的一款强大的图像处理软件&#xff0c;不论是美工还是平面设计师、插画设计师等等&#xff0c;都会用到ps软件&#xff0c;那么在ps软件里面&#xff0c;怎么样对图像进行反选&#xff1f;其实也很简单哦&#xff01;…

应用商店的ASO和搜索引擎的SEO的区别

ASO和SEO&#xff0c;目标相似&#xff0c;有着异曲同工之妙&#xff0c;两者都是提高搜索排名的方式&#xff0c;具体有什么区别呢&#xff1f;今天柚鸥ASO给大家做一下总结。 SEO是指搜索引擎优化&#xff0c;利用搜索引擎的规则来提高网站&#xff08;例如&#xff1a;百度…

关于ASO优化和ASM投放

ASO是指应用商店搜索优化&#xff0c;有助于提高应用商店中产品的访问量和下载转化率。ASM是指官方应用市场提供的竞价广告位。无论进行的是ASO优化还是ASM投放&#xff0c;我们都要给应用进行标题、副标题、关键词、详情描述、截图预览、视频预览进行具体设置和初步优化。 应…

aso是做什么的_ASOer的目标

ASO是“应用商店优化”的简称。ASO(App store Optimization)就是提升你APP在各类APP应用商店/市场排行榜和搜索结果排名的过程。类似普通网站针对搜索引擎的优化,即SEO(Search Engine Optimization)优化。 ASO优化就是利用App Store的搜索规则和排名规则让APP更容易被用户搜…

ASO优化之应用商店关键词的实现

投放正确的合适的关键词&#xff0c;能够确保我们的应用获得更高的相关性和知名度。如果我们已经完成研究并想要竞争目标关键词&#xff0c;就需要在商品详情中去实施投放它们。 要在 Google Play Store 中投放——我们要打开 Google Play 控制台并点击“主要应用详情”选项卡…

海外ASO优化之如何给应用选择正确的类别

将我们的应用程序放在Apple App Store和Google Play正确的类别中&#xff0c;不仅对按类别浏览应用的用户有帮助&#xff0c;而且能够帮助我们的应用程序获得良好排名。 1、应用程序属于多个类别的解决方案。 需要选择最能描述我们应用程序的类别&#xff0c;检查一下每个类别…

关于ASO优化的搜索指数

搜索指数指数可以看出该关键词的热度&#xff0c;每一个关键词都对应着相应的指数&#xff0c;它代表着有多少人在搜索这个词。同一个词搜索的人越多&#xff0c;该关键词的热度指数就越高。 在应用商店内每天都会有用户去搜索应用&#xff0c;那么关键词的热度值至少是100。热…