tl; dr; dr如何将单词root和earpech标签组合到一个完全修改的单词中?
例如:
getText('easy', 'adjective', 'superlative') --> 'easiest'
getText('eat', 'verb', '3rd-person-singular') --> 'eats'
getText('spoon', 'noun', 'plural') --> 'spoons'
getText('swim', 'verb', 'past-participle') --> 'swum'
etc
spacy可以将此句子置于以下令牌中,其中包含"文本","引理",语音标签的一部分(" pos"),详细的语音标签(" tag")等等:
:doc = nlp(u'Apple is looking at buying U.K. startup for $1 billion')
解析令牌:
TEXT LEMMA POS TAG DEP SHAPE ALPHA STOP
Apple apple PROPN NNP nsubj Xxxxx True False
is be VERB VBZ aux xx True True
looking look VERB VBG ROOT xxxx True False
at at ADP IN prep xx True True
buying buy VERB VBG pcomp xxxx True False
U.K. u.k. PROPN NNP compound X.X. False False
...
我希望扭转此过程 - 获得一个"文本"字符串给定特定的" lemma"/" pos"/" pos"/" tag" combo。
就是,
之类的东西getText(lemma="look", pos="verb", tag="vbg")
将返回"looking"
。
这是可以在Spacy中做的,如果是的话,如何?
如果不是,是否可以从根/引理和词性库中的单词不及格的单词?
我知道模式。
不想使用模式的另一个原因。我发现Spacy在令牌化方面比模式要好得多。(例如,模式。
通过" tokenize",我的意思是将句子分成单词根和词性标签。
据我所知,Spacy当前没有内置的功能。但是,设置自定义令牌属性会很容易做,这些属性会做与您类似的事情重新问。例如,如果您想为所有动词令牌定义一个过去的连续轭属性,则可以创建一个VBD
函数,并将其应用于每个令牌上的getter作为自定义属性,如下:
>>> import spacy
>>> nlp = spacy.load('en')
>>> def vbd(token):
... """a bad conjugation function"""
... if token.pos_ == 'VERB':
... return token.lemma_ + 'ed'
>>> spacy.tokens.Token.set_extension('vbd', getter=vbd, default=None)
>>> doc = nlp(u'Apple is looking at buying U.K. startup for $1 billion')
>>> for token in doc:
... print(token.text, ":", token._.vbd)
Apple : None
is : beed
looking : looked
at : None
buying : buyed
U.K. : None
startup : None
for : None
$ : None
1 : None
billion : None
您可以看到,该功能并不是很健壮,因为它吐出了" beed"one_answers" buyed",但"看起来"是正确的。
至于一种强大的方法来进行共轭,pattern
是我遇到的最好的库。如果您将vbd
函数替换为正确的共轭函数,并为您想要的其他结合或拐点定义函数,您将与您想象中的内容非常接近。这将使您仅用于共轭pattern
,但是用spaCy
进行令牌化和lematize。