python - 将对应的单词打印到单词计数(Bag-of-Words)
问题描述
我的代码为我正在处理基于向量的词袋的每个文档创建。
它可以工作并打印文档中每个单词的频率。另外,我想在数字前面打印每个单词,就像这样:
['word', 15]
这是我的代码:
for doc in docsClean:
bag_vector = np.zeros(len(doc))
for w in doc:
for i,word in enumerate(doc):
if word == w:
bag_vector[i] += 1
print(bag_vector)
print("{0},{1}\n".format(w,bag_vector[i]))
解决方案
我建议使用 adict
来存储每个单词的频率。
已经有一个内置的 python 功能可以做到这一点 - collections.Counter
.
from collections import Counter
# Random words
words = ['lacteal', 'brominating', 'postmycotic', 'legazpi', 'enclosing', 'arytaenoid', 'brominating', 'postmycotic', 'legazpi', 'enclosing']
frequency = Counter(words)
print(frequency)
输出:
Counter({'brominating': 2, 'postmycotic': 2, 'legazpi': 2, 'enclosing': 2, 'lacteal': 1, 'arytaenoid': 1})
如果出于任何原因不想使用 collections.Counter,这里有一个简单的代码来完成相同的任务。
words = ['lacteal', 'brominating', 'postmycotic', 'legazpi', 'enclosing', 'arytaenoid', 'brominating', 'postmycotic', 'legazpi', 'enclosing']
freq = {} # Empty dict
for word in words:
freq[word] = freq.get(word, 0) + 1
print(freq)
此代码通过将 的频率加 1 来工作word
,如果它已经存在于 中freq
,否则freq.get(word, 0)
返回0
,因此新单词的频率被存储为1
。
输出:
{'lacteal': 1, 'brominating': 2, 'postmycotic': 2, 'legazpi': 2, 'enclosing': 2, 'arytaenoid': 1}
推荐阅读
- linux - 从 Linux 管道读取图像路径时,ffmpeg 说“在图像中找不到 JPEG 数据”
- bootstrap-4 - 不知道为什么我的可折叠导航栏不起作用
- python - youtube_dL 模块中是否有“输出”选项?
- css - 在 Chrome Element 检查器中,带有对角紫色虚线的蓝色字段表示什么?
- c# - 如何反序列化 TcpClient 对 json 的响应
- mysql - Mysql 触发错误:SQLSTATE[42000]:语法错误或访问冲突:1231 变量 'MESSAGE_TEXT' 不能设置为 'NULL' 的值
- string - 如何编写自己的函数来匹配字符串模式?
- javascript - 如何解决我遇到的 npm 安装问题
- tensorflow - TF 代理:如何在 ActorDistributionNetwork 的层中使用批量标准化
- wordpress - 如何在 wordpress 中翻译自定义分类法