Косинусное сходство между столбцами в кадре данных Spark - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть данные, которые выглядят следующим образом ...

+-----------+--------------------+
| searchterm|               title|
+-----------+--------------------+
|red ball   |A big red ball      |
|red ball   |A small blue ball   |
|...        |...                 |
+-----------+--------------------+

Я пытаюсь найти косинусное сходство между столбцом searchterm и столбцом заголовка в Scala.Я могу маркировать каждый столбец без проблем, но большинство реализаций сходства, которые я обнаружил в Интернете, работают по строкам, а не по столбцам, то есть они сравнивают «большой красный шар» с «маленьким синим шаром», а не с перекрестным сравнением столбцов.Я действительно хочу.Есть идеи?Я очень новичок в Scala, но это то, как я бы делал это на Python.

def get_text_cosine_similarity(row):

  # Form TF-IDF matrix
  text_arr = row[['searchterm', 'title']].values
  tfidf_vectorizer = TfidfVectorizer()
  tfidf_matrix = tfidf_vectorizer.fit_transform(text_arr)

  # Get cosine similarity 'score', assuming keyword is at index 0
  similarity_scores = cosine_similarity(tfidf_matrix[0], tfidf_matrix)

  return pd.Series(similarity_scores[0][1:])


df[['title_cs']] = df.apply(get_text_cosine_similarity, axis=1)

Использование sklearn.metrics.pairwise.cosine_similarity и sklearn.feature_extraction.text.TfidfVectorizer

1 Ответ

0 голосов
/ 28 февраля 2019

Вы можете транспонировать матрицу, а затем выполнить косинусное сходство

...