从本地目录中读取完整的penn treebank数据集

时间:2016-11-23 18:16:09

标签: python nltk penn-treebank

我有一个完整的penn树库数据集,我希望使用ptb中的ntlk.corpus来阅读它。但在here中有人说:

  

如果您可以访问Penn Treebank,NLTK的完整安装   可以配置为加载它。下载ptb包,然后在   目录nltk_data / corpora / ptb放置BROWN和WSJ   Treebank安装目录(符号链接也可以)。然后   使用ptb模块而不是treebank:

但我想将数据集保存在本地目录中,然后从那里加载而不是从nltk_data/corpora/ptb加载。 ptb总是在该目录中搜索但是我如何提供ptb的路径以便它在给定目录中搜​​索?有什么方法可以做到吗?我已经在网上彻底搜索并尝试了几种方法,但没有办法为我工作!

1 个答案:

答案 0 :(得分:1)

您可以将语料库文件保存在本地目录中,只需将nltk_data/corpora文件夹中的符号链接添加到语料库的位置,如您引用的段落所示。但是,如果您无法修改nltk_data或者只是不喜欢通过nltk_data目录进行不必要的往返旅行,请继续阅读。

对象ptb只是使用Penn Treebank语料库的适当设置初始化的语料库阅读器对象的快捷方式。它是这样定义的(nltk/corpus/__init__.py):

ptb = LazyCorpusLoader( # Penn Treebank v3: WSJ and Brown portions
    'ptb', CategorizedBracketParseCorpusReader, r'(WSJ/\d\d/WSJ_\d\d|BROWN/C[A-Z]/C[A-Z])\d\d.MRG',
    cat_file='allcats.txt', tagset='wsj')

您可以忽略LazyCorpusLoader部分;之所以使用它,是因为nltk定义了很多语料库端点,其中大部分都不会在任何一个python程序中加载。相反,通过直接实例化CategorizedBracketParseCorpusReader来创建语料库阅读器。如果您的语料库看起来与ptb语料库完全相同,则您可以这样称呼它:

from nltk.corpus.reader import CategorizedBracketParseCorpusReader
myreader = CategorizedBracketParseCorpusReader(r"<path to your corpus>", 
    r'(WSJ/\d\d/WSJ_\d\d|BROWN/C[A-Z]/C[A-Z])\d\d.MRG', 
    cat_file='allcats.txt', tagset='wsj')

如您所见,您提供了文件实际位置的路径,并保留其余参数相同:它们是包含在语料库中的文件名的正则表达式,文件将语料库文件映射到类别,以及要使用的标记集。您创建的对象与ptbtreebank完全相同(除非它没有延迟创建)。