问题描述
国家语音语料库是新加坡人英语口语的自然语言处理语料库,可在此处找到:https://www.imda.gov.sg/programme-listing/digital-services-lab/national-speech-corpus。
当您注册免费语料库时,您会被定向到一个 DropBox 文件夹。语料库为 1 TB,(在撰写本文时)有四个部分。我只想下载第 1 部分,但即使这样也有 1446 个 zip 文件,每个文件都很大。我的问题是:如何仅使用命令行以编程方式将许多大文件从 DropBox 下载到 Linux (Ubunut 16.04) VM。
相关部分的目录树如下所示:
root
|-LEXICON
|-PART1
|-DATA
|-CHANNEL0
|-WAVE
|-SPEAKER0001.zip
|-SPEAKER0002.zip
...
|-SPEAKER1446.zip
我研究了几种不同的方法:
-
使用共享链接通过 this question 中所述的
WAVE
命令下载wget
父目录。但是,这并没有奏效,因为我收到了这个错误:重用与 www.dropbox.com:443 的现有连接 HTTP 请求已发送,正在等待响应... 400 错误请求 2021-01-06 23:09:06 错误 400:错误请求。
我认为这是因为 WAVE
目录太大,DropBox 无法压缩。
-
基于 this post,有人建议我可以下载
WAVE
父目录的 HTML 并找到指向各个 zip 文件的所有直接链接,但可以找到指向个别文件不在 HTML 文件中。 -
基于与 (2) 中相同的帖子,我还可以尝试使用 dropBox API 为每个 zip 文件创建共享链接,尽管这看起来太麻烦了。
-
下载 Linux DropBox 客户端并按照 this installation 中所述同步相关文件。
最后,第四个选项对我有用,但我想为将来需要下载此数据集的任何人发布此调查。另外,我想看看其他人是否有更好的方法。
解决方法
正如我所描述的,对我有用的方法是使用 Dropbox 的 linux 客户端将文件同步到我的 Linux VM。您可以按照these instructions下载Linux客户端。这些说明在我的 Ubuntu 16.04 VM 上对我有用。
我在使用同步客户端时遇到的一个问题是如何有选择地排除目录。我的 VM 上只有 630 GB,整个 National Speech Corpus 大小为 1TB,因此我需要在 Dropbox 同步填满我的磁盘之前排除文件。
您可以使用安装页面底部的 dropbox python 脚本有选择地排除文件。脚本的链接是 here。使用以下命令从我的主目录(自动安装 Dropbox 同步文件夹)调用 python 脚本:
python dropbox.py exclude add ~/Dropbox/<path_to_excluded_dir>
您可能想要停止和启动 Dropbox 客户端,可以通过以下方式完成:
python dropbox.py start
python dropbox.py stop
最后,查看python脚本中的命令以获取更多信息:
python dropbox.py --help
通过这种方法,我能够轻松下载所需的文件,而不会让我的 VM 不堪重负。