You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PySpark计算两个DataFrame中文本列的相似度

实现方案

我们可以通过构造两个DataFrame的全量笛卡尔积实现所有行两两配对,再对配对后的文本计算相似度,具体实现步骤如下:


步骤1:生成全配对数据集(笛卡尔积)

这一步完成后数据集行数等于df1行数 × df2行数,每一行都是一组df1行和df2行的配对。

import pandas as pd

# 给两个DataFrame添加相同的临时键,用于全连接
df1['tmp_key'] = 0
df2['tmp_key'] = 0

# 全连接后删除临时键,得到全配对数据集
full_df = pd.merge(df1, df2, on='tmp_key').drop('tmp_key', axis=1)

步骤2:计算文本相似度

根据你的文本长度和业务场景,可以选择以下两种常用的相似度计算方案:

方案1:TF-IDF+余弦相似度(适合长文本、语义层面匹配)

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

# 合并两个文本列训练TF-IDF模型,保证词表统一
all_text = pd.concat([df1['title'], df2['headline']])
tfidf_model = TfidfVectorizer().fit(all_text)

# 分别将两个文本列转为向量
title_vec = tfidf_model.transform(full_df['title'])
headline_vec = tfidf_model.transform(full_df['headline'])

# 逐行计算余弦相似度,得分范围[0,1],值越高越相似
full_df['similarity_score'] = [cosine_similarity(v1, v2)[0][0] for v1, v2 in zip(title_vec, headline_vec)]

方案2:Levenshtein编辑距离相似度(适合短文本、字符层面匹配)

先安装依赖:pip install python-Levenshtein

from Levenshtein import ratio

# 逐行计算编辑距离相似度,得分范围[0,1],值越高越相似
full_df['similarity_score'] = full_df.apply(lambda row: ratio(row['title'], row['headline']), axis=1)

最终得到的full_df已经包含两个原数据集的所有字段和对应的相似度得分,完全符合需求。

内容的提问来源于stack exchange,提问作者FATMA BERRAK GUNGOR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:45:03