如何使用spacy lemmatizer来获得基本形式的单词

yi *_*ang 18 python nltk lemmatization spacy

我是新手,知道spacy并且我想使用他的lemmatizer功能,但我不知道如何使用它,就像我进入单词串,它将返回具有基本形式单词的字符串.比如'words'=> word,'did'=>'do',谢谢.

dam*_*mio 37

以前的答案是复杂的,无法编辑,所以这是一个更传统的答案.

# 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_)
Run Code Online (Sandbox Code Playgroud)

输出:

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 .
Run Code Online (Sandbox Code Playgroud)

来自官方照明之旅

  • 为什么 apples 仍然是 apples 而其他复数变成了单数? (3认同)

RAV*_*AVI 12

代码:

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_
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)

示例参考:这里

  • 这在当前版本(2.2)中给出了`ModuleNotFoundError:没有名为'spacy.en'的模块`。 (2认同)

joe*_*oel 11

如果你只想使用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)
Run Code Online (Sandbox Code Playgroud)

产量

['duck']
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了你的代码,但收到错误,``` 无法从 'spacy.lang.en' 导入名称 'LEMMA_INDEX'``` (4认同)

Sya*_*ris 5

我使用的是 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]))
Run Code Online (Sandbox Code Playgroud)

和输出:

do display word
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你 :)