在Google App Engine上使用Python NLTK (2.0b5)
我一直在尝试让NLTK(自然语言工具包)在Google App Engine上运行。以下是我按照的步骤:
- 下载安装程序并运行它(一个.dmg文件,因为我使用的是Mac)。
- 把nltk文件夹从Python的site-packages目录中复制出来,然后放到我的项目文件夹里作为一个子文件夹。
- 在包含nltk子文件夹的文件夹中创建一个Python模块,并添加这一行代码:
from nltk.tokenize import *
不幸的是,启动后我遇到了这个错误(注意,这个错误是在NLTK内部深处产生的,我看到的是我系统上Python的安装错误,而不是GAE项目子文件夹里的那个):
<type 'exceptions.ImportError'>: No module named nltk
Traceback (most recent call last):
File "/base/data/home/apps/xxxx/1.335654715894946084/main.py", line 13, in <module>
from lingua import reducer
File "/base/data/home/apps/xxxx/1.335654715894946084/lingua/reducer.py", line 11, in <module>
from nltk.tokenizer import *
File "/base/data/home/apps/xxxx/1.335654715894946084/lingua/nltk/__init__.py", line 73, in <module>
from internals import config_java
File "/base/data/home/apps/xxxx/1.335654715894946084/lingua/nltk/internals.py", line 19, in <module>
from nltk import __file__
注意:这是上传到GAE后日志中显示的错误。如果我在本地运行,也会遇到同样的错误(只是看起来是从我site-packages中的NLTK内部产生的……所以没有区别)。而“xxxx”代表的是项目名称。
所以总结一下:
- 我尝试的事情是否可能?NLTK真的能在App Engine上运行吗?
- 我是不是漏掉了什么?也就是说,把“nltk”复制到GAE项目中是不够的吗?
编辑:修正了一个错字并去掉了不必要的步骤
4 个回答
4
我在GitHub上复制了NLTK 2.0.3这个项目,目的是让它可以在应用引擎上运行;现在可以进行分词和简单的词性标注,使用的是MaxEnt Treebank标注器。
8
oakmad 成功地将多个 NLTK 模块部署到了 GAE 上。希望这对你有帮助。不过,说实话,即使看了这篇帖子,我还是觉得这不太可能。
4
这里的问题是,nltk
在尝试进行递归导入。当导入 nltk/__init__.py
时,它又去导入 nltk/internals.py
,而后者又试图导入 nltk
。因为 nltk
还没完全导入就又被调用了,所以就出错了,错误信息也不太有用。无论他们在做什么,这种做法都挺奇怪的,所以像 from nltk import __file__
这样的代码出错也就不奇怪了。
这看起来是 nltk
自身的问题——如果直接在 Python 控制台导入它是否能正常工作?如果可以,那说明他们在安装的版本中做了一些奇怪的处理。我建议去 nltk
的讨论组问问他们在搞什么,以及怎么解决这个问题。