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)。其中,一个向量在另一个向量上的投影定义如下:
-
代码实现: