При использовании spacy лемма токена (lemma_) зависит от POS. Поэтому конкретная строка может иметь более одной леммы. Например:
import spacy
nlp = spacy.load('en')
for tok in nlp(u'He leaves early'):
if tok.text == 'leaves':
print (tok, tok.lemma_)
for tok in nlp(u'These are green leaves'):
if tok.text == 'leaves':
print (tok, tok.lemma_)
Выводит, что лемма для «листьев» может быть «уходить» или «лист», в зависимости от контекста. Я заинтересован в:
1) Получить все возможные леммы для конкретной строки независимо от контекста. То есть, применяя лемматизатор вне зависимости от POS или исключений, просто получите все возможные варианты.
Кроме того, но я бы тоже хотел применить токенизацию и получить «правильную» лемму.
2) Работать над большим корпусом, используя только токенизацию и лемматизатор, настолько эффективно, насколько это возможно, не повреждая лемматизатор вообще. Я знаю, что могу, например, отбросить конвейер 'ner' и не должен отбрасывать 'tagger', но не получил прямого ответа в отношении синтаксического анализатора и т. Д. Из моделирования по корпусу кажется, что результаты дали то же самое , но я думал, что «парсер» или «предложение» должны влиять? Мой текущий код на данный момент:
import multiprocessing
our_num_threads = multiprocessing.cpu_count()
corpus = [u'this is a text', u'this is another text'] ## just an example
nlp = spacy.load('en', disable = ['ner', 'textcat', 'similarity', 'merge_noun_chunks', 'merge_entities', 'tensorizer', 'parser', 'sbd', 'sentencizer'])
nlp.pipe(corpus, n_threads = our_num_threads)
Если у меня есть хороший ответ на 1 + 2, я могу тогда для своих нужд использовать слова, которые были «лемматизированы», рассмотреть другие возможные варианты.
Спасибо!