首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用NLP库将动词从现在时转换为过去式?

如何使用NLP库将动词从现在时转换为过去式?
EN

Stack Overflow用户
提问于 2020-07-17 01:02:51
回答 2查看 3.2K关注 0票数 3

我想做什么

我想用NLP库把动词从现在时态转换成过去式,如下所示。

代码语言:javascript
运行
复制
As she leaves the kitchen, his voice follows her.

#output
As she left the kitchen, his voice followed her.

问题

从现在时到过去式是没有办法的。

我检查过以下类似的问题,但他们只介绍了从过去时到现在时态的转换方式。

我想做的事

我能够用spaCy把动词从过去时转换成现在时态。然而,从现在时到过去式,并没有提示去做同样的事情。

代码语言:javascript
运行
复制
text = "As she left the kitchen, his voice followed her."
doc_dep = nlp(text)
for i in range(len(doc_dep)):
    token = doc_dep[i]
    #print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_) 
    if token.pos_== 'VERB':
        print(token.text)
        print(token.lemma_)
        text = text.replace(token.text, token.lemma_)
print(text)

#output
'As she leave the kitchen, his voice follow her.'

发展环境

Python 3.7.0

spaCy版本2.3.1

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-27 00:06:45

据我所知,Spacy没有用于这种转换的内置函数,但是您可以在映射当前/过去时态对时使用扩展,对于弱动词的过去分词没有适当的“ed”后缀,如下所示:

代码语言:javascript
运行
复制
verb_map = {'leave': 'left'}

def make_past(token):
    return verb_map.get(token.text, token.lemma_ + 'ed')

spacy.tokens.Token.set_extension('make_past', getter=make_past, force=True)

text = "As she leave the kitchen, his voice follows her."
doc_dep = nlp(text)
for i in range(len(doc_dep)):
    token = doc_dep[i]
    if token.tag_ in ['VBP', 'VBZ']:
        print(token.text, token.lemma_, token.pos_, token.tag_) 
        text = text.replace(token.text, token._.make_past)
print(text)

输出:

代码语言:javascript
运行
复制
leave leave VERB VBP
follows follow VERB VBZ
As she left the kitchen, his voice followed her.
票数 2
EN

Stack Overflow用户

发布于 2021-04-28 13:38:01

我今天遇到了同样的问题。我怎样才能把动词改成“过去式”。我找到了上述解决方案的替代方案。有一个pyinflect包,它解决了这些问题,并且是为spacy创建的。它只需要安装pip install pyinflect并导入。不需要添加扩展。

代码语言:javascript
运行
复制
import spacy
import pyinflect

nlp = spacy.load("en_core_web_sm")

text = "As she leave the kitchen, his voice follows her."
doc_dep = nlp(text)
for i in range(len(doc_dep)):
    token = doc_dep[i]
    if token.tag_ in ['VBP', 'VBZ']:
        print(token.text, token.lemma_, token.pos_, token.tag_) 
        text = text.replace(token.text, token._.inflect("VBD"))
print(text)

产出:As she left the kitchen, his voice followed her.

注意:我用的是spacy 3

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62945590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档