首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中动词词干的几个问题

python中动词词干的几个问题
EN

Stack Overflow用户
提问于 2015-06-18 12:22:55
回答 4查看 651关注 0票数 2

我想找到动词的词干。我将要删除的后缀放入变量中。问题是,它只是删除列表中的第一项,而不对其余的项进行删除,并且不返回动词而不带词干。我应该如何更改它才能读取列表中的所有项目?

代码语言:javascript
复制
def stemming (verb):
    suffix=["ing", "ed", "es", "s"]
    for i in suffix:
        stem=verb.replace(i, "")
        return stem
        i+=1

>>> stemming ("wanting")
'want'
>>> stemming ("wanted")
'wanted'
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-06-18 12:28:11

一旦函数返回,它就完成了。它不会继续循环,替换更多的东西。我认为你真正想要的是这样的东西:

代码语言:javascript
复制
def stemming(verb):
    suffixes = ["ing", "ed", "es", "s"]
    for suffix in suffixes:
        if verb.endswith(suffix):
            return verb[:-len(suffix)]
    return verb

因此,它实际上检查动词是否以每个后缀结尾,并且除非找到一个这样的后缀,否则不会返回。

票数 2
EN

Stack Overflow用户

发布于 2015-06-18 12:27:12

移出循环并移除i += 1。它在这里是无用的:

代码语言:javascript
复制
def stemming(verb):
    suffix=["ing", "ed", "es", "s"]
    for i in suffix:
        verb=verb.replace(i, "")
    return verb
票数 3
EN

Stack Overflow用户

发布于 2015-06-18 12:28:24

将返回语句放入循环中,就会产生错误的行为。我想你的意思是:

代码语言:javascript
复制
def stemming (verb):
    suffix=["ing", "ed", "es", "s"]
    stem = verb
    for i in suffix:
        stem=stem.replace(i, "")
    return stem

我还删除了i++,它实际上是无用的。当然,另一件事是,您必须始终在相同的变量上操作,以捕获所有的更改(无论是词干还是动词--为了更清晰起见,我使用了stem,但您也可以使用谓词,去掉赋值)。

正如一位评论员所指出的,您的算法在某些动词上会产生一些奇怪的行为。

,我建议这样做:

代码语言:javascript
复制
def stemming (verb):
    suffixes = ["ing", "ed", "es", "s"]
    stem = verb
    for suffix in suffixes:
        if stem.endswith(suffix):
            stem = stem[:-len(suffix)]
            break
    return stem

有了这个变化,只应该删除一个后缀(因为中断),而且移除也只会发生在动词的末尾。

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

https://stackoverflow.com/questions/30915247

复制
相关文章

相似问题

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