2017-06-15 64 views
0

我已经下面就本link代码以找到输入的X和Y之间的相似性度量:如何使用简单匹配系数在两个句子之间找到相似性度量?

def similarity(X, Y, method): 
    X = np.mat(X) 
    Y = np.mat(Y) 
    N1, M = np.shape(X) 
    N2, M = np.shape(Y) 

    method = method[:3].lower() 
    if method=='smc': # SMC 
     X,Y = binarize(X,Y); 
     sim = ((X*Y.T)+((1-X)*(1-Y).T))/M 
    return sim 

def binarize(X,Y=None): 
    ''' Force binary representation of the matrix, according to X>median(X) ''' 
    if Y==None: 
     X = np.matrix(X) 
     Xmedians = np.ones((np.shape(X)[0],1)) * np.median(X,0) 
     Xflags = X>Xmedians 
     X[Xflags] = 1; X[~Xflags] = 0 
     return X 
    else: 
     X = np.matrix(X); Y = np.matrix(Y); 
     XYmedian= np.median(np.bmat('X; Y'),0) 
     Xmedians = np.ones((np.shape(X)[0],1)) * XYmedian 
     Xflags = X>Xmedians 
     X[Xflags] = 1; X[~Xflags] = 0 
     Ymedians = np.ones((np.shape(Y)[0],1)) * XYmedian 
     Yflags = Y>Ymedians 
     Y[Yflags] = 1; Y[~Yflags] = 0 
     return [X,Y] 

然而,假定输入的X和Y应分别N1 * MN2 * M维矩阵。我很困惑如何将可变长度句子的输入转换为所需的输入格式。

另外,如果有人可以建议我找一些其他方法来找到相同的东西,我将不胜感激。

+0

您可以发布一些示例数据吗? –

回答

0

如何:

import pandas as pd 
df1=pd... #I'd like to see how you generate your data 
df2=pd... 
cols_common=list(set(df1.columns).intersection(df2.columns)) 
df1=df1[cols_common] 
df2=df2[cols_common] 
result=similarity(df1,df2,'smc') 

当然,这种方法假定两个表有共同的一个或多个列。您也可以任意删除较大数据框中的列,但如果不知道您的使用案例,我不会推荐此列。

相关问题