使用sklearn比较数据帧中两列的语义相似性



我在传递函数以比较两列时遇到问题

import nltk, string
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(tokenizer=normalize, stop_words='english')
def cosine_sim1(text1, text2):
tfidf = vectorizer.fit_transform([text1, text2])
return ((tfidf * tfidf.T).A)[0,1]

在我应用功能之后

cosine_sim1('like football', 'football')

结果是:0.5797386715376657

我面临一个小问题,在数据帧的两列之间传递该函数来计算分数。这是数据的一个小样本

d = pd.DataFrame({'A': ['my name is', 'i live in', 'i like football'], 'B': ['london is nice city', 'london city', 'football']})

我试过那样做。但是出现了一些错误。

def cosine_sim1(text1, text2):
tfidf = vectorizer.fit_transform([text1(d['A']), text2(d['B'])])
return ((tfidf * tfidf.T).A)[0,1]
d.apply(cosine_sim1, axis=1)   

错误为:类型错误:("cosine_sim1((缺少1个必需的位置参数:'text2'","出现在索引0'处"(

我认为应该是

def cosine_sim1(text1, text2):
tfidf = vectorizer.fit_transform([text1, text2])
return ((tfidf * tfidf.T).A)[0,1]
d.apply(lambda x: cosine_sim1(x.A, x.B), axis=1) 

您正在将函数应用于DataFrame,但没有传递已定义的参数。

最新更新