分享

Windows7 平台下Python NLTK环境搭建

 悦思无邪 2017-06-10

今天帮一朋友搭建python nltk开发环境,以前用过python,但是没有使用过Natural Language Toolkit(NLTK)这么专业的package,自我感觉这东西搭建起来应该也很简单,毕竟网上资料一搜一大堆,而且看着都很靠谱,但是真的等到搭建的时候才发觉不是那么回事,浪费了接近一下午的时间才搞定,晚饭都没吃大哭,现在把过程写下来,希望对使用nltk的童鞋有所帮助。

首先给出我的开发环境:

windows 7 64位 python 3.3.2 32位

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

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

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

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

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

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

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

  1.   Install pip。大家可以根据Pip的官网步骤安装,主要是下载get-pip.py文件(将网页上内容复制,新建一个txt,将内容复制进去,修改文件为get-pip.py),然后以管理员身份运行cmd,输入:python get-pip.py,等待pip安装成功。当然,这里要把cmd路径修改为get-pip.py所在路径。pip安装成功后所在路径为:..\Python\Scripts
  2.  将pip.exe所在路径加入到环境变量中,我的pip.exe所在路径为C:\Program Files (x86)\Python\Scripts
  3. 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_data/”,并出现下面的图像:


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

     要解决这个问题,还有一个官网上提供的笨方法,那就是自己去网站下载:http://www./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()那是再好不过了。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约