【发布时间】:2019-07-21 18:22:05
【问题描述】:
我的数据看起来像这样...
+-----------+--------------------+
| searchterm| title|
+-----------+--------------------+
|red ball |A big red ball |
|red ball |A small blue ball |
|... |... |
+-----------+--------------------+
我正在尝试在 Scala 中查找 searchterm 列和 title 列之间的余弦相似度。我能够毫无问题地标记每一列,但是我发现在线的大多数相似性实现都是跨行而不是跨列操作的,即他们会将“一个大红球”与“一个小蓝球”进行比较,而不是跨列比较我其实想要。有任何想法吗?我对 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
【问题讨论】:
标签: scala apache-spark nlp cosine-similarity