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

使用spaCy替换句子指定单词为POS标签及AttributeError报错解决

错误原因

spacy.tokens.doc.Doc是spaCy封装的文档对象,没有Python字符串的replace方法,你原来的写法相当于对整个Doc对象调用替换,自然会触发属性不存在的报错。另外原有代码还有2处隐性问题:

  • spaCy的nlp管道不能直接接收字符串列表作为输入,需要遍历列表逐个处理单句
  • 原来的列表推导逻辑是只保留符合pos列表的token,和「替换符合条件的token、保留其余token」的需求不符
  • 原有list_postag未包含你期望替换的PRON标签,会导致代词不会被替换

可运行的修正代码

import spacy
# 加载法语模型,提前安装命令:python -m spacy download fr_core_news_sm
nlp = spacy.load("fr_core_news_sm")

list_postag = ["ADP","NUM","INTJ","DET","PREP","CCONJ","SCONJ", "PRON"]
sent_clean = ["je mange bien", "je l'aime bien", "il est trop beau"]
sentences_final = []
lemma_token = []

for sent in sent_clean:
    sent_doc = nlp(sent)
    # 生成lemmatize后的无标点无空格句子
    mytokens = [w.lemma_.strip() for w in sent_doc if w.pos_ not in ("SPACE", "PUNCT")]
    sentences_final.append(" ".join(mytokens))
    # 替换指定POS标签的token为标签名,其余保留原词
    replace_tokens = []
    for w in sent_doc:
        if w.pos_ in list_postag:
            replace_tokens.append(w.pos_)
        else:
            replace_tokens.append(w.text)
    lemma_token.append(" ".join(replace_tokens))

print(lemma_token)
# 输出:['PRON mange bien', 'PRON PRON aime bien', 'PRON est trop beau']

代码说明

  • 遍历输入的句子列表,逐个传入nlp管道生成单句的Doc对象
  • 生成替换结果时,逐个判断每个token的POS标签:符合替换条件就插入标签字符串,不符合就插入原token的文本
  • 修正了原有句子列表里的分隔符错误(把非法的分号替换为Python列表要求的逗号)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:36:04