当达到 2000000 个令牌时,有没有办法停止在 gensim.WikiCorpus 中创建词汇?
Posted
技术标签:
【中文标题】当达到 2000000 个令牌时,有没有办法停止在 gensim.WikiCorpus 中创建词汇?【英文标题】:is there a way to stop creation of vocabulary in gensim.WikiCorpus when reach 2000000 tokens? 【发布时间】:2021-12-13 14:12:08 【问题描述】:我下载了最新的 wiki 转储多流 bz2。我从 gensim 语料库中调用 WikiCorpus 类,在 90000 个文档之后,词汇量达到最高值(2000000 个标记)。 我在终端得到了这个:
保留 2000000 个令牌,这些令牌在不少于 0 且不超过 580000 (=100.0%) 个文档中 结果字典:字典(2000000 个唯一标记:['ability', 'able', 'abolish', 'abolition', 'about']...) 将文档 #580000 添加到 Dictionary(2000000 个唯一标记:['ability', 'able', 'abolish', 'abolition', 'about']...)
WikiCorpus 类继续工作,直到我的 bz2 中的文档结束。 有没有办法阻止它?或将 bz2 文件拆分为示例? 感谢您的帮助!
【问题讨论】:
【参考方案1】:没有限制令牌数量的特定参数。但是当您使用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
提取/标记化工作,然后重用磁盘中的文件,即使您不需要这样做,有时也可以提高性能。)
【讨论】:
以上是关于当达到 2000000 个令牌时,有没有办法停止在 gensim.WikiCorpus 中创建词汇?的主要内容,如果未能解决你的问题,请参考以下文章