我正在尝试在python中使用NLTK包来学习。特别是,我需要在NLTK中使用宾夕法尼亚树库数据集。据我所知,如果我打电话给nltk.download('treebank')
我可以得到数据集的5%。但是,我在tar.gz文件中有一个完整的数据集,我想使用它。这里说:
如果您可以访问Penn Treebank的完整安装,NLTK 也可以配置为加载它。下载 ptb 包,然后在 目录 nltk_data/corpora/ptb 放置 BROWN 和 WSJ 树库安装的目录(符号链接也可以)。然后 使用 PTB 模块而不是树库:
因此,我从终端打开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 ..
PTB 语料库读取器需要大写目录和文件名(如问题中包含的allcats.txt
内容所示)。这与Penn Treebank的许多发行版相冲突,这些发行版使用小写字母。
对此的快速解决方法是将文件夹重命名为wsj
和brown
及其内容为大写。可用于此目的的 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
(从这个问题中获得)。它会递归地将目录和文件名更改为大写。