9

我正在尝试学习在 python 中使用NLTK包。特别是,我需要在 NLTK 中使用 penn 树库数据集。据我所知,如果我打电话,nltk.download('treebank')我可以获得 5% 的数据集。但是,我在 tar.gz 文件中有一个完整的数据集,我想使用它。在 这里据说:

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

所以,我从终端打开了 python,导入了 nltk 并输入了nltk.download('ptb'). 使用此命令,已在我的目录下创建了“ptb”~/nltk_data目录。最后,现在我有了~/nltk_data/ptb目录。在那里,正如我在上面给出的链接中所建议的那样,我已经放置了我的数据集文件夹。所以这是我的最终目录层次结构。

    $: pwd
    $: ~/nltk_data/corpora/ptb/WSJ
    $: ls
    $:00  02  04  06  08  10  12  14  16  18  20  22  24
      01  03  05  07  09  11  13  15  17  19  21  23  merge.log

在从00到24的所有文件夹中,有很多 .mrg文件wsj_0001.mrg , wsj_0002.mrg ,诸如此类。

现在,让我们回到我的问题。同样,根据这里

如果我编写以下内容,我应该能够获取文件 ID:

>>> from nltk.corpus import ptb
>>> print(ptb.fileids()) # doctest: +SKIP
['BROWN/CF/CF01.MRG', 'BROWN/CF/CF02.MRG', 'BROWN/CF/CF03.MRG', 'BROWN/CF/CF04.MRG', ...]

不幸的是,当我输入时,print(ptb.fileids())我得到了空数组。

>>> print(ptb.fileids())
[]

有没有人可以帮助我?

编辑 这里是我的 ptb 目录和一些 allcats.txt 文件的内容:

   $: pwd
    $: ~/nltk_data/corpora/ptb
    $: ls
    $: allcats.txt  WSJ
    $: cat allcats.txt
    $: WSJ/00/WSJ_0001.MRG news
    WSJ/00/WSJ_0002.MRG news
    WSJ/00/WSJ_0003.MRG news
    WSJ/00/WSJ_0004.MRG news
    WSJ/00/WSJ_0005.MRG news

    and so on ..
4

1 回答 1

7

PTB 语料库阅读器需要大写的目录和文件名(正如allcats.txt您在问题中包含的内容所暗示的那样)。这与许多使用小写字母的 Penn Treebank 发行版发生冲突。

对此的快速解决方法是将文件夹及其内容重命名wsjbrown大写。您可以为此使用的 UNIX 命令是:

find . -depth | \
    while read LONG 
    do 
        SHORT=$( basename "$LONG" | tr '[:lower:]' '[:upper:]' )
        DIR=$( dirname "$LONG" ) 
        if [ "${LONG}" != "${DIR}/${SHORT}"  ] 
        then 
            mv "${LONG}" "${DIR}/${SHORT}" 
        fi 
    done

(从这个问题获得)。它将递归地将目录和文件名更改为大写。

于 2016-04-29T10:21:39.430 回答