17

我一直在尝试使 NLTK(自然语言工具包)在 Google App Engine 上运行。我遵循的步骤是:

  1. 下载安装程序并运行它(一个 .dmg 文件,因为我使用的是 Mac)。
  2. 将 nltk 文件夹从 python 站点包目录中复制出来,并将其作为子文件夹放在我的项目文件夹中。
  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 时错误在日志中的显示方式。如果我在本地运行它,我会得到同样的错误(除了它似乎起源于我的 NLTK 站点包实例中......所以没有区别)。“xxxx”表示项目名称。

总而言之:

  • 我想要做的甚至可能吗?NLTK 甚至会在 App Engine 上运行吗?
  • 有什么我错过的吗?那就是:将“nltk”复制到GAE项目还不够?

编辑:修复错字并删除不必要的步骤

4

4 回答 4

8

Oakmad成功地将几个 NLTK 模块部署GAE。希望这可以帮助。但是,但老实说,即使在阅读了帖子之后,我仍然认为这不是真的。

于 2009-08-17T10:08:31.203 回答
4

这里的问题nltk是尝试进行递归导入:当nltk/__init__.py被导入时,它会导入nltk/internals.py,然后尝试nltk再次导入。由于nltk正在导入自身,因此它会失败并出现(相当无用的)错误。不管他们在做什么都是很奇怪的——就像from nltk import __file__休息一样,这并不奇怪。

这看起来像是 nltk 本身的问题 - 直接从 Python 控制台导入时是否有效?如果是这样,他们一定在安装的版本中做了某种诡计。我建议询问 nltk 小组他们在做什么以及如何解决它。

于 2009-08-17T12:15:05.010 回答
4

在 github 上 fork NLTK 2.0.3 以在应用引擎上运行它;使用 MaxEnt Treebank 标记器进行标记化和简单的 POS 标记。

于 2012-10-28T16:04:08.773 回答
3

我相信,当 NLTK 不能拥有它想要的 C 编码加速器扩展时,它确实会尽最大努力将纯 Python 作为后备(优雅降级)。然而,人们总是需要非常小心地大胆地注入如此丰富的包(递归压缩所有 .py 文件并使用 zipimport 可能不那么不稳定)。

我安装的 NLTK,我相信是 0.95,没有 ntlk.tokenizer——它确实有一个 nltk.tokenize,没有尾随的 R,但显然,当你试图告诉计算机确切的内容时,即使是最微小的错字也是 100% 无法容忍的你想要,所以我认为这不是你的错字,而是你使用了一个完全不同且不兼容的 NLTK 版本,那么,哪个版本有一个名为 tokenizer 而不是 tokenize 的子包?

如果您发现对难以忍受的单字符拼写错误采取零容忍政策,那么您不太可能容忍计算机及其编程......;-)

于 2009-08-17T05:49:33.893 回答