您可以将语料库文件保存在本地目录中,只需将 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')
如您所见,您提供了文件实际位置的路径,其余参数保持不变:它们是要包含在语料库中的文件名的正则表达式、将语料库文件映射到类别的文件,以及要使用的标记集。您创建的对象将是与 ptb 或 treebank 完全相同的语料库阅读器(除了它不是延迟创建的)。