2014年4月24日星期四

利用结巴分词和余弦相似性定理对文本进行对比

简介

结巴分词

在自然语言处理中,分词是一个极为重要的基础性工作,结巴分词是中文分词的一种实现。
项目地址:Github
快速安装方法:easy_install jieba

余弦相似性定理

根据Cosine similarity - wikipedia可知,对于两个N维向量,我们可以通过求其夹角来判断其相似程度,公式如下:

similarity=cos(θ)=ABAB=i=1nAi×Bii=1n(Ai)2×i=1n(Bi)2

对于两个句子,我们可以根据句子里的词语成分进行统计,将得到的词频看作这个句子所代表的向量,因此就可以应用余弦相似性定理对两个句子进行比较。
我们知道,两个向量夹角越趋于0则越相似,反之,夹角越趋于90则说明方向越不相交,越不相似。

程序

待比较内容

我使用以下两段文字作为比较内容:

1.txt

天蝎座喜欢折磨人,一会儿对你好,一会儿对你坏,天蝎座很坏,很坏,很坏
天蝎座的女孩坚强果敢淡然,
她的心脏时常会痛
就象那些碾转在自尊下的爱
疼了痛了哪怕心都要死了
也说不出口
她独立,也坚强,
她宁愿忍受太多的寂寞和痛苦也不愿意跟任何人提起,
但其实骨子里是很小女人的,
第一次见到天蝎座女生的时候觉得这女生有点冷,她实不擅长对初识的人崭露过多的笑颜,特别是异性。
一定要对方先流露出对她有好感,她才散发她的热情。
在她的心里有一道栅栏
那就是自尊
她看得比生命更尊贵的自尊。

2.txt

双子座喜欢折磨人,一会儿对你好,一会儿对你坏
双子座的男人果敢淡然
他的心脏时常会痛
就象那些碾转在自尊下的爱,
疼了痛了哪怕心都要死了,
也说不出口
他独立,也坚强
他宁愿忍受太多的寂寞和痛苦也不愿意跟任何人提起
但其实骨子里是很需要人关心的,渴望有一个避风港湾,让他去依靠
他的爱很沉默
那并非是因为他缺少那份勇气
在他的心里有一道栅栏
那就是自尊
他看得比生命更尊贵的自尊

比较结果

Base: 1.txt
Scaning: 2.txt
========== out ==========
Line: 1 Result: 76.35%
Base Line: 天蝎座/ 喜欢/ 折磨/ 人/ ,/ 一会儿/ 对/ 你好/ ,/ 一会儿/ 对/ 你/ 坏/ ,/ 天蝎座/ 很坏/ ,/ 很坏/ ,/ 很坏
Target Line: 双子座/ 喜欢/ 折磨/ 人/ ,/ 一会儿/ 对/ 你好/ ,/ 一会儿/ 对/ 你/ 坏

Line: 2 Result: 50.71%
Base Line: 天蝎座/ 的/ 女孩/ 坚强/ 果敢/ 淡然/ ,
Target Line: 双子座/ 的/ 男人/ 果敢/ 淡然

Line: 3 Result: 80.00%
Base Line: 她/ 的/ 心脏/ 时常/ 会痛
Target Line: 他/ 的/ 心脏/ 时常/ 会痛

Line: 4 Result: 94.28%
Base Line: 就象/ 那些/ 碾转/ 在/ 自尊/ 下/ 的/ 爱
Target Line: 就象/ 那些/ 碾转/ 在/ 自尊/ 下/ 的/ 爱/ ,

Line: 5 Result: 96.82%
Base Line: 疼/ 了/ 痛/ 了/ 哪怕/ 心/ 都/ 要死/ 了
Target Line: 疼/ 了/ 痛/ 了/ 哪怕/ 心/ 都/ 要死/ 了/ ,

Line: 6 Result: 100.00%
Base Line: 也/ 说不出口
Target Line: 也/ 说不出口

Line: 7 Result: 79.06%
Base Line: 她/ 独立/ ,/ 也/ 坚强/ ,
Target Line: 他/ 独立/ ,/ 也/ 坚强

Line: 8 Result: 89.71%
Base Line: 她/ 宁愿/ 忍受/ 太多/ 的/ 寂寞/ 和/ 痛苦/ 也/ 不/ 愿意/ 跟/ 任何人/ 提起/ ,
Target Line: 他/ 宁愿/ 忍受/ 太多/ 的/ 寂寞/ 和/ 痛苦/ 也/ 不/ 愿意/ 跟/ 任何人/ 提起

Line: 9 Result: 52.76%
Base Line: 但/ 其实/ 骨子里/ 是/ 很小/ 女人/ 的/ ,
Target Line: 但/ 其实/ 骨子里/ 是/ 很/ 需要/ 人/ 关心/ 的/ ,/ 渴望/ 有/ 一个/ 避风港/ 湾/ ,/ 让/ 他/ 去/ 依靠

Line: 10 Result: 21.48%
Base Line: 第一次/ 见到/ 天蝎座/ 女生/ 的/ 时候/ 觉得/ 这/ 女生/ 有点/ 冷/ ,/ 她/ 实/ 不/ 擅长/ 对/ 初识/ 的/ 人/ 崭露/ 过多/ 的/ 笑颜/ ,/ 特别/ 是/ 异性/ 。
Target Line: 他/ 的/ 爱/ 很/ 沉默

Line: 11 Result: 0.00%
Base Line: 一定/ 要/ 对方/ 先/ 流露出/ 对/ 她/ 有/ 好感/ ,/ 她/ 才/ 散发/ 她/ 的/ 热情/ 。
Target Line: 那/ 并非/ 是因为/ 他/ 缺少/ 那/ 份/ 勇气

Line: 12 Result: 85.71%
Base Line: 在/ 她/ 的/ 心里/ 有/ 一道/ 栅栏
Target Line: 在/ 他/ 的/ 心里/ 有/ 一道/ 栅栏

Line: 13 Result: 100.00%
Base Line: 那/ 就是/ 自尊
Target Line: 那/ 就是/ 自尊

Line: 14 Result: 84.33%
Base Line: 她/ 看/ 得/ 比/ 生命/ 更/ 尊贵/ 的/ 自尊/ 。
Target Line: 他/ 看/ 得/ 比/ 生命/ 更/ 尊贵/ 的/ 自尊

========== End ==========

源程序

源程序地址:Mr.LYC - Git@OSC


@LYC
转载请注明出处

0 评论:

发表评论