ermutuxia

2021-03-23   阅读量: 3098

Python

本地绑定host:在python中执行nltk.download()的时候下载超慢,最后超时无法下载成功

扫码加入数据分析学习群

执行如下命令

import nltk

nltk.download() #执行这个下载语料库命令的时候显示超时,也没有弹出像官方网站说的那个窗口,然后肯定是没有下载成功,怎么办?

In [12]: nltk.download()

Traceback (most recent call last):


File ", line 1, in

nltk.download()


File "D:\ProgramData\Anaconda3\lib\site-packages\nltk\downloader.py", line 765, in download

self._interactive_download()


File "D:\ProgramData\Anaconda3\lib\site-packages\nltk\downloader.py", line 1115, in _interactive_download

DownloaderGUI(self).mainloop()


File "D:\ProgramData\Anaconda3\lib\site-packages\nltk\downloader.py", line 1412, in __init__

self._fill_table()


File "D:\ProgramData\Anaconda3\lib\site-packages\nltk\downloader.py", line 1744, in _fill_table

items = self._ds.collections()


File "D:\ProgramData\Anaconda3\lib\site-packages\nltk\downloader.py", line 593, in collections

self._update_index()


File "D:\ProgramData\Anaconda3\lib\site-packages\nltk\downloader.py", line 954, in _update_index

ElementTree.parse(urlopen(self._url)).getroot()


File "D:\ProgramData\Anaconda3\lib\urllib\request.py", line 222, in urlopen

return opener.open(url, data, timeout)


File "D:\ProgramData\Anaconda3\lib\urllib\request.py", line 525, in open

response = self._open(req, data)


File "D:\ProgramData\Anaconda3\lib\urllib\request.py", line 542, in _open

result = self._call_chain(self.handle_open, protocol, protocol +


File "D:\ProgramData\Anaconda3\lib\urllib\request.py", line 502, in _call_chain

result = func(*args)


File "D:\ProgramData\Anaconda3\lib\urllib\request.py", line 1393, in https_open

return self.do_open(http.client.HTTPSConnection, req,


File "D:\ProgramData\Anaconda3\lib\urllib\request.py", line 1354, in do_open

r = h.getresponse()


File "D:\ProgramData\Anaconda3\lib\http\client.py", line 1347, in getresponse

response.begin()


File "D:\ProgramData\Anaconda3\lib\http\client.py", line 307, in begin

version, status, reason = self._read_status()


File "D:\ProgramData\Anaconda3\lib\http\client.py", line 268, in _read_status

line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")


File "D:\ProgramData\Anaconda3\lib\socket.py", line 669, in readinto

return self._sock.recv_into(b)


File "D:\ProgramData\Anaconda3\lib\ssl.py", line 1241, in recv_into

return self.read(nbytes, buffer)


File "D:\ProgramData\Anaconda3\lib\ssl.py", line 1099, in read

return self._sslobj.read(len, buffer)


TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。


解决建议:通过绕过DNS解析,直接在本地绑定host

  1. 在浏览器中打开DNS查询网站http://tool.chinaz.com/dns,输入https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xml,然后点击检测,在下方的结果列表中,如下图所示:

    3.png

    ttl值越小,下载速度越快,但是只有台湾那几个ip可以下载吧,不知道为什么ttl比较小的湖南那个没有ip,等会刷新再试试。

    先选择台湾中华电信里面第一个

    185.199.108.133 [美国 GitHub+Fastly节点]

    185.199.109.133 [美国 GitHub+Fastly节点]

    185.199.111.133 [美国 GitHub+Fastly节点]

    185.199.110.133 [美国 GitHub+Fastly节点]

  2. "C:\Windows\System32\drivers\etc\lmhosts.sam"用记事本打开这个文件


    在该文本文件中的末尾加入如下两行命令

#解决https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xml下载慢的问题

185.199.108.133 raw.githubusercontent.com

3.然后保存并关闭这个文件

4.然后再在python里面执行nltk.download()命令进行数据下载,看能否下载成功


然后终于可以弹出官网所说的那个窗口了。注意那个窗口不会直接弹出到你面前,需要自己将鼠标划到如图所示的地方,然后点击才能查看。

7.png

弹出一个窗口

2.png


下载已经进入下载了,如图所示

9.png

7.png

只能关闭NLTK Downloader窗口,下载终止

python页面提示如下

In [2]: import nltk

...: #

...: nltk.download()

showing info https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xml

showing info https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xml

Exception in Tkinter callback

Traceback (most recent call last):

File "D:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 1883, in __call__

return self.func(*args)

File "D:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 804, in callit

func(*args)

File "D:\ProgramData\Anaconda3\lib\site-packages\nltk\downloader.py", line 2154, in _monitor_message_queue

self._select(msg.package.id)

AttributeError: 'str' object has no attribute 'id'


如果提前终止下载就可能返回True,如下面所示

import nltk

nltk.download()

showing info https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xml

showing info https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xml

Out[2]: True

返回True可不是你下载成功了呀,这一点一定要记住


也有可能出现下面这种错误

6.png


可以看到我们下载nltk_data这样一个文件夹是多么的困难,但我们应该是成功下载了部分资料文件的。但想哭

然后试下下面的语句。看到应该是我们自己从其他网站直接下载到一些文件放到C:\Users\Administrator\AppData\Roaming\nltk_data路径下应该就可以了。

nltk.download("nps_chat")

[nltk_data] Downloading package nps_chat to

[nltk_data] C:\Users\Administrator\AppData\Roaming\nltk_data...

[nltk_data] Unzipping corpora\nps_chat.zip.

Out[3]: True


nltk.download("nps_chat")

[nltk_data] Downloading package nps_chat to

[nltk_data] C:\Users\Administrator\AppData\Roaming\nltk_data...

[nltk_data] Package nps_chat is already up-to-date!

Out[4]: True


nltk.download("nps_chat")

[nltk_data] Downloading package nps_chat to

[nltk_data] C:\Users\Administrator\AppData\Roaming\nltk_data...

[nltk_data] Package nps_chat is already up-to-date!

Out[5]: True

9.png

可以看到那个文件夹下面有一个corpora文件夹,然后双击进入,可以看到nps_chat已经成功解压

5.png

然后执行下面的命令试一下

In [7]: nltk.download("alpino")

[nltk_data] Downloading package alpino to

[nltk_data] C:\Users\Administrator\AppData\Roaming\nltk_data...

[nltk_data] Unzipping corpora\alpino.zip.

Out[7]: True

提示解压alpino文件了,我们截图看下

0.png

然后再重新执行nltk.download("alpino") 就会提示alpino 已经升级了。

nltk.download("alpino")

[nltk_data] Downloading package alpino to

[nltk_data] C:\Users\Administrator\AppData\Roaming\nltk_data...

[nltk_data] Package alpino is already up-to-date!

Out[8]: True


也就是说应该是我们把其他的这些库资料从某个地方下载,然后再保存到这个路径下应该就可以了,

可以放置的路径如下,到时候调用资料的时候默认会从如下的这些路径下面去寻找

wnl.lemmatize('countries')

Traceback (most recent call last):


File "D:\ProgramData\Anaconda3\lib\site-packages\nltk\corpus\util.py", line 83, in __load

root = nltk.data.find("{}/{}".format(self.subdir, zip_name))


File "D:\ProgramData\Anaconda3\lib\site-packages\nltk\data.py", line 585, in find

raise LookupError(resource_not_found)


LookupError:

**********************************************************************

Resource wordnet not found.

Please use the NLTK Downloader to obtain the resource:


import nltk

nltk.download('wordnet')


For more information see: https://www.nltk.org/data.html


Attempted to load corpora/wordnet.zip/wordnet/


Searched in:

- 'C:\\Users\\Administrator/nltk_data'

- 'D:\\ProgramData\\Anaconda3\\nltk_data'

- 'D:\\ProgramData\\Anaconda3\\share\\nltk_data'

- 'D:\\ProgramData\\Anaconda3\\lib\\nltk_data'

- 'C:\\Users\\Administrator\\AppData\\Roaming\\nltk_data'

- 'C:\\nltk_data'

- 'D:\\nltk_data'

- 'E:\\nltk_data'

**********************************************************************




During handling of the above exception, another exception occurred:


Traceback (most recent call last):


File "

wnl.lemmatize('countries')


File "D:\ProgramData\Anaconda3\lib\site-packages\nltk\stem\wordnet.py", line 38, in lemmatize

lemmas = wordnet._morphy(word, pos)


File "D:\ProgramData\Anaconda3\lib\site-packages\nltk\corpus\util.py", line 120, in __getattr__

self.__load()


File "D:\ProgramData\Anaconda3\lib\site-packages\nltk\corpus\util.py", line 85, in __load

raise e


File "D:\ProgramData\Anaconda3\lib\site-packages\nltk\corpus\util.py", line 80, in __load

root = nltk.data.find("{}/{}".format(self.subdir, self.__name))


File "D:\ProgramData\Anaconda3\lib\site-packages\nltk\data.py", line 585, in find

raise LookupError(resource_not_found)


LookupError:

**********************************************************************

Resource wordnet not found.

Please use the NLTK Downloader to obtain the resource:


import nltk

nltk.download('wordnet')


For more information see: https://www.nltk.org/data.html


Attempted to load corpora/wordnet


Searched in:

- 'C:\\Users\\Administrator/nltk_data'

- 'D:\\ProgramData\\Anaconda3\\nltk_data'

- 'D:\\ProgramData\\Anaconda3\\share\\nltk_data'

- 'D:\\ProgramData\\Anaconda3\\lib\\nltk_data'

- 'C:\\Users\\Administrator\\AppData\\Roaming\\nltk_data'

- 'C:\\nltk_data'

- 'D:\\nltk_data'

- 'E:\\nltk_data'

**********************************************************************

从上面的文件夹里去看一下就知道,wordnet那个资料我们没有下载成功,当然从这些路径下找不到。我们只下载成功了nps_chat和alpino

那在哪里可以下载到这些文件呢?打开下面的链接,手动下载那些资源。

https://github.com/nltk/nltk_data

9.png

4.png

唉,又因为网速问题无法下载


https://github.com/nltk/nltk_data/archive/refs/heads/gh-pages.zip 把这个数据链接随便粘贴到一个网址上,竟然立刻可以下载了

2.png


很神奇呀

2.png

可以看到已经下载多少,为什么看不见总得文件大小

我们下载完成后得到一个如下图所示的压缩文件,我把文件传到了百度云盘上,有需要的可以下载

链接:https://pan.baidu.com/s/1NIEiOWxxViTj4bzAR5MwJw

提取码:trk6

复制这段内容后打开百度网盘手机App,操作更方便哦

3.png

我们讲这个压缩文件解压如下,

1.png

然后我们打开里面的packages文件夹如下,这些文件就是我们用的文件。

3.png

我们将上面文件夹中的文件复制或者剪贴到C:\\Users\\Administrator\\AppData\\Roaming\\nltk_data下。

在粘贴之前我们需要先做一些准备工作。

  1. 如果你的nltk_data文件夹不存在,则你需要重新建立一个nltk_data文件夹,

  2. 如果你的nltk_data文件夹存在,但是下面有东西,则需要把这些东西全部删掉。


然后再进行粘贴。粘贴完成后如下图所示:

3.png

然后我们就可以执行代码了

import nltk

#nltk.download()如果你的电脑上已经把相关的资源下载好了,就不需要执行这句命令了

from nltk.stem import SnowballStemmer


from nltk.stem import WordNetLemmatizer


wnl = WordNetLemmatizer()

wnl.lemmatize('countries')


结果已经可以正确执行了

37.png

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
3.0802 2 1 关注作者 收藏

评论(1)

fs陈晓亮
2021-03-24

谢谢老师,问题已经解决了!

0.0000 0 0 回复

推荐课程