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

Python如何实现分词逆操作及解决'str'对象无append属性报错

报错原因排查

问题出在循环内的变量覆盖逻辑:

  • 初始定义的data_untoken是列表类型,第一次循环执行data_untoken.append(text)时操作合法
  • 紧随其后的赋值语句data_untoken = TreebankWordDetokenizer().detokenize(text),直接将data_untoken变量重新绑定到了逆分词返回的字符串对象上,原本的列表引用被完全覆盖
  • 第二次循环触发时,data_untoken已经是字符串类型,不存在append方法,直接触发类型报错:'str' object has no attribute 'append'
正确实现方案

核心逻辑修正点:不要将存储结果的列表变量和逆分词返回的临时字符串变量重名,每轮逆分词完成后将结果追加到结果列表即可。
优化建议:提前初始化一次TreebankWordDetokenizer实例,无需在循环内重复创建对象,降低额外开销。

可运行的正确代码如下:

from nltk.tokenize.treebank import TreebankWordDetokenizer

# 初始化逆分词器实例
detokenizer = TreebankWordDetokenizer()
data_untoken = []
data = [['this', 'is', 'a', 'sentence'], ['this', 'is', 'a', 'sentence', '2']]

for text in data:
    # 单独定义临时变量存储单条句子的逆分词结果
    untokenized_sentence = detokenizer.detokenize(text)
    # 将结果追加到结果列表
    data_untoken.append(untokenized_sentence)

print(data_untoken)
# 输出匹配预期:['this is a sentence', 'this is a sentence 2']

补充说明:如果数据集没有复杂标点、特殊符号的拼接规则,仅需空格分隔拼接的场景,也可以直接用列表推导式实现:data_untoken = [' '.join(sent) for sent in data],无需依赖nltk库。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 20:36:02