【问题标题】:Counting the number of unique words in a document with Python使用 Python 计算文档中唯一单词的数量
【发布时间】:2022-03-23 20:48:52
【问题描述】:

我是 Python 新手,试图理解here 对文档中唯一单词计数问题的回答。答案是:

print len(set(w.lower() for w in open('filename.dat').read().split()))

将整个文件读入内存,使用 空格,将每个单词转换为小写,创建一个(唯一的)集合 从小写单词中,计算它们并打印输出

为了尝试理解这一点,我正在尝试逐步在 Python 中实现它。我可以使用 open and read 导入文本图块,使用 split 将其分成单个单词,并使用 lower 将它们全部小写。我还可以在列表中创建一组独特的单词。但是,我不知道如何做最后一部分 - 计算唯一单词的数量。

我以为我可以通过遍历唯一单词集中的项目并将它们计数到原始小写列表中来完成,但我发现集合构造不可索引。

所以我想我正在尝试用自然语言做一些事情,例如,对于集合中的所有项目,告诉我它们在小写列表中出现了多少次。但我无法完全弄清楚如何做到这一点,而且我怀疑对 Python 的一些潜在误解阻碍了我。

  • 编辑 -

大家感谢您的回答。我刚刚意识到我没有正确解释自己 - 我不仅想找到唯一单词的总数(我理解的是集合的长度),而且还想找到每个单词被使用的次数,例如“the”用了 14 次,“and”用了 9 次,“it”用了 20 次,以此类推。对造成的混乱表示歉意。

【问题讨论】:

  • 你为什么不使用字典来从单词映射到计数?
  • 不需要遍历集合来计算唯一词的数量。这就是 len 函数的作用 - 它为您提供集合的长度。
  • unique_word_count = len(your_set) 有什么问题?
  • S. Lott - 我认为你的建议就是我的实际意思,请参阅上面问题中的编辑。

标签: python


【解决方案1】:

我相信 Counter 在这种情况下是您所需要的:

from collections import Counter

print Counter(yourtext.split())

【讨论】:

    【解决方案2】:

    您可以使用len(my_set)len(my_list) 计算集合、列表或元组中的项目数。

    编辑:计算一个单词的使用次数是不同的。
    这是显而易见的方法:

    count = {}
    for w in open('filename.dat').read().split():
        if w in count:
            count[w] += 1
        else:
            count[w] = 1
    for word, times in count.items():
        print "%s was found %d times" % (word, times)
    

    如果你想避免 if 子句,你可以查看collections.defaultdict

    【讨论】:

    • 这难道不会将出现在句末和句中的同一个词算作两个不同的唯一词吗?这不是您想要的行为。例如。 “交通”和“交通”。将被视为单独的唯一词。
    • @geo mind 当然,这是一种有点幼稚的方法。但问题的主题是关于数词。您可能会花费额外的精力来确保您数对了正确的单词。顺便提一句。今天我认为 Artioms 的答案(使用 collections.Counter)要好得多。
    【解决方案3】:

    根据定义,set 包含独特的元素(在您的情况下,您找不到相同的 '小写字符串' 两次)。所以,你要做的就是简单地获取集合中元素的数量=集合的长度=len(set(...))

    【讨论】:

      【解决方案4】:

      您的问题已经包含答案。如果s 是文档中唯一词的集合,那么len(s) 给出集合中元素的数量,即文档中唯一词的数量

      【讨论】:

        【解决方案5】:

        你可以使用计数器

        from collections import Counter
        c = Counter(['mama','papa','mama'])
        

        c 的结果是

        Counter({'mama': 2, 'papa': 1})
        

        【讨论】:

        • 这是@ArtsiomRudzenka 2011 年回答的重复,唯一的区别是这里显示的结果,必须是编辑或评论,而不是答案。 (我知道你不能做到
        【解决方案6】:

        最简单的方法:

        len(set(open(file_path).read().lower().split()))
        

        【讨论】:

          【解决方案7】:

          我想这可以用来获得唯一的字数。适用于 python 3.10.2

          from collections import Counter
          
          def get_count_of_unique_words(lines):
              selected_words = []
              for word in lines:
                  if word.isalpha():
                     selected_words.append(word)
          
              unique_count = 0
              for letter, count in Counter(selected_words).items():
                  if count == 1:
                      unique_count += 1
          
              print(unique_count)
              return unique_count
          

          文档https://docs.python.org/3/library/collections.html#collections.Counter

          【讨论】:

            【解决方案8】:

            我会说该代码计算 distinct 单词的数量,而不是 unique 单词的数量,即只出现一次的单词的数量。

            这会计算每个单词出现的次数:

            from collections import defaultdict
            
            word_counts = defaultdict(int)
            
            for w in open('filename.dat').read().split():
                word_counts[w.lower()] += 1
            
            for w, c in word_counts.iteritems():
                print w, "occurs", word_counts[w], "times"
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-06-02
              • 1970-01-01
              • 2012-08-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多