Python计算文本cosine similarity时字符串输入报float转换错误如何解决
错误原因
- 调用
cosine_similarity时直接传入了原始文本字符串,该函数仅支持接收数值型特征向量作为输入,这是报错的核心原因,和输入内容包含空格无关 - 读取Excel的代码多写了一个多余的右括号,运行时会先触发语法错误
- 已经在数据集上通过
fit_transform拟合完成TF-IDF词典后,新输入文本不能再次执行fit操作,否则会出现特征维度不匹配的问题
修正后的完整代码
import pandas as pd from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity # 读取Excel文本列,修正语法错误并转成一维序列 text = pd.read_excel("Database1.xlsx", usecols='C').squeeze('columns') new_input = input('Insert the sentence: ') # 拟合TF-IDF向量器并转换数据集 tfidf_vectorizer = TfidfVectorizer(analyzer='word', stop_words='english') tfidf_matrix = tfidf_vectorizer.fit_transform(text) print(tfidf_matrix.shape) # 将新输入转换为同维度TF-IDF向量 new_input_vec = tfidf_vectorizer.transform([new_input]) # 计算余弦相似度 similarity = cosine_similarity(new_input_vec, tfidf_matrix) print(similarity) # 可选功能:筛选相似度高于阈值的相似语句 threshold = 0.7 similar_res = text[similarity[0] > threshold] print("匹配到的相似语句:") print(similar_res)
关键修改说明
- 新输入的文本不需要做float类型转换,完全保留输入空格,只需要用已经拟合好的TF-IDF向量器调用
transform方法,转成和数据集维度一致的数值向量即可,注意输入要包裹在列表中,避免单字符串被按字符拆分 - 用
squeeze方法将读取到的单列DataFrame转成一维序列,适配TF-IDF向量器的输入要求 - 所有导入语句统一放在代码顶部,符合Python编码规范
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

