我找不到解决问题的方法,也许有人可以提供帮助。我有一首诗,我能够显示最常见的单词,虽然我希望所有长度小于5个字符的字符串都不显示在我的前20个最常见列表中。
import collections
import re
words = re.findall(r'\w+', open('some_poem.txt').read().lower())
most_common = collections.Counter(words).most_common(20)
print(most_common)
是否有简短而干净的方式来添加此类功能?不显示5个字符或更少的字符串?提前致谢
如果“短于5”表示“长度少于5个字符”,您可以使用{5,}
(五个或更多)而不是+
(一个或多个)来改变正则表达式而不是首先返回这些单词:
words = re.findall(r'\w{5,}', open('some_poem.txt').read().lower())
以下不是你要求的,但取决于你真正想要的,可能更有用的是,获得set
的stop words并过滤那些单词列表中的那些,因为很可能是“相关”单词少数超过五个字母,与不相关的字母有更多。
stop_words = set("a,able,about,across,...,you,your".split(","))
words = re.findall(r'\w+', open('some_poem.txt').read().lower())
words = [word for word in words if word not in stop_words]
另外,正如评论中所述,为了完整性,您应该习惯使用with
打开文件以确保它们之后正确关闭。
with open('some_poem.txt') as f:
words = re.findall(r'\w{5,}', f.read().lower())
Counter
只是一本字典,所以我们可以使用字典理解来过滤我们需要的结果:
{ k: v for k, v in most_common.items() if v > 5 }