首页 > 解决方案 > 计算每个单词出现的行数

问题描述

我有一个训练数据集,它是一个 numpy 数组,形状为 (4800,1)。它有一列字符串,每一行对应于来自不同电子邮件的文本。

我想创建一个字典来计算每个单词在使用 python 时出现的电子邮件数(或行数)。并且最终只选择出现在至少 10 封电子邮件中的单词。我只能弄清楚如何计算单词在整个数据集中出现的频率,而不是在多少行/电子邮件中。以下代码是我到目前为止所拥有的

这是数组的外观以及应该输出的示例。

 [['red blue green green']
 ['red blue blue'] 
 ['red red red']]

输出:

{'red': 3, 'blue': '2', 'green': '1'}
def vocab_dict(file):
    d = dict() 
    for row in xTrain:
        words = row.split(" ") 
        for word in words: 
            if word in d: 
                d[word] = d[word] + 1
            else: 
                d[word] = 1
    d = dict((k, v) for k, v in d.items() if v >= 10)
    return d

我被困在如何修改上面的代码,该代码计算一个单词在整个数据集中出现的次数到一个单词在每行(每封电子邮件)中出现的次数。

标签: pythonalgorithm

解决方案


假设我们有一个字符串列表l。然后我们可以这样做:

from collections import Counter

word_lists = [text.split(" ") for text in l] # split into words
word_sets = [set(word_list) for word_list in word_lists] # make sets, discard duplicates

c = Counter()
for word_set in word_sets:
    c.update(word_set)
print(c)

c现在将为每个单词包含该单词所在的电子邮件数量。


推荐阅读