python - 计算每个单词出现的行数
问题描述
我有一个训练数据集,它是一个 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
我被困在如何修改上面的代码,该代码计算一个单词在整个数据集中出现的次数到一个单词在每行(每封电子邮件)中出现的次数。
解决方案
假设我们有一个字符串列表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
现在将为每个单词包含该单词所在的电子邮件数量。
推荐阅读
- java - Mongodb $lookup 如何将带有 $id 的字段加入到 $id.toString
- python - 带有 python 的 Google Pubsub 模拟器
- c# - C# MVC/API - 从 Amazon S3 为我的 API 调用返回图像
- node.js - 当某些东西不存在时(即使在空数据库上),MongoDB find 总是返回 true
- angular - 收到错误:“类型'ArrayBuffer'上不存在属性'用户'。在Angular中
- c# - C# - 以编程方式更改 Web 应用程序中的 web.config 文件
- json - 如何控制 Couchbase N1QL 响应中的字段顺序?
- angular - 需要抛出的Angular 5无法读取null的属性'appendChild'
- sql - Powershell 中的 SQL BCP 挂起
- excel - excel时间公式并将其转换为时间