Python django和at命令行中不同的nltk结果

Python django和at命令行中不同的nltk结果,python,django,django-views,nltk,Python,Django,Django Views,Nltk,我的django 1.8视图如下所示: def sourcedoc_parse(request, sourcedoc_id): sourcedoc = Sourcedoc.objects.get(pk=sourcedoc_id) nltk.data.path.append('/root/nltk_data') new_words = [] english_vocab = set(w.lower() for w in nltk.corpus.gutenberg.wo

我的django 1.8视图如下所示:

def sourcedoc_parse(request, sourcedoc_id):
    sourcedoc = Sourcedoc.objects.get(pk=sourcedoc_id)
    nltk.data.path.append('/root/nltk_data')
    new_words = []
    english_vocab = set(w.lower() for w in nltk.corpus.gutenberg.words())    #<---the line where the error occurs
    results = {}

    template = 'sourcedoc_parse.html'
    params = {'sourcedoc': sourcedoc,'results': results, 'new_words': new_words, 'BASE_URL': BASE_URL}

    return render_to_response(template, params, context_instance=RequestContext(request))
加载文件“/usr/local/lib/python2.7/dist-packages/nltk/corpus/util.py” 56除了LookupError:升高e

Exception Type: LookupError at /sourcedoc/parse/13/
Exception Value: 
**********************************************************************
Resource 'corpora/gutenberg' not found.  Please use the NLTK
Downloader to obtain the resource:  >>> nltk.download()
Searched in:
- '/var/www/nltk_data'
- '/usr/share/nltk_data'
- '/usr/local/share/nltk_data'
- '/usr/lib/nltk_data'
- '/usr/local/lib/nltk_data'
- '/root/nltk_data'
**********************************************************************
特别奇怪的是,当我在python shell中的同一目录中执行此操作时,它可以正常工作:

Python 2.7.6 (default, Mar 22 2014, 22:59:38) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import nltk
>>> english_vocab = set(w.lower() for w in nltk.corpus.gutenberg.words())
>>> 'jabberwocky' in english_vocab
False
>>> 'monster' in english_vocab
True
>>> nltk.data.path
['/root/nltk_data', '/usr/share/nltk_data', '/usr/local/share/nltk_data', '/usr/lib/nltk_data', '/usr/local/lib/nltk_data']
有人知道在django的视图中运行它与在python命令行中执行相同操作之间的区别是什么吗?我使用“python manage.py shell”做了同样的事情,它也是这样工作的


任何关于查找差异的调试建议都是受欢迎的。

这里的问题是运行django的用户没有在/root上读取的权限


运行django shell时不会发生这种情况,因为您以root用户身份运行shell,但服务器以www用户身份运行(请参阅nltk搜索的第一个目录是/var/www/nltk_data,www用户的主目录)。

可能运行django的用户没有权限阅读/rootRight you!将corpora/gutenberg数据移动到django可以访问的位置,然后使用“nltk.data.path.append()”将该目录添加到nltk的查找内容列表中,结果成功了!我原以为使用django shell会拥有与django相同的用户/权限,但我错了。谢谢如果需要,您可以添加您的建议作为答案,这样我就可以选择它。添加了有关运行shell或服务器时行为差异的注释。
Python 2.7.6 (default, Mar 22 2014, 22:59:38) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import nltk
>>> english_vocab = set(w.lower() for w in nltk.corpus.gutenberg.words())
>>> 'jabberwocky' in english_vocab
False
>>> 'monster' in english_vocab
True
>>> nltk.data.path
['/root/nltk_data', '/usr/share/nltk_data', '/usr/local/share/nltk_data', '/usr/lib/nltk_data', '/usr/local/lib/nltk_data']