文本中最常用的词,不包括一定长度的词

2024-04-26 20:56:39 发布

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

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


Tags: 字符串importremost列表somecommonopen
2条回答

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

{ k: v for k, v in most_common.items() if v > 5 }

如果“短于5”的意思是“少于5个字符长”,您可以将regex更改为不首先返回这些单词,使用{5,}(五个或更多)而不是+(一个或多个):

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

下面的不是你想要的,而是取决于你真正想要的,它可能更有用,得到一个^{cd3>}的stop words并从单词列表中筛选出来,因为很可能有少于5个字母的“相关”单词,而有更多字母的不相关单词。你知道吗

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())

相关问题 更多 >