我想找到动词的词干。我将要删除的后缀放入变量中。问题是,它只是删除列表中的第一项,而不对其余的项进行删除,并且不返回动词而不带词干。我应该如何更改它才能读取列表中的所有项目?
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'发布于 2015-06-18 12:28:11
一旦函数返回,它就完成了。它不会继续循环,替换更多的东西。我认为你真正想要的是这样的东西:
def stemming(verb):
suffixes = ["ing", "ed", "es", "s"]
for suffix in suffixes:
if verb.endswith(suffix):
return verb[:-len(suffix)]
return verb因此,它实际上检查动词是否以每个后缀结尾,并且除非找到一个这样的后缀,否则不会返回。
发布于 2015-06-18 12:27:12
移出循环并移除i += 1。它在这里是无用的:
def stemming(verb):
suffix=["ing", "ed", "es", "s"]
for i in suffix:
verb=verb.replace(i, "")
return verb发布于 2015-06-18 12:28:24
将返回语句放入循环中,就会产生错误的行为。我想你的意思是:
def stemming (verb):
suffix=["ing", "ed", "es", "s"]
stem = verb
for i in suffix:
stem=stem.replace(i, "")
return stem我还删除了i++,它实际上是无用的。当然,另一件事是,您必须始终在相同的变量上操作,以捕获所有的更改(无论是词干还是动词--为了更清晰起见,我使用了stem,但您也可以使用谓词,去掉赋值)。
正如一位评论员所指出的,您的算法在某些动词上会产生一些奇怪的行为。
,我建议这样做:
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有了这个变化,只应该删除一个后缀(因为中断),而且移除也只会发生在动词的末尾。
https://stackoverflow.com/questions/30915247
复制相似问题