如何让Stanza词形还原器仅返回lemma而非字典?
提取Stanza西班牙语词形还原结果的方法
你可以直接从Stanza返回的Document对象中遍历提取lemma字段,不需要额外运行多余的处理步骤,具体实现如下:
完整代码示例
import stanza # 下载模型并初始化pipeline(和你原代码一致) stanza.download('es', package='ancora', processors='tokenize,mwt,pos,lemma', verbose=False) stNLP = stanza.Pipeline(processors='tokenize,mwt,pos,lemma', lang='es', use_gpu=True) # 处理目标文本 doc = stNLP('me hubiera gustado mas “sincronia” con la primaria') # 提取所有词形还原结果 lemmas = [] for sentence in doc.sentences: # 处理多词拆分(比如西班牙语缩合词,如"del"会拆成"de"+"el") for mwt in sentence.mwts: lemmas.extend([token.lemma for token in mwt.tokens]) # 处理普通单词,排除已被多词拆分覆盖的token for token in sentence.tokens: if not token.is_mwt: lemmas.append(token.lemma) # 输出结果 print(lemmas)
简化写法(列表推导式)
如果想要更简洁的代码,可以用嵌套列表推导式实现相同逻辑:
lemmas = [t.lemma for sent in doc.sentences for mwt in sent.mwts for t in mwt.tokens] + \ [t.lemma for sent in doc.sentences for t in sent.tokens if not t.is_mwt]
说明
- 上述代码仅从Stanza返回的结果中提取
lemma字段,不会触发额外的模型计算,完全符合你"不想让工具做额外工作"的需求。 - 必须处理
mwts(多词token)部分,否则会漏掉西班牙语中缩合词拆分后的词形还原结果,保证提取的完整性。
内容的提问来源于stack exchange,提问作者trashparticle
相关产品推荐
相关产品推荐

