首页 > 解决方案 > 为什么 token.pos_ 不工作而其他 token.lemma_ 等工作?

问题描述

我试图从一个包含名词和动词的文本文件中分离句子。但是 token.pos_ 不工作,而 token.lemma_、token.shape_ 等工作。希望能在这方面得到一些帮助。下面是部分代码。先感谢您。

from spacy.lang.en import English
nlp = spacy.load('en_core_web_sm')
nlp = English()
sentencizer = nlp.create_pipe("sentencizer")
nlp.add_pipe(sentencizer)
doc = nlp(out_sent)

lis = []
new_lis = []
for d in doc.sents:
    lis.append(d)
print(lis)

for sent in lis:
    flag = 0
    for token in sent:
        # token.pos_ doesn't work. token.lemma_, token.shape_ etc works!
        #print(token.pos_)
        if(token.pos_ == 'NOUN' or token.pos_ == 'VERB'):
            flag = 1
    if(flag == 1):
        new_lis.append(sent)

标签: python-3.xnlpspacy

解决方案


您应该从代码片段中删除以下行:

nlp = English()

因为它覆盖了该行

nlp = spacy.load('en_core_web_sm')

后者en_core_web_sm有一个预训练的词性标注器,但English()只是一个“空白”模型,没有内置这样的词性标注器。该模型en_core_web_sm还可以使用依赖解析来拆分句子,因此无需添加sentencizer


推荐阅读