本人在学习NLTK之初,为安装nltk的语言数据集。可谓撒费苦心,最终失败。但我都是按照书上的说明做的呀,怎么就是安装不了呢?
>>> import nltk
>>> nltk.download()
经分析,发现是默认的下载器下载数据太慢太慢太慢了——根本就没动嘛,也没有任何进度提示。.于是我就找了度娘。找到了官网文档。
http://www.nltk.org/data.html
一直翻到最后,看到“Manual installation”。于是着手操作。
但是当点开http://www.nltk.org/nltk_data/后,我傻眼了。107项,手动下载岂不是要把人累疯。于是想到用程序解决。
第一步:找到所有包的链接。保存到csv文件,供下一步使用,代码如下:
import pandas as pd
import bs4
import requests
import lxml
xml = requests.get('https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xml')
html = bs4.BeautifulSoup(xml.text, 'lxml')
packages = html.find_all('package')
table_list = []
for pp in packages:
table_list.append({'name':pp['name'], 'url':pp['url']})
df = pd.DataFrame(table_list)
df.to_csv('nltk.csv')
print('get nltk url Done!')
第二步:使用下载工具下载数据文件。
这里推荐迅雷,复制url后,能自动识别并下载。
最后一步:定义解压文件的方法,处理url地址,解析出数据文件和文件所在的包(文件夹),并将文件解压。代码如下:
import pandas as pd
import zipfile
import os
def unzipfile(src_file, dest_dir, password=None):
if password:
password = password.encode()
zf = zipfile.ZipFile(src_file)
try:
zf.extractall(path=dest_dir, pwd=password)
except RuntimeError as e:
print(e)
finally:
pass
zf.close()
df = pd.read_csv('nltk.csv')
prefix = 'https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/'
def cuturl(url):
folder = url[len(prefix):]
return "../nltk_data/" + folder[:folder.find('/')] #"../nltk_data/"的设置要根据实际代码运行的位置和想要存放解压文件的路径决定
def getfile(url):
folder = url[len(prefix):]
return "../nltk/" + folder[folder.find('/')+1:] # ../nltk/ 的路径为下载工具下载的数据集文件所在路径
df['destfolder'] = df['url'].map(lambda x: cuturl(x))
df['zipfile'] = df['url'].map(lambda x: getfile(x))
#df['destfolder'] = df['url'].map(lambda x: getfile(x))
#开始根据df的信息进行解压操作
for ff in df.values:
#print(ff)
print(ff[4],ff[3])
if not os.path.exists(ff[4]):
continue
unzipfile(ff[4], ff[3])
print('Done')
PS:如何你指定的解压路径不是根目录,最后需要将整个nltk_data目录移到某个盘符的根目录下,不然nltk找不到文件。
以上为在Windows 10下的安装步骤,供参考。