Pandas报'Series对象无split属性' 计算文本Jaccard相似度求助
错误原因
你遇到的问题核心有4点:
data.iloc[2]返回的是Pandas Series类型的行对象,没有字符串的split方法,调用自然报错- 你的数据结构本身就是每行每列存一个单词,不需要额外做拆分操作,之前的
split属于多余逻辑 - 你之前的空值过滤逻辑有误,只判断了整个Series是否为nan,没有过滤行内的空值单元格
- 原代码中
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
相关产品推荐
相关产品推荐

