我怎么能在python/nltk中使用完整的penn treebank数据集

zwl*_*yer 7 python nlp corpus nltk penn-treebank

我正在尝试学习在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').使用此命令,在我的~/nltk_data目录下创建了"ptb" 目录.最后,现在我有了~/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
Run Code Online (Sandbox Code Playgroud)

在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', ...]
Run Code Online (Sandbox Code Playgroud)

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

>>> print(ptb.fileids())
[]
Run Code Online (Sandbox Code Playgroud)

有没有人可以帮助我?

这里编辑的是我的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 ..
Run Code Online (Sandbox Code Playgroud)

fre*_*haf 5

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
Run Code Online (Sandbox Code Playgroud)

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