使用余弦定理来实现对两个文本相似性的比较:seo中的应用之一判断采集内容的重复度,决定是否入库上线;seo应用二涨工资;seo应用三装逼!

余弦公式

python代码:

#!/usr/bin/env python

# -*- coding: utf-8 -*

import re

from math import sqrt

def file_reader(filename,filename2):

file_words = {}

ignore_list = [u'的',u'了',u'和',u'呢',u'啊',u'哦',u'恩',u'嗯',u'吧'];

#ignore_list = [];

accepted_chars = re.compile(ur"[\u4E00-\u9FA5]+")

file_object = open(filename)

try:

all_the_text = file_object.read()

for s in all_the_text.decode('gb2312'):

if accepted_chars.match(s) and s not in ignore_list:

if s not in file_words.keys():

file_words[s] = [1,0]

else:

file_words[s][0] += 1

finally:

file_object.close()

file_object2 = open(filename2)

try:

all_the_text = file_object2.read()

for s in all_the_text.decode('gb2312'):

if accepted_chars.match(s) and s not in ignore_list:

if s not in file_words.keys():

file_words[s] = [0,1]

else:

file_words[s][1] += 1

finally:

file_object2.close()

sum_2 = 0

sum_file1 = 0

sum_file2 = 0

for word in file_words.values():

sum_2 += word[0]*word[1]

sum_file1 += word[0]**2

sum_file2 += word[1]**2

rate = sum_2/(sqrt(sum_file1*sum_file2))

print 'rate: '

print rate

file_reader('thefile.txt','thefile2.txt')

此算法非常简单,但精确度不够高。但也可以通过简单的优化得到更好的结果,如以上代码就简单的加入了过渡功能。若再加入一个分词库,通过分词来比较中文的相似性,那就更好了。下面代码就用到了分词库实现文本的比较,效果提升明显。

使用分词以及余弦定理来比较两份文档的相似性的代码:

#!/usr/bin/env python

# -*- coding: utf-8 -*

import re

from math import sqrt

#You have to install the python lib

import jieba

def file_reader(filename,filename2):

file_words = {}

ignore_list = [u'的',u'了',u'和',u'呢',u'啊',u'哦',u'恩',u'嗯',u'吧'];

accepted_chars = re.compile(ur"[\u4E00-\u9FA5]+")

file_object = open(filename)

try:

all_the_text = file_object.read()

seg_list = jieba.cut(all_the_text, cut_all=True)

#print "/ ".join(seg_list)

for s in seg_list:

if accepted_chars.match(s) and s not in ignore_list:

if s not in file_words.keys():

file_words[s] = [1,0]

else:

file_words[s][0] += 1

finally:

file_object.close()

file_object2 = open(filename2)

try:

all_the_text = file_object2.read()

seg_list = jieba.cut(all_the_text, cut_all=True)

for s in seg_list:

if accepted_chars.match(s) and s not in ignore_list:

if s not in file_words.keys():

file_words[s] = [0,1]

else:

file_words[s][1] += 1

finally:

file_object2.close()

sum_2 = 0

sum_file1 = 0

sum_file2 = 0

for word in file_words.values():

sum_2 += word[0]*word[1]

sum_file1 += word[0]**2

sum_file2 += word[1]**2

rate = sum_2/(sqrt(sum_file1*sum_file2))

print 'rate: '

print rate

file_reader('thefile.txt','thefile2.txt')

原理解释参考此文章:https://my.oschina.net/BreathL/blog/42477

其它:https://pypi.python.org/pypi/NearDuplicatesDetection/0.2.0

这个python库号称可以比较两文本的相似度,但本人使用中文文件测试结果很不理想。不信大家可以试试。

本文:余争 https://my.oschina.net/dancing/home

python中文相似度_python比较两个文本的相似性相关推荐

  1. python中文相似度_python文本相似度计算

    步骤分词.去停用词 词袋模型向量化文本 TF-IDF模型向量化文本 LSI模型向量化文本 计算相似度 理论知识 两篇中文文本,如何计算相似度?相似度是数学上的概念,自然语言肯定无法完成,所有要把文本转 ...

  2. python中文相似度_python 人脸对比--百度API人脸相似度识别(超简单)-Go语言中文社区...

    说明:这篇是写使用百度人脸识别API进行人脸相似度识别对比,如 给两个人物照片,判断是否是同一个人.简单的4步完成. 1,获取百度人脸识别API的API Key和Secret Key.(10分钟内完成 ...

  3. python 拼音相似度_Python实现简单的文本相似度分析操作详解

    本文实例讲述了Python实现简单的文本相似度分析操作.分享给大家供大家参考,具体如下: 学习目标: 1.利用gensim包分析文档相似度 2.使用jieba进行中文分词 3.了解TF-IDF模型 环 ...

  4. python中文相似度_基于TF-IDF、余弦相似度算法实现文本相似度算法的Python应用

    基于TF-IDF算法.余弦相似度算法实现相似文本推荐--文本相似度算法,主要应用于文本聚类.相似文本推荐等场景. 设计说明 使用jieba切词,设置自定义字典 使用TF-IDF算法,找出文章的关键词: ...

  5. python中文字符串编码_python中文乱码 字符串和编码

    Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了. Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节).现代操作系统和大 ...

  6. python中文相似度计算_doc2vec计算文本相似度--python实现

    Boblee人工智能硕士毕业,擅长及爱好python,基于python研究人工智能.群体智能.区块链等技术,并使用python开发前后端.爬虫等. 1.背景 doc2vec的目标是创建文档的向量化表示 ...

  7. python nlp 句子提取_Python可以把一个文本里部分词语相同的句子提取出来吗?

    谢邀,题主的这个问题与具体的编程语言无关.涉及的知识点或者说技术点为NLP(自然语言处理).不过由于Python处理文本内容的便捷性,人们常常会用Python来做NLP. 如果你不想了解原理,直接使用 ...

  8. python余弦定理_使用余弦定理计算两篇文章的相似性

    使用余弦定理计算两篇文章的相似性:(方法论,细致易懂版) http://blog.csdn.net/dearwind153/article/details/52316151 python 实现(代码) ...

  9. python两条曲线图片相似度_Python比较两个图片相似度的方法

    本文实例讲述了Python比较两个图片相似度的方法.分享给大家供大家参考.具体分析如下: 这段代码实用pil模块比较两个图片的相似度,根据实际实用,代码虽短但效果不错,还是非常靠谱的,前提是图片要大一 ...

  10. python判断英文字母_Python判断两个单词的相似度

    本文要点在于算法的设计:如果两个单词中不相同的字母足够少,并且随机选择几个字母在两个单词中具有相同的前后顺序,则认为两个单词是等价的. 目前存在的问题:可能会有误判. from random impo ...

最新文章

  1. 监听发现局域网dropbox客户端broadcast-dropbox-listener
  2. java 正则_认识正则表达式(Java语言基础)
  3. java util concurrent_Error: java.util.concurrent.Execution
  4. vim ctrlp找到文件后,如何在新窗口或者新标签中打开
  5. SQLSERVER 和 ORACLE 查询数据库文件大小
  6. php开发者与composer的不得不说故事
  7. DM365 u-boot启动分析
  8. 给微软的日志框架写一个基于委托的日志提供者
  9. uva 11995——I Can Guess the Data Structure!
  10. MySQL速忆笔记(更新中)
  11. quartz获取开始结束时间_Springboot集成quartz
  12. JavaScript学习01
  13. 《Java程序员,上班那点事儿》 - 书摘精要
  14. jQuery - 通过文本描述设置选择控件的选定值
  15. CS:APP3e 深入理解计算机系统_3e Datalab实验
  16. 回归、自回归、循环神经网络(RNN)、LSTM
  17. 《产品经理面试攻略》PART 9:HR面试题
  18. Hive-之即席查询引擎选型考量
  19. 彻底理解样本方差为何除以n-1
  20. js 输出为underfined

热门文章

  1. Dockerfile best practices
  2. 【BZOJ 1491】 [NOI2007]社交网络
  3. Firebug 教程
  4. java web 中Integer.valueof()与integer.parseint()
  5. windows 2008 快速安装RODC
  6. 策略模式 (Strategy)
  7. Oracle 官方文档地址
  8. linux less命令详解
  9. 河南网通帐号在线转换工具
  10. jQuery - 选择器(五)