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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:50:27