使用Sastrawi词干提取时触发‘list’ object has no attribute ‘split’错误
解决词干提取时的'list' object has no attribute 'split'错误
错误原因
你的data['abstrak']和data['judul']列中的元素不是字符串类型,而是列表。当apply(stemming)调用函数时,传入的text参数是列表对象,而split()是字符串专属方法,列表没有这个属性,因此触发错误。
解决步骤
1. 确认数据类型
先检查列中元素的类型,验证是否为列表:
print(data['abstrak'].apply(type).unique()) print(data['judul'].apply(type).unique())
2. 修改stemming函数兼容列表输入
直接修改函数,判断输入类型后分别处理:
from Sastrawi.Stemmer.StemmerFactory import StemmerFactory factory = StemmerFactory() stemmer = factory.create_stemmer() def stemming(text): # 输入是列表,直接遍历每个词做词干提取 if isinstance(text, list): return [stemmer.stem(word) for word in text] # 输入是字符串,先分割再处理 elif isinstance(text, str): return [stemmer.stem(word) for word in text.split()] # 其他类型返回原数据 else: return text data['abstrak'] = data['abstrak'].apply(stemming) data['judul'] = data['judul'].apply(stemming) data.head()
3. 若数据应为字符串(误转为列表),先转回字符串
如果这些列原本应该是字符串,只是之前的操作误转成了列表,可以先将列表转回字符串再处理:
# 把列表转回空格分隔的字符串 data['abstrak'] = data['abstrak'].apply(lambda x: ' '.join(x) if isinstance(x, list) else x) data['judul'] = data['judul'].apply(lambda x: ' '.join(x) if isinstance(x, list) else x) # 再使用原stemming函数 def stemming(text): return [stemmer.stem(word) for word in text.split()] data['abstrak'] = data['abstrak'].apply(stemming) data['judul'] = data['judul'].apply(stemming) data.head()
内容的提问来源于stack exchange,提问作者putri24
相关产品推荐
相关产品推荐

