【问题标题】:Counting number of document in which each term appears计算每个术语出现的文档数
【发布时间】:2018-04-11 12:26:44
【问题描述】:

我有一个存储在树中每个节点的 5 个文档的文档列表。在每个列表中,都会出现许多单词,这些单词可能在同一个文档以及其他文档中重复多次。我想计算每个单词出现的文档数量。 例如:A 是父节点,B,C 是子节点。 A,B,C 有 5 个文档。

A=[['a','b'],['a','a'],['c','d'],['a','c'],['d','e']]

我想要{'a':3,'b':1,'c':2,'d':2,'e':1}形式的结果

下面是我正在使用的代码,但它没有计算每个文档,而是计算每个单词在文档中出现的次数。

def get_count(node):
    word_count_dict = defaultdict(int)
    next_node=[]
    for i in range(len(node.documents)):
        for words in node.documents[i]:
            word_count_dict[words] +=1
        node.word_count = word_count_dict
    for child in node.children:
        next_node.append(child)
    if next_node:
        for nn in next_node:
            get_count(nn)
    return word_count_dict

get_count(A)

请帮助如何做到这一点。

【问题讨论】:

    标签: python pandas binary-search-tree tf-idf


    【解决方案1】:

    您对孩子调用get_count,但不要分配结果或对它做任何事情

    据我了解,您真正需要的是setCounter

    假设 node.documentsnode.children 是可迭代的(它们应该是)这可以工作

    from collections import Counter
    from itertools import chain
    
    def get_count(node):
    
        words_per_document = map(set, node.documents)
        word_count = Counter(chain.from_iterable(words_per_document))
        for child in node.children:
            word_count += get_count(child)
    
        return word_count
    

    我认为没有理由设置队列

    【讨论】:

      【解决方案2】:

      使用内置软件包。但是应该有一个简单的方法。

      from itertools import chain
      from collections import Counter
      dict(Counter(chain.from_iterable(set(l) for l in A)))
      #{'a': 3, 'b': 1, 'c': 2, 'd': 2, 'e': 1}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-15
        • 2014-08-30
        • 2015-03-16
        相关资源
        最近更新 更多