我的代码为我正在处理基于矢量的单词袋的每个文档创建。
它可以工作并打印文档中每个单词的出现频率。另外,我想在数字正前方打印每个单词,就像这样:
['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]))
答案 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);