我注意到在向gensim Dictionary添加文档时,执行时间从达到200万字时会从0.2秒跳到6秒以上。
下面的代码是一个简单的例子。我遍历int并在每次迭代时将数字添加到字典中。
from gensim import corpora
import time
dict_transcript = corpora.Dictionary()
for i in range(1,10000000):
start_time = time.time()
doc = [str(i)]
dict_transcript.add_documents([doc])
print("Iter "+str(i)+" done in " + str(time.time() - start_time) + ' w/ '+str(len(doc)) + ' words and dico size ' +
str(len(dict_transcript)))
当达到200万字时我得到以下输出:
Iter 1999999 done in 0.0 w/ 1 words and dico size 1999999
Iter 2000000 done in 0.0 w/ 1 words and dico size 2000000
Iter 2000001 done in 0.0 w/ 1 words and dico size 2000001
Iter 2000002 done in 7.940511226654053 w/ 1 words and dico size 2000001
有什么理由吗?有谁知道如何绕过这个问题? 我在一个大型语料库上使用这个字典,我将其标记为双字母组合,因此我希望字典可以是几百万行。
非常感谢
答案 0 :(得分:4)
class
gensim.corpora.dictionary.Dictionary(documents=None, prune_at=2000000)
prune_at (int,optional) - 唯一字的总数。字典将保留不超过prune_at字。
为您的用例设置prune_at=None
或适当的整数。