【问题标题】:Most frequent words from text excluding words that are of certain length文本中最常见的单词,不包括特定长度的单词
【发布时间】:2019-02-28 05:29:20
【问题描述】:

我很难找到解决问题的方法,也许有人可以提供帮助。我有一首诗,我能够显示最常见的单词,尽管我希望所有长度小于 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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如果“短于 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]
      

      另外,为了完整起见,如 cmets 中所述,您应该养成使用 with 打开文件的习惯,以确保它们在之后正确关闭。

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

      【讨论】:

      • 太棒了!真的很简单而且超级有效。非常感谢。真的很欣赏。关于停用词,我正在写的这首诗是外语的。在给定的语言中,只删除长度小于 5 个字符的单词更容易,我把这个问题的措辞弄错了。我的错。
      • 当您将open(file) 传递给函数时,打开和关闭是否安全处理,句柄是否关闭?还是它只是超出范围并消失了?当考虑到人们对使用 with open 的重视程度时,就设计而言,这对我来说似乎有点违反直觉
      • 我刚刚看到它在一些地方使用过,真的很好奇
      猜你喜欢
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多