首页 > 解决方案 > 将对应的单词打印到单词计数(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]))

标签: pythonnumpy

解决方案


我建议使用 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}

推荐阅读