我正在尝试使用字符串标记的一部分来在Google App Engine上的Python中删除一个句子的名词。到目前为止,我已经尝试使用nltk库。但我无法让nltk在GAE工作。错误消息抱怨缺少numpy模块。
此人遇到了同样的问题: https://groups.google.com/forum/?fromgroups#!topic/nltk-users/2nWZtLgFyvI
我无法找到关于如何在GAE上运行nltk或在GAE上运行的替代POS标记器的明确说明
编辑:
我试图让nltk工作的步骤(我在osx 10.7上):
将以下设置添加到app.yaml:
runtime: python27
threadsafe: false
libraries:
name: numpy
version: "latest"
在其中编写带import nltk
的test.py
Traceback(最近一次调用最后一次):文件 “/base/data/home/apps/s~domain/1.359540170137090086/dynamic/test.py” 第4行,在 import nltk File“/base/data/home/apps/s~domain/1.359540170137090086/nltk/init.py”, 第116行,in import ccg File“/base/data/home/apps/s~domain/1.359540170137090086/nltk/ccg/init.py”, 第14行 来自nltk.ccg.combinator import(UndirectedBinaryCombinator,DirectedBinaryCombinator,File “/base/data/home/apps/s~domain/1.359540170137090086/nltk/ccg/combinator.py” 8号线,在 来自nltk.parse导入ParserI文件“/base/data/home/apps/s~domain/1.359540170137090086/nltk/parse/init.py”, 第68行,in 来自nltk.parse.util import load_parser,TestGrammar,extract_test_sentences文件 “/base/data/home/apps/s~domain/1.359540170137090086/nltk/parse/util.py” 第15行,在 来自nltk.data import load文件“/base/data/home/apps/s~domain/1.359540170137090086/nltk/data.py”, 第75行,在 如果os.path.expanduser('〜/')!='〜/':path + = [File“/base/python27_runtime/python27_dist/lib/python2.7/posixpath.py”, 第259行,在expanduser中 import pwd ImportError:没有名为pwd的模块
以下内容来自nltk / data.py(第75行):
######################################################################
# Search Path
######################################################################
path = []
"""A list of directories where the NLTK data package might reside.
These directories will be checked in order when looking for a
resource in the data package. Note that this allows users to
substitute in their own versions of resources, if they have them
(e.g., in their home directory under ~/nltk_data)."""
# User-specified locations:
path += [d for d in os.environ.get('NLTK_DATA', '').split(os.pathsep) if d]
if os.path.expanduser('~/') != '~/': path += [
os.path.expanduser('~/nltk_data')]
# Common locations on Windows:
if sys.platform.startswith('win'): path += [
r'C:\nltk_data', r'D:\nltk_data', r'E:\nltk_data',
os.path.join(sys.prefix, 'nltk_data'),
os.path.join(sys.prefix, 'lib', 'nltk_data'),
os.path.join(os.environ.get('APPDATA', 'C:\\'), 'nltk_data')]
# Common locations on UNIX & OS X:
else: path += [
'/usr/share/nltk_data',
'/usr/local/share/nltk_data',
'/usr/lib/nltk_data',
'/usr/local/lib/nltk_data']
答案 0 :(得分:1)
GAE for python27支持numpy 1.6.1。你在指定
吗?runtime: python27
你app.yaml
中的?您提供的链接在Python 2.7支持之前,所以我猜不是。
答案 1 :(得分:1)
我实际上看不到您提到的Numpy错误消息 - 您能提供吗?无论哪种方式,我认为Numpy的东西可能是一个红鲱鱼(对不起,英国成语 - 可能是问题的根源不是Numpy)。 NLTK小组说Numpy无论如何都是可选的(参见NLTK.org网站上的安装页面)。
我实际上认为你可能会受到NLTK处理其进口的方式的困扰。当简单地将代码结构复制到项目中而不使用python路径时(如果你可以在GAE上pip或easy_install NLTK就可以使用它),它会尝试进行循环导入。请参阅here。
我试过并最终放弃尝试让NLTK在AppEngine上工作。但在放弃之前我确实取得了一些小小的成功。我遵循了oakmad here的建议。他的建议基本上是:
正如我所说,我的成功有限但是一旦我开始使用一些更复杂的NLTK模块(在我的情况下是CMUDICT),跨模块的相互依赖性,就不可能以这种方式欺骗模块目录。
另外三条建议。
首先,您可以查看code.google.com上的nltk-gae工作(我会链接到它但作为新用户,我只允许2个超链接)。它声称是GAE的NLTK的精简版。
其次,这就是我用CMUDICT做的事情,您可以使用完整的NLTK库在GAE之外创建一个结构,然后挑选生成的结构并在GAE应用程序中部署该pickle文件。
最后,如果您需要使用Python和NLTK,请查看Heroku,可能不是很有帮助。
*警告,我的经历是从2011年开始 - GAE现在可能会更好地使用NLTK。
答案 2 :(得分:0)
我在我的GAE实例(Python 2.5)上安装了montylingua。吃一堆内存加载字典,但工作。只需确保从服务器上的本地词典中读取:
self.lexicon_filename = os.path.join(os.path.split(__file__)[0], self.lexicon_filename)
并且,您必须将文件阅读器更改为一次读取4个字节:
nib=file_ptr.read(4) # Read 4 binary bytes
由于GAE默认每个数字(64位)读取8个字节。