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

使用spaCy对DataFrame数据移除停用词时报AttributeError如何解决

问题修复方案

报错原因

你定义的tokenize函数直接返回了分词后每个token的text属性(字符串类型),只有spaCy原生的Token对象才有is_stop属性,字符串不存在该属性,因此触发AttributeError。

解决方案

这里提供两种可直接使用的修改方案:

方案1:调整停用词移除逻辑,保留原有分词列

如果需要继续保留单独的tokenizing列存储分词后的字符串列表,可直接调用spaCy内置的印尼语停用词集合做判断,仅修改stopwords_remover函数即可:

import pandas as pd
from spacy.lang.id import Indonesian

nlp = Indonesian()
# 提前获取spaCy内置的印尼语停用词集合
stop_words = nlp.Defaults.stop_words

data = [
    'Aku suka sekali beradai di wilayah yang dingin',
    'Kembali jika terjadi sesuatu di sana',
    'Sampai berapa lama kamu akan pergi dari sini',
]
df = pd.DataFrame({'text': data})
df['text'] = df['text'].str.lower()

# Tokenizing 逻辑保持不变
def tokenize(word):
  return [token.text for token in nlp(word)]

df['tokenizing'] = df['text'].apply(tokenize)

# 修改停用词移除函数,直接用停用词集合判断
def stopwords_remover(words):
  return [word for word in words if word not in stop_words]

df['stopwords'] = df['tokenizing'].apply(stopwords_remover)
df

方案2:合并分词与停用词判断逻辑,减少重复计算

如果不需要严格拆分分词和停用词移除步骤,可直接在同一步处理两个逻辑,运行效率更高:

import pandas as pd
from spacy.lang.id import Indonesian

nlp = Indonesian()

data = [
    'Aku suka sekali beradai di wilayah yang dingin',
    'Kembali jika terjadi sesuatu di sana',
    'Sampai berapa lama kamu akan pergi dari sini',
]
df = pd.DataFrame({'text': data})
df['text'] = df['text'].str.lower()

# 分词同时过滤停用词,直接返回过滤后的字符串列表
def tokenize_and_remove_stopwords(word):
    return [token.text for token in nlp(word) if not token.is_stop]

df['tokenizing'] = df['text'].apply(lambda x: [token.text for token in nlp(x)])
df['stopwords'] = df['text'].apply(tokenize_and_remove_stopwords)
df

内容的提问来源于stack exchange,提问作者caeruleum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:15:10