当前位置: 首页 > 知识库问答 >
问题:

从spaCy中的词根(引理)和词性(POS)标签获取完全形成的单词“文本”

司徒元明
2023-03-14

tl;dr.我怎样才能将词根和词性标签组合成一个完全修改过的单词?

例如:

getText('easy'、'Adexible'、'Superative')--

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

getText('spoon'、'noun'、'复数')--

getText(“游泳”、“动词”、“过去分词”)-

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”/“TAG”组合,获取一个“TEXT”字符串。

也就是说

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

将返回“查找”

这是否可能在太空中实现,如果可能,如何实现?

如果没有,是否可以使用不同的库来取消词根/引理和词性标记中的单词的发音?

我知道这种模式。en可以复数化/共轭化/etc(“untokenize”?)但是使用spaCy更快的处理速度和python3兼容性会更好。

不想使用模式的另一个原因。en:我想先标记文本,然后再取消标记文本,如果两者都使用同一个库就好了。我发现spaCy比pattern更擅长标记化。EN(例如pattern.en不会将“easest”标记为“easy”,但spaCy会)。

“标记化”指的是将一个句子拆分为词根和词性标签。


共有1个答案

唐俊楚
2023-03-14

据我所知,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”和“buyed”,但“looked”是正确的。

至于实现共轭的健壮方法,pattern是我遇到的最好的库。如果你用正确的共轭函数替换vbd函数,并为你想要的任何其他共轭或屈折定义函数,你就会非常接近你所想象的。这将允许您仅对共轭使用模式,但使用空间标记化和柠檬化。

 类似资料:
  • 问题内容: 我有以下两个带有POS标签的字符串: Sent1 :“ 类似作家专业或 词组工作方式的 东西真的很酷。 ” [(’something’,’NN’),(’like’,’IN’),(’how’,’WRB’),(’writer’,’NN’),(’pro’,’NN’) ,(或),(CC),(短语学,NN),(作品,NNS),(would,MD),(be,VB) ,(’really’,’RB’)

  • 我想在python中使用wordnet lemmatizer,我了解到默认的pos标记是NOUN,并且它不会为动词输出正确的引理,除非pos标记明确指定为动词。 我的问题是什么是最好的镜头,以便准确地执行上述表达? 我使用做了pos标记,我迷失在将树库pos标记集成到wordnet兼容pos标记中。请帮助 我得到了NN、JJ、VB、RB中的输出标签。如何将这些更改为与wordnet兼容的标签? 我

  • 我一直在使用Stanford POS Tagger标记句子中的词性。我从stackoverflow上的留档和其他问题中学到的是,下面的代码给出了句子的POS标记 但我想要的是获得单个单词的POS标签。一种可能的方法是分解输入字符串并逐字逐句地向Tagger提供输入,但它似乎并不优雅,我认为它增加了出错的机会。Javadoc说应用函数可以返回标记单词的数组列表,但我无法成功调用此函数。任何想法,我怎

  • 问题内容: 我想在python中使用wordnet lemmatizer,并且我了解到默认pos标记为NOUN,并且除非为pos标记明确指定为VERB,否则它不会为动词输出正确的引理。 我的问题是,为了准确地进行上述词素化,什么是最好的镜头? 我使用了pos标记,但是迷失了将树库pos标记集成到wordnet兼容pos标记中的信息。请帮忙 我得到了NN,JJ,VB,RB中的输出标签。如何将它们更改

  • 我是新来的,我想要得到一个文本文件的单词列表和单词数。这是我尝试过的代码: 输出:century Cepheus CEQ陶瓷Cerberus谷类小脑错误文件字数:0

  • 问题内容: 假设您有一个像这样的文本文件:http : //www.gutenberg.org/files/17921/17921-8.txt 有没有人有一个好的算法或开放源代码从文本文件中提取单词?如何获得所有单词,同时避免使用特殊字符,并保留诸如“ it’s”之类的内容… 我在用Java工作。谢谢 问题答案: 这听起来像是正则表达式的正确工作。如果您不知道如何开始,以下是一些Java代码,可以