2017-06-15 8 views
0

Simple Matching Coefficientを使って2つの文章間の類似度を求める方法は? Iは、入力されたXとYの間の類似度を見つけるために、この<a href="https://github.com/joe-nas/ru_datamining/blob/master/Python%20Toolbox/similarity.py" rel="nofollow noreferrer">link</a>でコードを次のされてい

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') 

、このアプローチは、2つのテーブルが共通して1つ以上の列を持っていることを前提としています。大規模なデータフレームから任意に列を削除することもできますが、ユースケースを知らずにこれをお勧めしません。

関連する問題