文本中出现频率最高的词,不包括特定长度的词
Most frequent words from text excluding words that are of certain length
我遇到了问题,找不到解决方案,也许有人可以提供帮助。我有一首诗,我能够显示最常见的单词,尽管我希望所有长度少于 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 个或更少字符的字符串?提前致谢
一个Counter
只是一个字典,所以我们可以使用dict comprehension来过滤我们需要的结果:
{ k: v for k, v in most_common.items() if v > 5 }
如果 "shorter than 5" 你的意思是 "less than 5 characters long" 你可以改变你的正则表达式而不是首先 return 这些词,使用 {5,}
(五个或更多)而不是 +
(一个或多个):
words = re.findall(r'\w{5,}', open('some_poem.txt').read().lower())
以下是不是你要求的,但取决于你真正想要什么,它可能更有用,得到一个set
of [=17] =] 并从单词列表中过滤掉这些单词,因为很可能 "relevant" 个单词少于五个字母,而不相关的单词则更多。
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())
我遇到了问题,找不到解决方案,也许有人可以提供帮助。我有一首诗,我能够显示最常见的单词,尽管我希望所有长度少于 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 个或更少字符的字符串?提前致谢
一个Counter
只是一个字典,所以我们可以使用dict comprehension来过滤我们需要的结果:
{ k: v for k, v in most_common.items() if v > 5 }
如果 "shorter than 5" 你的意思是 "less than 5 characters long" 你可以改变你的正则表达式而不是首先 return 这些词,使用 {5,}
(五个或更多)而不是 +
(一个或多个):
words = re.findall(r'\w{5,}', open('some_poem.txt').read().lower())
以下是不是你要求的,但取决于你真正想要什么,它可能更有用,得到一个set
of [=17] =] 并从单词列表中过滤掉这些单词,因为很可能 "relevant" 个单词少于五个字母,而不相关的单词则更多。
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())