【问题标题】:Count number of occurrences of words in list of list [duplicate]计算列表列表中单词的出现次数[重复]
【发布时间】:2021-02-05 15:28:17
【问题描述】:

我有一个大约 5000 个不同单词和 5000 行的数据集:

2 行示例

data = [["I", "am", "John"], ["Where", "is", "John","?"]]

而我想做的是计算每个单词有多少个不同的单词。

result = {"I": 1, "am": 1, "John": 2, "Where":1, ...}

但不知道如何有效地做到这一点

有什么建议吗?

【问题讨论】:

    标签: python nltk


    【解决方案1】:

    您可以这样使用列表推导

    from collections import Counter
    Counter([word for sentence in data for word in sentence])
    # or even
    Counter(word for sentence in data for word in sentence)
    # so you don't create the list containing every word
    

    【讨论】:

      【解决方案2】:

      我会给你一个高级算法。如果您需要实际代码,请告诉我。

      1. 创建一个名为 counts 的字典。
      2. 迭代data
      3. 对于data 中的每个元素,遍历每个字符串。
      4. 对于每个字符串,检查该单词是否在counts 中。如果是,则增加计数。否则,设置counts[word]=1
      5. 最后,counts 将拥有您要查找的内容。

      这需要O(n) 时间,因为您只访问每个单词一次,因此这是您执行此任务的最高效。

      【讨论】:

        【解决方案3】:

        好消息是python标准库中有很多方便的工具。

        import itertools
        from collections import Counter
        
        data = [["I", "am", "John"], ["Where", "is", "John", "?"]]
        result = Counter(itertools.chain(*data))
        # result: Counter({'John': 2, 'I': 1, 'am': 1, 'Where': 1, 'is': 1, '?': 1})
        

        星号(*data)是一种将可迭代项解包为参数形式的语法,对我不好用文字解释。让我们看看例子:

        data = [1, 2, 3, 4, 5];
        print(*data)
        print(data[0], data[1], data[2], data[3], data[4])
        

        第 2 行和第 3 行是等价的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-07-16
          • 2021-10-15
          • 1970-01-01
          • 2013-12-25
          • 2019-06-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多