当达到 2000000 个标记时,有没有办法在 gensim.WikiCorpus 中停止创建词汇表?

is there a way to stop creation of vocabulary in gensim.WikiCorpus when reach 2000000 tokens?

我下载了最新的 wiki dump multi-stream bz2。我从 gensim 语料库调用 WikiCorpus class,在 90000 个文档之后,词汇量达到最高值(2000000 个标记)。 我在终端中得到了这个:

在不少于 0 且不超过 580000 (=100.0%) 个文档中保留 2000000 个标记 结果字典:字典(2000000 个唯一标记:['ability'、'able'、'abolish'、'abolition'、'about']...) 将文档 #580000 添加到字典(2000000 个唯一标记:['ability'、'able'、'abolish'、'abolition'、'about']...)

WikiCorpus class 继续工作,直到我的 bz2 中的文档结束。 有办法阻止它吗?或者将 bz2 文件拆分为样本? 感谢您的帮助!

没有具体的参数来限制令牌的数量。但是当你使用 WikiCorpus.get_texts() 时,你不必全部阅读它们:你可以随时停止。

如果按照你的另一个问题的建议,你打算使用 Gensim Word2Vec(或类似模型)的文章文本,你不需要构造函数来做它自己昂贵的完整-扫描词汇发现。如果您提供任何虚拟对象(例如空 dict)作为可选的 dictionary 参数,它将跳过这个不必要的步骤。例如:

wiki_corpus = WikiCorpus(filename, dictionary={})

如果您还想使用整套文章的一些截断版本,我建议您手动迭代文章的一部分。例如,如果子集很容易作为 list 放入 RAM 中,比如 50000 篇文章,那就很简单:

import itertools
subset_corpus = list(itertools.islice(wiki_corpus, 50000))

如果你想创建一个大于 RAM 的子集,迭代设置数量的文章,将它们的标记化文本写入临时文本文件,每行一个。然后将该文件用作您以后的输入。 (通过只花费 WikiCorpus extraction/tokenization 一次努力,然后重新使用磁盘中的文件,即使您不需要这样做,有时也可以提高性能。)