我有一个名为bi_grams的列表,我想要每个二元语法的频率。bi_grams的长度是23087,所以我可能需要一个循环(?)
bi_grams= [[('ABC', 'Memorial'), ('Memorial', 'Hospital')], [('ABC', 'Memorial'), ('Memorial', 'Clinic')]]预期输出
dict_items([(('ABC', 'Memorial'), 2), 
(('Memorial', 'Hospital'), 1), (('Memorial', 'Clinic'),1])我尝试过Counter(map(tuple, bi_grams[0])).items(),但它只给出了第一个列表中的二元语法频率。
我也尝试过Counter(map(tuple, bi_grams[0:2])).items(),但它只给了我每个列表的计数,而不是列表中的二元语法。
会非常感谢你的帮助。
发布于 2018-10-28 23:01:53
你也可以使用chain(*iterable)的习惯用法:
>>> from itertools import chain                                                    >>> from collections import Counter
>>> Counter(chain(*bi_grams))
Counter({('ABC', 'Memorial'): 2, ('Memorial', 'Hospital'): 1, ('Memorial', 'Clinic'): 1})使用chain(*iterable)将元组列表展平为内部列表,例如
>>> x = [[(1,2), (3,4)], [(5,6)], [(7,8)]]
>>> list(chain(*x))
[(1, 2), (3, 4), (5, 6), (7, 8)]Counter简单地计算扁平化列表中的内容:
>>> x = [[(1,2), (3,4)], [(5,6)], [(7,8)]]
>>> Counter(chain(*x))
Counter({(1, 2): 1, (3, 4): 1, (5, 6): 1, (7, 8): 1})https://stackoverflow.com/questions/53015104
复制相似问题