【问题标题】:Read complete penn treebank dataset from local directory从本地目录读取完整的 penn 树库数据集
【发布时间】:2016-11-23 18:16:08
【问题描述】:

我有一个完整的 penn 树库数据集,我想使用来自 ntlk.corpusptb 读取它。但在here 中说:

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

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

【问题讨论】:

  • 使用符号链接,就像文档告诉你的那样。

标签: python nltk penn-treebank


【解决方案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 完全相同的语料库阅读器(除了它不是延迟创建的)。

【讨论】:

    猜你喜欢
    • 2016-07-04
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 2015-11-17
    • 2012-08-26
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多