我想知道为什么从这两种语言模型(spacy.lang.en.English和en_core_web_sm)中得到不同的词素化结果。
根据文档,在加载en_core_web_sm模型时,这应该告诉spacy使用语言“ en”并初始化spacy.lang.en.English,所以我不明白为什么限制词规则会改变。如何从英语模型中获得引理,但如何从en_core_web_sm中获得标签和POS?
from spacy.lang.en import English
nlp = English()
doc = nlp('nonlinearities')
print('English nlp: ', [(token.lemma_, token.lemma, token.tag_, token.pos_) for token in doc])
nlp = spacy.load('en_core_web_sm', disable = ['ner'])
doc = nlp('nonlinearities')
print('loaded model nlp: ', [(token.lemma_, token.lemma, token.tag_, token.pos_) for token in doc])
以下是输出:
English nlp: [('nonlinearity', 3011504801575762058, '', '')]
loaded model nlp: [('nonlinearitie', 2964900603636025371, 'NNS', 'NOUN')]
答案 0 :(得分:0)
正如您正确指出的,spacy.lang.en.English
和en_core_web_sm
是两个不同的模型。这两个模型可能会在POS中用不同的方式标记单词。而且,由于单词的引理还取决于其POS标签,因此两个模型可能会返回不同的词素化。
要使用English
中的引理和en_core_web_sm
中的POS
nlp = English()
sentence = 'nonlinearities is none'
doc1 = nlp(sentence)
print('English nlp: ', [(token.lemma_, token.lemma, token.tag_, token.pos_) for token in doc1])
nlp = spacy.load('en_core_web_sm', disable = ['ner'])
doc2 = nlp(sentence)
print('loaded model nlp: ', [(token.lemma_, token.lemma, token.tag_, token.pos_) for token in doc2])
print('Mixed nlp: ', [(doc1[i].lemma_, doc1[i].lemma, token.tag_, token.pos_) for i, token in enumerate(doc2)])
doc2 = nlp('nonlinearities is none')
print('loaded model nlp: ', [(token.lemma_, token.lemma, token.tag_, token.pos_) for token in doc2])
print('Mixed nlp: ', [(doc1[i].lemma_, doc1[i].lemma, token.tag_, token.pos_) for i, token in enumerate(doc2)])