手动安装Python NLTK语言包

本人在学习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下的安装步骤,供参考。

你可能感兴趣的:(Python)