我有一个列表“ total_vocabulary”,其中包含56个文档集合中的所有唯一单词。还有每个文档“ rest_doc”的单词列表。我想从“ rest_doc”中的“ total_vocabulary”中计算每个单词的词频,因此“ term_freq”列表将是total_vocabulary大小相同的列表的列表,而term_freq的每个索引将是表示出现的大小的列表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
中的每个单词一次。
如果仅对once遍历每个文档中的单词,将会更快,您可以通过重新排列循环并将total_vocabulary
设置为set而不是 list,因为设置查找要快得多。
vocab_set = set(total_vocabulary)
for document in documents:
for word in document:
if word in vocab_set:
counter = counter + 1