Spacy多语言模型xx_ent_wiki_sm无法返回pos标签问题求助
问题根因
你使用的xx_ent_wiki_sm是spaCy官方推出的轻量多语言命名实体识别专属模型,本身未集成词性标注(POS Tagger)相关组件,因此调用token.pos_时会返回空值,和代码逻辑无关。
解决方案
- 方案一:直接替换为支持词性标注的多语言模型
如果核心需求是多语言词性标注,可直接替换加载spaCy提供的xx_sent_ud_sm模型,该模型内置词性标注、依存句法分析能力,修改后代码如下:
import spacy nlp = spacy.load('xx_sent_ud_sm') doc = nlp(u'Por David García') print(' '.join('{word}/{tag}'.format(word=t.orth_, tag=t.pos_) for t in doc))
运行后可正常输出词性标签,示例输出为:Por/ADP David/PROPN García/PROPN。
- 方案二:保留实体识别能力的同时新增词性标注管道
如果需要同时使用xx_ent_wiki_sm的命名实体识别能力和词性标注功能,可将xx_sent_ud_sm的词性标注相关组件添加到现有模型管道中,实现两类功能共用,代码示例如下:
import spacy # 分别加载实体识别模型和词性标注模型 nlp_ent = spacy.load('xx_ent_wiki_sm') nlp_pos = spacy.load('xx_sent_ud_sm') # 向实体识别模型管道中添加词性标注依赖组件 nlp_ent.add_pipe("morphologizer", source=nlp_pos) nlp_ent.add_pipe("tagger", source=nlp_pos) doc = nlp_ent(u'Por David García') # 同时支持输出词性标签和实体信息 print('词性标注结果:', ' '.join('{word}/{tag}'.format(word=t.orth_, tag=t.pos_) for t in doc)) print('实体识别结果:', [(ent.text, ent.label_) for ent in doc.ents])
内容的提问来源于stack exchange,提问作者Maria Makarova
相关产品推荐
相关产品推荐

