文章相似度计算

算法思路

首先看个简单的例子:

句子A: 我喜欢看电视,不喜欢看电影
句子B: 我不喜欢看电影,也不喜欢看电视

基本思路

如果两句话的用词越相似,它们的内容越相似。因此,可以从词频入手,计算它们的相似度。

  • 第一步分词


    分词.png
  • 合并所有词


    合并.png
  • 计算词频


    词频.png
  • 得出词频向量


    词频向量.png

我们可以把它们想象成空间中的两条线段,都是从原点([0, 0, ...])出发,指向不同的方向。两条线段之间形成一个夹角,如果夹角为0度,意味着方向相同、线段重合;如果夹角为90度,意味着形成直角,方向完全不相似;如果夹角为180度,意味着方向正好相反。
因此,我们可以通过夹角的大小,来判断向量的相似程度。夹角越小,就代表越相似。

夹角.png

假定a向量是[x1, y1],b向量是[x2, y2],那么可以将余弦定理改写成下面的形式:

余弦定理.png

余弦的这种计算方法对n维向量也成立。假定A和B是两个n维向量,A是 [A1, A2, ..., An] ,B是 [B1, B2, ..., Bn] ,则A与B的夹角θ的余弦等于:

n维向量.png

使用这个公式,我们就可以得到,句子A与句子B的夹角的余弦。

image.png

实践

计算国务院政府工作和地方政府工作报告相似度

思路:

(1) 使用python中的结巴分词对国务院报告、省级、县级政府报告进行分词,去掉停用词,并统计词频。
(2) 抽取出国务院政府报告与其他省、县级政府报告的关键词合成一个集合。
(3) 出现频率最高的前1000个词,生成国务院报告所对应的特征向量。
(4) 出现频率最高的前1000个词,生成各级报告所对应的特征向量。
(5) 计算国务院报告的特征向量与各级政府报告特征向量的余弦相似度,值越大越相似。 看各地方的遵从程度。

以安徽省2014-2018年政府工作报告和2014-2018年国务院政府工作报告为例:

代码介绍:

  • 获取分词结果
def jieba_result(content):
    '''
    获取jieba分词结果,并去掉中文符号
    :param content: 为read_file返回的文章内容
    :return:
    '''
    res = jieba.lcut(content)
    for i in remove_list():
        while i in res:
            res.remove(i)
    # print(res)
    return res

根据python第三方库jieba,获取分词结果。
举个例子:

import jieba

s ="我想要有一个女朋友,伤心。"
res = jieba.lcut(s)
print(res)

----
['我', '想要', '有', '一个', '女朋友', ',', '伤心', '。']

由于分词时,会将一些中文标点符号也分出来,所以定义了一个 remove_list,将在里面的符号都删掉

def remove_list():
    '''
    将下列列表的中午符号过滤
    如果有缺失,可自行添加
    :return:
    '''
    remove_list = [',', ':', '。', '《', '》', '\n', '—', '“', '”', '、', ' ']
    return remove_list

  • 获得前1000的向量
def top_n(res,res_all,n):
    '''
    获得分词的Top n 词频,得出词频向量
    :param res: jieba_res  安徽  jieba_res 国务院
    :param res_all: 合并后的报告
    :param n:
    :return:
    '''
    dic={}
    for i in res_all:
        if i not in res:
            dic[i]=0
        else:
            dic[i]=res.count(i)

    sort_res= sorted(dic.items(), key=lambda x: x[1], reverse=True) #排序

    top_n = sort_res[:n]  #获取Top n
    # print(top_n)
    top_n_res=[]
    for i in top_n:
        top_n_res.append(i[1])
    # print(top_n_res)
    return top_n_res

统计省工作报告,前1000热词的向量和国务院前1000热词的向量

  • 计算相似度
def CalculateCos(gwyList, subList):
    '''
    根据两个词频向量,算出cos值
    :param gwyList:
    :param subList:
    :return:
    '''
    gwyLen = 0
    for gwynum in gwyList:
        gwyLen = gwyLen + gwynum ** 2
    gwyLen = gwyLen ** 0.5
    subLen = 0
    for sub in subList:
        subLen = subLen + sub ** 2
    subLen = subLen ** 0.5
    # return subLen
    totalLen = len(gwyList)
    fenmu = 0
    for i in range(0,totalLen):
        fenmu = fenmu + subList[i] * gwyList[i]
    print(fenmu / (subLen * gwyLen))
    return fenmu / (subLen * gwyLen)

最终计算2014-2018年每年,安徽省工作报告和国务院工作报告相似度如下:


相似度.png

相似度惊人的高,哈哈哈哈哈。。。。

最后社会主义核心价值观镇楼


image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354

推荐阅读更多精彩内容