天天看点

python中文相似度_用Python比较两个文本的相似性【附脚本】

用Python比较两个文本的相似性,使用到了结巴分词以及余弦定理

用Python比较两个文本的相似性,使用到了结巴分词以及余弦定理。

关于结巴分词,大家可以看看这篇文章《cygwin下用Python+jieba给文本分词并提取高频词》#!/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')

我们先试一下,a1.txt和a2.txt为同一个文件时结果是什么?

python中文相似度_用Python比较两个文本的相似性【附脚本】

这回rate值为0,说明两篇文章主题相似度非常低。

再找一篇原创文章和一篇伪原创文章来对比一下:

python中文相似度_用Python比较两个文本的相似性【附脚本】

rate值为0.96,说明这两篇文章相似度非常高!可以像百度这样专业的搜索引擎,想要判断一篇文章是否是伪原创的,是多么容易.......