问题简述
相似度比较基于空间向量模型(Vector Space Model)。将两段文本用向量A、B表示,计算AB夹角的余弦值用以表示相似度。
具体步骤如下:
- 提取两段文本中所有词(事先需用空格分割好)。
- 计算每个词在两段文本中分别出现的次数(用BSD tree.h里的RBTREE保存)
- 用词频做为A、B的分量。
- 使用余弦公式计算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)
应用余弦定理计算向量夹角
代码
https://github.com/jianingy/postgres-toys/tree/master/pg_trgm_sml
