使用Spacy进行词形还原时输出为空的问题咨询
Spacy 3.2.0 印尼语词形还原功能正确用法及问题排查
问题根源
- 直接初始化的
Indonesian()属于空白语言实例,仅包含基础分词逻辑,未内置词形还原(Lemmatizer)组件,也未绑定完整的词汇属性映射,导致token.lemma_返回空值,最终输出结果为空。 - Spacy的词形还原、停用词识别、词性标注等高级功能,都依赖对应语言的预训练管道包才能正常运行,空白实例默认不携带这些组件。
解决步骤
- 安装与Spacy 3.2.0版本匹配的印尼语预训练管道,执行命令:
pip install id_ud_gsd==3.2.0 - 修改代码,加载预训练管道替代空白语言实例,修改后代码如下:
import spacy # 加载包含词形还原、停用词表的印尼语预训练管道 nlp = spacy.load("id_ud_gsd") def tokenizer(text): return [token.lemma_.lower() for token in nlp(text) if not token.is_stop and not token.is_punct] docs = [ 'Saya pikir ayah saya terlihat seperti Matt Damon.', 'Tapi apakah rezim mempelajari sesuatu?', 'Lalu dia mulai berjualan mariyuana.', 'Apakah Anda ingin menjadi penerbit, seseorang yang memberi lisensi teknologi?', ] for text in docs: print(tokenizer(text))
预期输出
运行修改后的代码可得到正常的词形还原结果,示例输出如下:
['pikir', 'ayah', 'lihat', 'matt', 'damon'] ['rezim', 'pelajar', 'sesuatu'] ['mulai', 'jual', 'mariyuana'] ['ingin', 'terbit', 'orang', 'beri', 'lisensi', 'teknologi']
注意事项
- 预训练管道版本必须和你使用的Spacy版本完全匹配,若使用其他版本Spacy,需要安装对应版本的
id_ud_gsd包,否则会出现兼容性报错。 - 如果需要使用自定义管道,需要手动添加词形还原组件并绑定印尼语的词形映射表,操作复杂度远高于直接使用官方预训练管道。
内容的提问来源于stack exchange,提问作者caeruleum
相关产品推荐
相关产品推荐

