如何将一个庞大的语料库随机分成3个?

时间:2013-05-21 11:28:19

标签: gate

我有一个包含注释的数千个文档的语料库(在JSerial数据存储中保存)。现在我需要将它分成3个较小的,随机挑选。 GATE中最简单的方法是什么?

最受欢迎的是一条运行代码或详细指南!

1 个答案:

答案 0 :(得分:1)

我会使用Groovy控制台(加载“Groovy”插件,然后从“工具”菜单启动控制台)。

以下代码假设

  • 您已在GATE开发人员
  • 中打开数据存储区
  • 您已加载源语料库,其名称为“fullCorpus”
  • 您创建了三个(或者您需要的多个)其他空语料库并将它们(空)保存到同一个数据存储区。这些将收到分区
  • 除了这四个
  • 之外,你在GATE开发者中没有其他语料库
  • 您没有打开文件

然后,您可以在Groovy控制台中运行以下命令:

def rnd = new Random()

def fullCorpus = corpora.find { it.name == 'fullCorpus' }
def parts = corpora.findAll {it.name != 'fullCorpus' }

fullCorpus.each { doc ->
  def targetCorpus = parts[rnd.nextInt(parts.size())]
  targetCorpus.add(doc)
  targetCorpus.unloadDocument(doc)
}

return null

这种方法的工作方式是迭代文档并随机选择要添加到的每个文档的语料库。目标子语料库应该大致(但不一定完全)大小相同。

脚本不会保存最终的子语料库,所以如果它搞砸了你可以关闭它们然后从原始数据存储区重新打开它们(空),修复并重新运行脚本。一旦您对最终结果感到满意,请在左侧树中依次单击每个子语料库并“保存到其数据存储区”将其全部写入磁盘。