将相应的单词打印到单词计数(单词袋)

时间:2019-07-28 18:36:56

标签: python numpy

我的代码为我正在处理基于矢量的单词袋的每个文档创建。

它可以工作并打印文档中每个单词的出现频率。另外,我想在数字正前方打印每个单词,就像这样:

['word', 15]

我自己尝试过。我现在得到的是这样的: enter image description here

这是我的代码:

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]))

1 个答案:

答案 0 :(得分:2)

我建议使用dict存储每个单词的出现频率。

已经有内置的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)

如果word中已经存在freq,则此代码通过在freq.get(word, 0)的频率上加1来起作用,否则0返回1,因此新代码的频率单词将存储为{'lacteal': 1, 'brominating': 2, 'postmycotic': 2, 'legazpi': 2, 'enclosing': 2, 'arytaenoid': 1}

输出:

adj = new vector<int*> (4);