Spacy token.lemma_ не идентифицирует существительные и местоимения

Я слежу за учебником по лемматизации - ›https://www.machinelearningplus.com/nlp/lemmatization-examples-python/

Как было сказано в разделе пространственной лемматизации, я загрузил модель 'en-core-web-sm', проанализировал и извлек леммы каждого слова из данного предложения.

Мой код такой, как показано ниже

nlp = spacy.load('en_core_web_sm', disable=['parser', 'ner'])

sentence = "The striped bats are hanging on their feet for best"

doc = nlp(sentence)

lemmatized_spacy_output = " ".join([token.lemma_ for token in doc])
print(lemmatized_spacy_output)

Для ввода

"The striped bats are hanging on their feet for best"

Он дает результат как

the stripe bat be hang on their foot for good

в то время как ожидаемый результат

the strip bat be hang on -PRON- foot for good'

Как видно, слово stripes должно быть идентифицировано как глагол, но по какой-то причине оно классифицируется как существительное (поскольку на выходе получается полоса, а не полоса). Кроме того, он не определяет личные местоимения, а выдает токены как есть.

Я уже пробовал много вопросов по github и stackoverflow, но ни один из них не нацелен на мой запрос.


person Swati Srivastava    schedule 16.02.2021    source источник
comment
Учебник выглядит так, как будто он предназначен для spaCy v2.x вместо v3.x, где некоторые из этого поведения изменились.   -  person aab    schedule 16.02.2021
comment
@aab моя просторная версия показывает 3.0.3. Не могли бы вы подробнее рассказать о том, какое поведение было изменено в spacy 3.x?   -  person Swati Srivastava    schedule 17.02.2021


Ответы (1)


Как сказал в своем комментарии Ааб. Какую версию вы используете? Я использую 3-ю версию Spacy и Call

nlp = spacy.load('en_core_web_sm', disable=['parser', 'ner'])
sentence = "The striped bats are hanging on their feet for best"
doc = nlp(sentence)

for token in doc:
    print(token.text, " -- ", token.pos_, " -- ",token.lemma_)

возвращается

The  --  DET  --  the
striped  --  VERB  --  stripe
bats  --  NOUN  --  bat
are  --  VERB  --  be
hanging  --  VERB  --  hang
on  --  ADP  --  on
their  --  PRON  --  their
feet  --  NOUN  --  foot
for  --  ADP  --  for
best  --  ADJ  --  good

Это означает, что striped определяется как глагол

person krisograbek    schedule 16.02.2021
comment
моя просторная версия - 3.0.3. Насколько я помню, глагольная версия слова striped должна быть полосой, а версия существительного должна быть полосой (см. Статью, на которую я ссылался в вопросе). Кроме того, хотя token.pos показывает PRON, но их все еще отображается как их, а не как -PRON-. Что делать, чтобы на выходе получился PRON? - person Swati Srivastava; 17.02.2021
comment
Если вы хотите получить в точности те же результаты, что и в статье, вам нужно понизить вашу просторность до v2. Я больше не уверен, что вас беспокоит. Вы думаете, что делаете что-то не так, потому что получаете разные результаты? Это нормально, не волнуйтесь и продолжайте учиться на основе своей статьи. - person krisograbek; 17.02.2021
comment
Я обязательно попробую перейти на v2. Моей заботой было просто получить результат, показанный в статье. Я подумал, что, возможно, некоторые другие функции предоставят мне точный результат, как в статье. В любом случае спасибо за помощь! - person Swati Srivastava; 18.02.2021