'最简单' getText('eat'-6ren">
gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:52:10 25 4
gpt4 key购买 nike

tl;dr 如何将词根和词性标记组合成一个完全修饰的词?

例如:

getText('easy', 'adjective', 'superlative') --> '最简单'

getText('eat', 'verb', '3rd-person-singular') --> 'eats'

getText('spoon', 'noun', 'plural') --> 'spoons'

getText('swim', 'verb', '过去分词') --> 'swum'

等等

spaCy 可以将这个句子标记/解析为以下包含“TEXT”、“LEMMA”、词性标记(“POS”)、详细词性标记(“TAG”)等的标记:

doc = nlp(u'Apple is looking at buying U.K. startup for $1 billion')

parsed tokens:

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”/“TAG”组合的情况下获得“TEXT”字符串。

也就是说,像

getText(lemma="look", pos="verb", tag="vbg")

将返回“looking”

这在 spaCy 中是否可行,如果可行,怎么做?

如果不是,是否可以使用不同的库对来自词根/引理和词性标签的单词进行取消标记?

我知道pattern.en可以复数/共轭/等(“untokenize”?)词,但使用spaCy更快的处理速度和python3兼容性会很好。

不想使用 pattern.en 的另一个原因:我想先对文本进行分词,然后再取消分词,如果两者都使用同一个库就好了。我发现 spaCy 在标记化方面比 pattern.en 好得多。 (例如,pattern.en 不会将“最简单”标记为“简单”,但 spaCy 会)。

我所说的“标记化”是指将句子拆分为词根和词性标记。

最佳答案

据我所知,spaCy 目前没有内置该功能。但是,设置 custom token attributes 会相当容易。那会做一些类似于你所要求的事情。例如,如果您想为所有动词记号定义一个过去式变位属性,您可以创建一个 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”和“buyed”,但“looked”是正确的。

至于进行共轭的可靠方法,pattern 是我遇到的最好的库。如果您将 vbd 函数替换为正确的变位函数,并为您想要的任何其他变位或词形变化定义函数,您将非常接近您的想象。这将允许您仅将 pattern 用于共轭,但使用 spaCy 进行标记化和词形还原。

关于python - 从 spaCy 中的词根 (lemma) 和词性 (POS) 标签获取完全形成的词 "text",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47983900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com