如何将列表的列表或集合的列表用于sklearn的TfidfVectorizer?
解决TfidfVectorizer处理嵌套列表时的AttributeError问题
这个问题我之前也碰到过,核心原因是你没匹配上TfidfVectorizer对输入格式的要求:
为什么会报错?
TfidfVectorizer的fit_transform()方法要求输入的raw_documents是字符串的可迭代对象——简单说,每个元素得是一条完整的文本(可以是单个单词,也可以是一整句话)。但你给的input2是嵌套列表,每个元素都是字符串列表,向量器会把每个子列表直接当作一条"文本"去处理,当它尝试调用字符串的lower()方法时,自然就炸了——列表哪来的lower()方法啊!
怎么解决?
把每个子列表转换成单个字符串就行,通常用空格把里面的单词连起来,让每个子列表变成一条完整的文本字符串。
给你改好的代码:
from sklearn.feature_extraction.text import TfidfVectorizer vectorizer = TfidfVectorizer(min_df=1, stop_words="english") input2 = [["This", "is", "a", "test"], ["It", "is", "raining", "today"]] # 关键一步:把每个子列表转成空格分隔的字符串 processed_input2 = [' '.join(doc) for doc in input2] # 现在就能正常运行啦 print(vectorizer.fit_transform(processed_input2))
额外提一句你的input1
你的input1能跑是因为它是单级字符串列表,向量器会把每个单词当成一条独立的文本处理。如果你的实际需求是把input1当作一条完整的文本(而不是4条单独的文本),那你也得把它转成单个字符串:input1_processed = [' '.join(input1)],这样向量器才会按你预期的方式处理。
内容的提问来源于stack exchange,提问作者Ley0nn
相关产品推荐
相关产品推荐

