我有一个完整的penn树库数据集,我希望使用ptb
中的ntlk.corpus
来阅读它。但在here中有人说:
如果您可以访问Penn Treebank,NLTK的完整安装 可以配置为加载它。下载ptb包,然后在 目录nltk_data / corpora / ptb放置BROWN和WSJ Treebank安装目录(符号链接也可以)。然后 使用ptb模块而不是treebank:
但我想将数据集保存在本地目录中,然后从那里加载而不是从nltk_data/corpora/ptb
加载。 ptb
总是在该目录中搜索但是我如何提供ptb
的路径以便它在给定目录中搜索?有什么方法可以做到吗?我已经在网上彻底搜索并尝试了几种方法,但没有办法为我工作!
答案 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')
如您所见,您提供了文件实际位置的路径,并保留其余参数相同:它们是包含在语料库中的文件名的正则表达式,文件将语料库文件映射到类别,以及要使用的标记集。您创建的对象与ptb
或treebank
完全相同(除非它没有延迟创建)。