Skip navigation

问题简述

相似度比较基于空间向量模型(Vector Space Model)。将两段文本用向量A、B表示,计算AB夹角的余弦值用以表示相似度。

具体步骤如下:

  1. 提取两段文本中所有词(事先需用空格分割好)。
  2. 计算每个词在两段文本中分别出现的次数(用BSD tree.h里的RBTREE保存)
  3. 用词频做为A、B的分量。
  4. 使用余弦公式计算AB夹角的余弦值。

举例

T1 = 我 爱 北京 天安门
T2 = 我 爱 北京 立交桥

提取所有的词

W = 我 爱 北京 天安门 立交桥

计算每个词分别出现的次数

CA = 我:1 爱:1 北京:1 天安门:1 立交桥:0
CB = 我:1 爱:1 北京:1 天安门:0 立交桥:1

分别计算向量AB

设S为总词数即T1,T2中总共出现词的数量

S = 4 + 4 = 8
A = (1/8, 1/8, 1/8, 1/8, 0/8)
B = (1/8, 1/8, 1/8, 0/8, 1/8)

应用余弦定理计算向量夹角

cos{\theta} = \frac{AB}{|A||B|} = \frac{a_1 b_1 + a_2 b_2 + .. + a_n b_n}{\sqrt{(a_1^2+a_2^2+..+a_n^2)}\sqrt{(b_1^2+b_2^2+..+b_n^2)}}

代码

https://github.com/jianingy/postgres-toys/tree/master/pg_trgm_sml


Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>