您的位置:首页 > 编程语言 > Python开发

Windows7 平台下Python+NLTK环境搭建

2015-10-01 20:37 746 查看
今天帮一朋友搭建python+nltk开发环境,以前用过python,但是没有使用过Natural Language Toolkit(NLTK)这么专业的package,自我感觉这东西搭建起来应该也很简单,毕竟网上资料一搜一大堆,而且看着都很靠谱,但是真的等到搭建的时候才发觉不是那么回事,浪费了接近一下午的时间才搞定,晚饭都没吃

,现在把过程写下来,希望对使用nltk的童鞋有所帮助。

首先给出我的开发环境:

windows 7 64位 + python 3.3.2 32位

声明一下:由于NLTK的官方网页给出的安装步骤中提到“Install
Python 3.4: http://www.python.org/ downloads (avoid the 64-bit versions)”,即告诉大家别下载64位的python,因此我使用的是32位3.3.2版本。

下面给出搭建具体过程以及过程中出现问题的解决方案:(最开始我是参考《windows环境下搭建python+nltk开发环境》,因此各位也可以先看看这个贴子)

Install Python 3.3.2,并确保将路径加入到环境变量中

Install Numpy,下载对应python 3.3版本的,我下载的是 numpy-1.9.0-win32-superpack-python3.3.exe (官网推荐大家安装)

Install NLTK,选择以管理员身份安装 ,安装成功后应该能够在Python安装目录的..\Lib\site-packages中会找到nltk文件夹

Install PyYAML,同样选择以管理员身份安装

一般到这个时候,大家都感觉NLTK已经安装完毕,然后按照官网上的步骤运行python,输入:import nltk。但是现实很残酷,在这一步中,大家很可能看到一堆显眼的红色字体,其中可能会有这么关键的一句:ImportError: No module named six,这说明python中没有安装module six 导致。因此接下来的步骤应该是:

Install pip。大家可以根据Pip的官网步骤安装,主要是下载get-pip.py文件(将网页上内容复制,新建一个txt,将内容复制进去,修改文件为get-pip.py),然后以管理员身份运行cmd,输入:python
get-pip.py,等待pip安装成功。当然,这里要把cmd路径修改为get-pip.py所在路径。pip安装成功后所在路径为:..\Python\Scripts
将pip.exe所在路径加入到环境变量中,我的pip.exe所在路径为C:\Program Files (x86)\Python\Scripts
Install Six module,重新以管理员身份运行cmd,输入:pip install six,等待安装完成。

这时候nltk才算真的安装完成,运行python 3.3 IDLE, 输入: import nltk,无错误显示。

使用nltk,当然要配置数据源,即安装nltk_data,官网给出的步骤是输入:

>>> import nltk
>>> nltk.download()
虽然你期待出现“showing info http://www.nltk.org/nltk_data/”,并出现下面的图像:


但事实是你可能会遇到以下错误:ConnectionResetError: [WinError
10054] 远程主机强迫关闭了一个现有的连接。就是这个问题,让我抓狂了很长时间,为此,我甚至找到了微软专门为解决WinEoor
10054而发布的一个补丁,而获得这个补丁竟然还需要填写个人邮箱,微软才会把链接发给你,而我竟然真的这么做了,并将补丁下载下来,补丁名:Windows6.1-KB981344-v2-x64。事实证明所有这些都没有任何卵用



,问题依然没有得到解决。
要解决这个问题,还有一个官网上提供的笨方法,那就是自己去网站下载:http://www.nltk.org/nltk_data/,按照官网指示,下载完成后,将其解压放到一个文件夹中,然后将该文件夹所在路径加入到环境变量中,该环境变量需要命名为NLTK_DATA,我是将所有文件解压,放到了文件夹nltk_data中,路径:C:\DevelopTools\nltk_data。
到了这里问题感觉已经解决,运行几个例子应该没有任何问题,输入:
>>> from nltk.corpus import brown
>>> brown.words()


进行测试,预期结果是:
['The', 'Fulton', 'County', 'Grand', 'Jury', 'said', ...]
但现实是可能会得到以下结果:

Traceback (most recent call last):
File "C:\Program Files (x86)\Python\lib\site-packages\nltk\corpus\util.py", line 63, in __load
try: root = nltk.data.find('corpora/%s' % zip_name)
File "C:\Program Files (x86)\Python\lib\site-packages\nltk\data.py", line 624, in find
raise LookupError(resource_not_found)
LookupError:
**********************************************************************
Resource 'corpora/brown.zip/brown/' not found.  Please use the
NLTK Downloader to obtain the resource:  >>> nltk.download()
Searched in:
- 'C:\\DevelopTools\\nltk_data'
- 'C:\\Users\\Chogori_Ma/nltk_data'
- 'C:\\nltk_data'
- 'D:\\nltk_data'
- 'E:\\nltk_data'
- 'C:\\Program Files (x86)\\Python\\nltk_data'
- 'C:\\Program Files (x86)\\Python\\lib\\nltk_data'
- 'C:\\Users\\Chogori_Ma\\AppData\\Roaming\\nltk_data'
**********************************************************************

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
brown.words()
File "C:\Program Files (x86)\Python\lib\site-packages\nltk\corpus\util.py", line 99, in __getattr__
self.__load()
File "C:\Program Files (x86)\Python\lib\site-packages\nltk\corpus\util.py", line 64, in __load
except LookupError: raise e
File "C:\Program Files (x86)\Python\lib\site-packages\nltk\corpus\util.py", line 61, in __load
root = nltk.data.find('corpora/%s' % self.__name)
File "C:\Program Files (x86)\Python\lib\site-packages\nltk\data.py", line 624, in find
raise LookupError(resource_not_found)
LookupError:
**********************************************************************
Resource 'corpora/brown' not found.  Please use the NLTK
Downloader to obtain the resource:  >>> nltk.download()
Searched in:
- 'C:\\DevelopTools\\nltk_data'
- 'C:\\Users\\Chogori_Ma/nltk_data'
- 'C:\\nltk_data'
- 'D:\\nltk_data'
- 'E:\\nltk_data'
- 'C:\\Program Files (x86)\\Python\\nltk_data'
- 'C:\\Program Files (x86)\\Python\\lib\\nltk_data'
- 'C:\\Users\\Chogori_Ma\\AppData\\Roaming\\nltk_data'
**********************************************************************


看到这些,我就呵呵了,一阵头大,赶紧上网找资料,但是没有一个能够解决我的问题,然后我仔细看了看出现的问题,然后心里有一万只羊驼奔腾而过,“Resource 'corpora/brown' not found”仔细看着这一句,对!就是这一句,你就会知道,单纯的将nltk data解压到某一个文件夹中是不够的,你需要将这些文件移动到一个名为corpora文件夹中,因此
正确的路径应该类似这样:C:\DevelopTools\nltk_data\corpora,而环境变量依然是: C:\DevelopTools\nltk_data。

到这里,环境终于配置完成,测试一下,你会得到期待的结果:

>>> brown.words()
['The', 'Fulton', 'County', 'Grand', 'Jury', 'said', ...]


PS: 今年是反转的一年,所以很多事情都会遇到神转折,看完以上内容,大家也许会问为什么“ConnectionResetError”我没有贴出错误代码,那么我告诉你,那是因为就在我写这篇博客时!对!就在我要贴代码时!我重新运行了一遍nltk.dpwnload(),然后我得到了那个我期待依旧的画面。。。。。!!!!这不是我想看到的啊!!!!!




后记:好开心(这是什么心态啊

)!!第二天重新运行import nltk 和 nltk.download()又出现了昨天遇到的错误,现在把错误信息贴上:

>>> import nltk
>>> nltk.download()Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
nltk.download()
File "C:\Program Files (x86)\Python\lib\site-packages\nltk\downloader.py", line 655, in download
self._interactive_download()
File "C:\Program Files (x86)\Python\lib\site-packages\nltk\downloader.py", line 974, in _interactive_download
DownloaderGUI(self).mainloop()
File "C:\Program Files (x86)\Python\lib\site-packages\nltk\downloader.py", line 1234, in __init__
self._fill_table()
File "C:\Program Files (x86)\Python\lib\site-packages\nltk\downloader.py", line 1530, in _fill_table
items = self._ds.collections()
File "C:\Program Files (x86)\Python\lib\site-packages\nltk\downloader.py", line 499, in collections
self._update_index()
File "C:\Program Files (x86)\Python\lib\site-packages\nltk\downloader.py", line 825, in _update_index
ElementTree.parse(compat.urlopen(self._url)).getroot())
File "C:\Program Files (x86)\Python\lib\urllib\request.py", line 156, in urlopen
return opener.open(url, data, timeout)
File "C:\Program Files (x86)\Python\lib\urllib\request.py", line 469, in open
response = self._open(req, data)
File "C:\Program Files (x86)\Python\lib\urllib\request.py", line 487, in _open
'_open', req)
File "C:\Program Files (x86)\Python\lib\urllib\request.py", line 447, in _call_chain
result = func(*args)
File "C:\Program Files (x86)\Python\lib\urllib\request.py", line 1268, in http_open
return self.do_open(http.client.HTTPConnection, req)
File "C:\Program Files (x86)\Python\lib\urllib\request.py", line 1253, in do_open
r = h.getresponse()
File "C:\Program Files (x86)\Python\lib\http\client.py", line 1143, in getresponse
response.begin()
File "C:\Program Files (x86)\Python\lib\http\client.py", line 354, in begin
version, status, reason = self._read_status()
File "C:\Program Files (x86)\Python\lib\http\client.py", line 316, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "C:\Program Files (x86)\Python\lib\socket.py", line 297, in readinto
return self._sock.recv_into(b)
ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。
>>>
弹出的NLTK Downloader没有任何东西:



还会有下面的提示:



出现以上情况,我所提出的解决方案就可以用上了,要是大家正常运行 nltk.download()那是再好不过了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: