使用sklearn

时间:2018-11-27 17:52:31

标签: python-3.x pandas dataframe nlp

我面临在两个列之间传递比较功能的问题

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)   

错误是: TypeError :(“ cosine_sim1()缺少1个必需的位置参数:'text2'“,'发生在索引0')

1 个答案:

答案 0 :(得分: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,但没有传递已定义的参数。