2014年4月24日星期四

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

简介 结巴分词 在自然语言处理中,分词是一个极为重要的基础性工作,结巴分词是中文分词的一种实现。 项目地址:Github。 快速安装方法:easy_install jieba。 余弦相似性定理 根据Cosine similarity - wikipedia可知,对于两个N维向量,我们可以通过求其夹角来判断其相似程度,公式如下: similarity=cos(θ)=A⋅B∥A∥∥B∥=∑i=1nAi×Bi∑i=1n(Ai)2−−−−−−−√×∑i=1n(Bi)2−−−−−−−√\text{similarity}=\cos(\theta)={A\cdot B\over\|A\|\|B\|}=\frac{ \sum\limits_{i=1}^{n}{A_i \times B_i}}{\sqrt{\sum\limits_{i=1}^{n}{(A_i)^2}}\times \sqrt{\sum\limits_{i=1}^{n}{(B_i)^2}}} 对于两个句子,我们可以根据句子里的词语成分进行统计,将得到的词频看作这个句子所代表的向量,因此就可以应用余弦相似性定理对两个句子进行比较。 我们知道,两个向量夹角越趋于0∘0^{\circ}则越相似,反之,夹角越趋于90∘90^{\circ}则说明方向越不相交,越不相似。 程序 待比较内容 我使用以下两段文字作为比较内容: 1.txt ...

2014年4月21日星期一

Python的冷知识和坑

声明 此文章为个人翻译,原文出自:码农周刊。 除非特殊说明,以下代码皆为Python3.4。 译文 Python使用C3算法解决多重继承问题。 根据C3算法,以下代码在处理多重继承的时候,会在class B之前检查class A的同名方法foo。 更多详细信息可以查看大神Guido van Rossum的博客。 In: class A(object): def foo(self): print("class A") class B(object): def foo(self): print("class B") class C(A, B): pass C().foo() Out: class A 以上例子显示出class C首先检查其父类class A是否存在方法foo()并尝试调用(因此成功调用了)。 在我收到的一封email中有一个更为巧妙的嵌套例子来阐述Guido van Rossum的观点: In: class A(object): def foo(self): print("class A") class B(A): pass class C(A): ...