Я новичок в spacy и хочу использовать его функцию лемматизатора, но я не знаю, как ее использовать, например, в строки слов, которые вернут строку с базовой формой слова.
Примеры:
- 'слова' => 'слово'
- «сделал» => «сделал»
Спасибо.
Я новичок в spacy и хочу использовать его функцию лемматизатора, но я не знаю, как ее использовать, например, в строки слов, которые вернут строку с базовой формой слова.
Примеры:
Спасибо.
Предыдущий ответ запутан и не может быть отредактирован, поэтому вот более традиционный.
# make sure your downloaded the english model with "python -m spacy download en"
import spacy
nlp = spacy.load('en')
doc = nlp(u"Apples and oranges are similar. Boots and hippos aren't.")
for token in doc:
print(token, token.lemma, token.lemma_)
Выход:
Apples 6617 apples
and 512 and
oranges 7024 orange
are 536 be
similar 1447 similar
. 453 .
Boots 4622 boot
and 512 and
hippos 98365 hippo
are 536 be
n't 538 not
. 453 .
Из официального тура по освещению
nlp
? См. здесь
- person Philip O'Brien; 21.07.2017
Если вы хотите использовать только Lemmatizer, вы можете сделать это следующим образом:
from spacy.lemmatizer import Lemmatizer
from spacy.lang.en import LEMMA_INDEX, LEMMA_EXC, LEMMA_RULES
lemmatizer = Lemmatizer(LEMMA_INDEX, LEMMA_EXC, LEMMA_RULES)
lemmas = lemmatizer(u'ducks', u'NOUN')
print(lemmas)
Выход
['duck']
Обновить
Начиная с версии spacy 2.2, LEMMA_INDEX, LEMMA_EXC и LEMMA_RULES объединены в объект Lookups
:
import spacy
nlp = spacy.load('en')
nlp.vocab.lookups
>>> <spacy.lookups.Lookups object at 0x7f89a59ea810>
nlp.vocab.lookups.tables
>>> ['lemma_lookup', 'lemma_rules', 'lemma_index', 'lemma_exc']
Вы по-прежнему можете использовать лемматизатор напрямую со словом и тегом POS (часть речи):
from spacy.lemmatizer import Lemmatizer, ADJ, NOUN, VERB
lemmatizer = nlp.vocab.morphology.lemmatizer
lemmatizer('ducks', NOUN)
>>> ['duck']
Вы можете передать тег POS как импортированную константу, как указано выше, или как строку:
lemmatizer('ducks', 'NOUN')
>>> ['duck']
from spacy.lemmatizer import Lemmatizer, ПРИЛАГ, СУЩЕСТВИТЕЛЬНОЕ, ГЛАГОЛ
Код:
import os
from spacy.en import English, LOCAL_DATA_DIR
data_dir = os.environ.get('SPACY_DATA', LOCAL_DATA_DIR)
nlp = English(data_dir=data_dir)
doc3 = nlp(u"this is spacy lemmatize testing. programming books are more better than others")
for token in doc3:
print token, token.lemma, token.lemma_
Вывод:
this 496 this
is 488 be
spacy 173779 spacy
lemmatize 1510965 lemmatize
testing 2900 testing
. 419 .
programming 3408 programming
books 1011 book
are 488 be
more 529 more
better 615 better
than 555 than
others 871 others
Ссылка на пример: здесь
ModuleNotFoundError: No module named 'spacy.en'
в текущей версии (2.2).
- person Suzana; 23.04.2020
Я использую Spacy версии 2.x
import spacy
nlp = spacy.load('en_core_web_sm', disable=['parser', 'ner'])
doc = nlp('did displaying words')
print (" ".join([token.lemma_ for token in doc]))
и вывод:
do display word
Надеюсь, поможет :)
Я использовал:
import spacy
nlp = en_core_web_sm.load()
doc = nlp("did displaying words")
print(" ".join([token.lemma_ for token in doc]))
>>> do display word
Но это дало ошибку OSError: [E050] Can't find model 'en_core_web_sm'. It doesn't seem to be a shortcut link, a Python package or a valid path to a data directory.
, я использовал:
pip3 install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.2.0/en_core_web_sm-2.2.0.tar.gz
чтобы избавиться от ошибки.