我的嵌套for循环在计算术语频率时花费了太多时间



我有一个列表"total_vocabulary",其中包含56个文档集合中的所有唯一单词。还有另一个列表,每个文档的单词都是"rest_doc"。我想从"rest_doc"中的"total_vocabulary"中计算每个单词的词频,因此"term_freq"列表将是具有相同大小的total_vocabulary的列表的列表,并且在term_filreq的每个索引处将是大小为56的列表,表示每个单词在每个文档中的总出现次数。问题是嵌套的for循环占用了太多时间,几乎需要一分钟才能运行。有什么办法做得更快吗?代码:

for i in range(len(total_vocabulary)):
doc = []
for j in range(len(rest_doc)):
counter = 0
for k in range(len(rest_doc[j])):
if total_vocabulary[i] == rest_doc[j][k]:
counter = counter + 1
doc.append(counter)
term_freq.append(doc)  

这是我的密码。

您要多次迭代每个文档中的单词——total_vocabulary中的每个单词一次。

如果只对每个文档中的单词进行一次迭代,速度会快得多,并且可以通过重新排列循环并将total_vocabulary设置为集合而不是列表来实现这一点,因为集合查找要快得多。

vocab_set = set(total_vocabulary)
for document in documents:
for word in document:
if word in vocab_set:
counter = counter + 1

最新更新