Семантическое сходство для сравнения двух столбцов во фреймах данных с использованием sklearn - PullRequest
0 голосов
/ 27 ноября 2018

У меня возникла проблема с передачей функции для сравнения между двумя столбцами

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 голосов
/ 28 ноября 2018

Я считаю, что это должно быть

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, но не передаете параметры, которые вы определили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...