一,项目应用
- 文本检测----类似于文本查重的功能,检查两个文本的相似程度
二,项目原理
- 基于词频:对不同文本进行分词,统计词频,选取一定数量词频较高的词,构建词频向量,然后通过计算余弦相似度,来判断文本是否相似
- 对文本分词,我使用了第三方库-----Jeiba库,通过调用第三方库里的接口,对文本分词,分词后,会有很多无意义的停用词,比如我,我们,怎么办,总之,此外,然而 ,不如,不妨 ,我们要使用Jieba的停用词表来去掉停用词,
- 去停用词之后,在对剩下的词统计词频,把词和对应的词频放入map中,然后根据词频对map中的词排序,
- 排序之后,选取一定数量的词来构建词频向量,可以把选取的词放入set中,set有天然去重功能,通过访问set中的词,如果在map中存在,就保存词频,如果不存在就赋值为0,这样就完成了编码共组
- 构建了两个词频向量,计算余弦相似度,余弦相似度越是趋紧与1,两个文件越是相似,
- 项目框图:
三,项目实现
第一部分:给定目录和文件名,读出文本信息,并且对其分词,并且统计词频
- 首先先对一些容器取一个别名,因为全名太长了
- 然后在进行打开文件
- 打开文件后,一行一行的读,对每一行的数据分词,去停用词之后,统计词频,存入map中,建立一一对应关系,直到读到文本结束符
第二部分,对map中的数据,按照词频排序,
- 排序后,这些词安装词频,由大到小装在数组中,
第三部分,选取一定的数量的词,存入set中,
- 拍完顺序之后的词,都在数组中存放着,选取数组前半部分的词放入set中,
第四部分,当两个文本分词之后产生的词频,都放入set中之后,就产生了天然的编码格式,在对应的位置上所表示的词语是同一个,然后构建词频向量
- 遍历set,取set中的词去map中找对应的词频,放入数组中,
第五部分,通过词频向量,计算余弦相似度
- 余弦相似度,简单的说就是两个向量的夹角(对于二维向量来说),夹角越小,越是相似,
四,代码测试
- 先打开文件,在获取分词后的结果
- 把根据词频排序之后的词,放入数组中
- 然后选取一定数量的词放入set中
- 构建词频向量,并且计算余弦相似度
五,项目总结
项目收获
- STL中序列式和关联式容器的使用
- 自然语言处理的相关知识----JIEBA库的使用
- 不同编码之间的转换
- 上图是GBK转UTF-8和UTF-8转GBK的转换方式,如果想深入了解,请访问
https://blog.csdn.net/yangfengjueqi/article/details/79486162