在Google App Engine上使用Python NLTK (2.0b5)

17 投票
4 回答
6009 浏览
提问于 2025-04-15 13:38

我一直在尝试让NLTK(自然语言工具包)在Google App Engine上运行。以下是我按照的步骤:

  1. 下载安装程序并运行它(一个.dmg文件,因为我使用的是Mac)。
  2. 把nltk文件夹从Python的site-packages目录中复制出来,然后放到我的项目文件夹里作为一个子文件夹。
  3. 在包含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 的讨论组问问他们在搞什么,以及怎么解决这个问题。

撰写回答