如何用Python计算DataFrame每行两列文本的成对Jaccard相似度
实现方法
首先导入所需依赖库:
import pandas as pd import nltk
在你已经构造好目标DataFrame的前提下,可选择以下任意一种方式完成批量计算:
方法1:apply逐行处理(逻辑最直观)
完全沿用你给出的单条计算逻辑,对整表逐行遍历计算:
df['jac_q1_q2'] = df.apply(lambda row: nltk.jaccard_distance(set(row['q1']), set(row['q2'])), axis=1)
方法2:列表推导式(执行性能更高)
通过zip配对两列的句子,批量计算后直接赋值给新列:
df['jac_q1_q2'] = [nltk.jaccard_distance(set(q1), set(q2)) for q1, q2 in zip(df['q1'], df['q2'])]
补充说明
你当前的计算逻辑是字符级的Jaccard距离,若需要更符合句子相似度场景的词级计算,可先对句子分词再处理:
# 第一次使用分词功能需要先下载punkt资源 nltk.download('punkt') df['jac_q1_q2_word_level'] = df.apply(lambda row: nltk.jaccard_distance( set(nltk.word_tokenize(row['q1'])), set(nltk.word_tokenize(row['q2'])) ), axis=1)
内容的提问来源于stack exchange,提问作者Nishant
相关产品推荐
相关产品推荐

