Как вы правильно заметили, spacy.lang.en.English
и en_core_web_sm
- две разные модели. Эти две модели могут помечать слова по-разному А поскольку лемма слова также зависит от его POS-тега, две модели могут возвращать разные лемматизации.
Использовать лемму из English
и POS из en_core_web_sm
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)])