0

我有一个完整的 penn 树库数据集,我想使用ptbfrom读取它ntlk.corpus。但是这里说:

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

但我想将数据集保存在本地目录中,然后从那里加载它而不是从nltk_data/corpora/ptb. ptb总是在那个目录中搜索,但是我怎样才能给出一个路径,ptb以便它在给定的目录中搜索?有什么办法可以做到吗?我已经在网上彻底搜索并尝试了几种方法,但对我没有任何帮助!

4

1 回答 1

1

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

该对象ptb只是使用 Penn Treebank 语料库的适当设置初始化的语料库阅读器对象的快捷方式。它是这样定义的(in 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')

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

于 2016-11-23T18:42:58.477 回答