1. Jaro distance
给定两个文本串 , ,他们的Joro距离定义为: 其中: 表示两个字符串中match的字符数 表示文本串长度 表示换位(transpositoins)数目()
求match的字符数: 分别来自 , 的字符,当他们相同或者距离小于 ,则被认为是match的。
比如: =“DIXON”, =“DICKSONX” 距离 计算出来等于3,则每一次从max(0,i-d)到min(i+d,xLen)的空间内比较(如果从横轴 进行比较,xLen表示 长度)。最终得到match数 。
中的每一个字符都会与 中距离 内的字符进行比较。将所有match的字符串,需要替调换顺序才能匹配的总数除以二就是transpositions的大小 。这里两个字符串中匹配的分别是:"DION",“DION",所以 。 另外 =4, =8, 则:
参考: rosettacode.org/wiki/Jaro_d…
2. PCA like SIF
-
第一步,对句子中的每个词向量,乘以一个独特的权值。这个权值是一个常数 除以 与该词语频率的和,也就是说高频词的权值会相对下降。求和后得到暂时的句向量。
-
然后计算语料库所有句向量构成的矩阵的第一个主成分 ,让每个句向量减去它在 上的投影(类似PCA)。其中,一个向量 在另一个向量 上的投影定义如下:
- 代码实现: