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

Pandas报'Series对象无split属性' 计算文本Jaccard相似度求助

错误原因

你遇到的问题核心有4点:

  1. data.iloc[2]返回的是Pandas Series类型的行对象,没有字符串的split方法,调用自然报错
  2. 你的数据结构本身就是每行每列存一个单词,不需要额外做拆分操作,之前的split属于多余逻辑
  3. 你之前的空值过滤逻辑有误,只判断了整个Series是否为nan,没有过滤行内的空值单元格
  4. 原代码中get_jaccard_sim函数的return语句缩进错误,不属于函数内部代码,运行也会报错
修复后完整代码
import pandas as pd
from collections import Counter

data = pd.read_csv("articles of Shoshana Solomon2.csv", index_col ="article_id")

# 定义工具函数:从行Series中提取有效非空单词列表
def get_valid_word_list(row_series):
    # 过滤nan、空字符串、空白字符串等无效值
    return [word for word in row_series.dropna().tolist() if str(word).strip() != '']

first_words = get_valid_word_list(data.iloc[2])
second_words = get_valid_word_list(data.iloc[3])

# 统计输出两行的词频
first_word_count = Counter(first_words)
second_word_count = Counter(second_words)
print("第一行词频统计:", dict(first_word_count))
print("第二行词频统计:", dict(second_word_count))

# 计算Jaccard相似度
def get_jaccard_sim(word_list1, word_list2): 
    a = set(word_list1)
    b = set(word_list2)
    c = a.intersection(b)
    return float(len(c)) / (len(a) + len(b) - len(c))

sim_score = get_jaccard_sim(first_words, second_words)
print("两段文本的Jaccard相似度为:", sim_score)
可选扩展:TF-IDF余弦相似度计算

如果需要更精准的语义相似度,可使用你已经导入的TF-IDF工具计算,补充代码如下:

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

# 把单词列表拼接为完整字符串传入向量化工具
first_text = ' '.join(first_words)
second_text = ' '.join(second_words)

tfidf = TfidfVectorizer()
tfidf_matrix = tfidf.fit_transform([first_text, second_text])
cos_sim = cosine_similarity(tfidf_matrix[0], tfidf_matrix[1])[0][0]
print("两段文本的TF-IDF余弦相似度为:", cos_sim)

内容的提问来源于stack exchange,提问作者d12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:21:01