文本中最常见的单词,不包括具有一定长度的单词

问题描述 投票:0回答:2

我找不到解决问题的方法,也许有人可以提供帮助。我有一首诗,我能够显示最常见的单词,虽然我希望所有长度小于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个字符或更少的字符串?提前致谢

python word-count
2个回答
1
投票

如果“短于5”表示“长度少于5个字符”,您可以使用{5,}(五个或更多)而不是+(一个或多个)来改变正则表达式而不是首先返回这些单词:

words = re.findall(r'\w{5,}', open('some_poem.txt').read().lower())

以下不是你要求的,但取决于你真正想要的,可能更有用的是,获得setstop 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())

2
投票

Counter只是一本字典,所以我们可以使用字典理解来过滤我们需要的结果:

{ k: v for k, v in most_common.items() if v > 5 }
© www.soinside.com 2019 - 2024. All rights reserved.