计算每个术语出现的文档数

时间:2018-04-11 12:26:45

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

我有一个存储在树中每个节点的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)

请帮助如何做到这一点。

2 个答案:

答案 0 :(得分:1)

内置包。但应该有一个简单的方法。

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}

答案 1 :(得分: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

我认为没有理由设置队列

相关问题