从 spaCy 中的词根 (引理) 和词性 (POS) 标签获取完全形成的词"text"



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。

最新更新