Я пытаюсь объединить куски именных фраз в предложение, а затем получить pos-теги для каждого токена в объединенном документе.Однако для каждого объединенного промежутка я, кажется, получаю тег pos первого токена в промежутке (обычно это DET или ADJ) вместо NOUN.
Вот код:
def noun_chunk_retokenizer(doc):
with doc.retokenize() as retokenizer:
for chunk in doc.noun_chunks:
retokenizer.merge(chunk)
return doc
nlp = spacy.load('en_core_web_sm')
nlp.add_pipe(noun_chunk_retokenizer)
query = "when is the tennis match happening?"
[(c.text,c.pos_) for c in nlp(query)]
Вот результат, который я получаю:
[('when', 'ADV'),
('is', 'VERB'),
('the tennis match', 'DET'),
('happening', 'VERB'),
('?', 'PUNCT')]
, но я ожидаю, что «теннисный матч» будет помечен как «НОУН», как это работает в демонстрационной версии дисплеев: https://explosion.ai/demos/displacy?
Кажется, должен быть "стандартный" способ сделать это, но я не уверен, как.