正则词干提取代码解释
有人能解释一下这段代码是干什么的吗?
def stemmer(word):
[(stem,end)] = re.findall('^(.*ss|.*?)(s)?$',word)
return stem
1 个回答
4
这个过程是把一个单词分成两个部分:stem
(词根)和 end
(词尾)。有三种情况:
- 如果单词以
ss
(或者更多的s
)结尾:那么stem
就是整个单词,end
就是空字符串("")。 - 如果单词以一个
s
结尾:那么stem
是去掉这个s
的单词,end
就是这个s
。 - 如果单词不以
s
结尾:那么stem
还是整个单词,end
也是空字符串("")。
这个过程是通过一种叫做正则表达式的工具来实现的,它可以捕捉到整个单词(因为有 ^....$
的限制)。第一部分(也就是 stem
)要么尽可能多地包含以 ss
结尾的部分(.*ss
),要么如果不行的话,就尽可能少(.*?
)。然后,如果有的话,最后的 s
就被当作 end
部分。
需要注意的是,在第一种情况下(尽可能多地以 ss
结尾),end
部分是不会再有额外的 s
的。