python中动词词干提取的几个问题

2024-10-16 22:26:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找出动词的词干。我把要删除的后缀放在一个变量中。问题是它只删除列表中的第一个项目,而不删除其余项目的内容,而是返回不带词干的动词。我该如何更改它,使它可以读取列表中的所有项目?在

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'

Tags: 项目内容列表esdef动词suffix后缀
3条回答

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

def stemming(verb):
    suffixes = ["ing", "ed", "es", "s"]
    for suffix in suffixes:
        if verb.endswith(suffix):
            return verb[:-len(suffix)]
    return verb

所以它实际上会检查动词是否以每个后缀结尾,除非找到一个后缀,否则不会返回。在

因为你太早了。Python在一个关闭函数中遇到return;它将立即返回被调用方(调用stemming的函数)。在

将函数stemming更改为:

def stemming (verb):
    suffixs = ["ing", "ed", "es", "s"]
    for suffix in suffixs:
        stem = verb.replace(suffix, "")
    return stem  # XXX: Moving the return outside of the loop

您也不需要在这里增加i;它甚至不是一个整数;您正在遍历一个字符串列表。在suffixesI重命名了一些变量以使其更具可读性)上的每次迭代都将是列表中指定的字符串。在


如果您真的想使用计数器变量来索引suffixes

^{pr2}$

但是;这实际上是不必要的,因为您可以在列表上使用普通的、更具python风格的迭代:for suffix in suffixes:


我也相信你的职能是:

代码:

def stemming(verb):
    suffixs = ["ing", "ed", "es", "s"]
    for suffix in suffixs:
        verb = verb.replace(suffix, "")
    return verb

输出:

>>> stemming("singing")
''

想想看!:)


另外,作为旁白,你真的应该使用nltk来进行词干分析,除非你只是为了教育目的而这样做。在

请参见:^{}

示例:

>>> from nltk.stem.lancaster import LancasterStemmer
>>> st = LancasterStemmer()
>>> st.stem("singing")
'sing'  # NOT an empty string!!!
>>> st.stem("wanting")
'want'
>>> st.stem("wanted")
'want'

将return移出循环并删除i += 1。在这里没用:

def stemming(verb):
    suffix=["ing", "ed", "es", "s"]
    for i in suffix:
        verb=verb.replace(i, "")
    return verb

相关问题 更多 >