1

GoogleAppEngineでPythonの文の名詞を引き出すために文字列のタグ付けの一部を実行しようとしています。これまで、nltkライブラリを使用しようとしました。しかし、GAEでnltkを動作させることができません。エラーメッセージは、numpyモジュールがないことについて文句を言います。

この人は同じ問題を抱えています: https ://groups.google.com/forum/?fromgroups#!topic / nltk-users / 2nWZtLgFyvI

nltkをGAEで実行する方法、またはGAEで実行する代替POSタガーを取得する方法についての明確な指示が見つかりません

編集:

nltkを機能させるための私の手順(私はosx 10.7を使用しています):

  1. ターミナル「easy_installnltk」を介してnltkをインストールします
  2. nltkをappengineプロジェクトのルートにコピーします/Library/Python/2.7/site-packages/nltk-2.0.1-py2.7.egg/nltk/
  3. 次の設定をapp.yamlに追加します。

    runtime: python27
    threadsafe: false
    
    libraries:
      name: numpy
      version: "latest"
    
  4. import nltkその中にtest.pyを書く

  5. デプロイして実行すると、次のエラーが発生します(numpyエラーは解決されましたが、新しいエラーが発生します):

トレースバック(最後の最後の呼び出し):ファイル "/base/data/home/apps/s~domain/1.359540170137090086/dynamic/test.py"、4行目、importnltkファイル"/ base / data / home / apps / s 〜domain / 1.359540170137090086 / nltk / init .py "、行116、インポートccgファイル" / 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"、line 8 in from nltk.parse import ParserI File "/ base / data / home / apps / s〜domain / 1.359540170137090086 / nltk / parse / init.py "、68行目、nltk.parse.utilからインポートload_parser、TestGrammar、extract_test_sentencesファイル" /base/data/home/apps/s~domain/1.359540170137090086/nltk/parse/util.py "、15行目、 from nltk.data import load File "/base/data/home/apps/s~domain/1.359540170137090086/nltk/data.py"、75行目、if os.path.expanduser('〜/')!='〜 /':パス+ =[ファイル"/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']
4

3 に答える 3

1

GAEforpython27はnumpy1.6.1をサポートしています。指定していますか

runtime: python27

あなたのapp.yaml?あなたが与えたリンクはPython2.7のサポートよりも前のものなので、私は推測していません。

于 2012-06-11T04:06:10.263 に答える
1

あなたが言及したNumpyエラーメッセージを実際に見ることができませんでした-それを提供できますか?いずれにせよ、Numpyのものは赤いニシンかもしれないと思います(申し訳ありませんが、英国のイディオム-問題の原因はNumpyではない可能性があります)。NLTKグループは、Numpyはとにかくオプションであると言っています(NLTK.orgサイトのインストールページを参照してください)。

実際、NLTKがインポートを処理する方法に苦しんでいるのではないかと思います。コード構造をプロジェクトにコピーし、Pythonパス(GAEでNLTKをpipまたはeasy_installできる場合に使用される)を使用しない場合、循環インポートを実行しようとします。ここを参照してください。

私はNLTKをAppEngineで動作させることを試み、最終的にはあきらめました。しかし、私はあきらめる前にいくつかのマイナーな成功を収めました。私はここでオークマッドのアドバイスに従いました。彼のアドバイスは基本的に次のとおりでした。

  • 必要なモジュールを一度に1つずつコピーします
  • コードを実行して、依存関係が満たされているかどうかを確認します
  • そうでない場合で、エラーが不要なNLTKモジュールにある場合は、検索対象のディレクトリを作成し、その中に空のinit.pyを配置します(このinitには、接頭辞と接尾辞を2つ付ける必要がありますが、次のように解釈されます。このエディタによるフォーマット)
  • インポートエラーが必要なモジュールにある場合は、 NLTKディストリビューションからコピーして、繰り返します。

私が言ったように、私は限られた成功しか収めませんでしたが、モジュール間の相互依存性を持つ、より複雑なNLTKモジュール(私の場合はCMUDICT)のいくつかを使い始めると、この方法でモジュールディレクトリをスプーフィングすることが不可能になりました。

あなたのための他の3つの提案。

まず、code.google.comでnltk-gaeの取り組みを確認できます(リンクしますが、新しいユーザーとして許可されているハイパーリンクは2つだけです)。これは、GAE用のNLTKの簡略版であると主張しています。

次に、これは私がCMUDICTで行ったことです。完全なNLTKライブラリを使用して、GAEの外部に構造を作成し、結果の構造をピクルスして、そのピクルスファイルをGAEアプリケーション内にデプロイできます。

最後に、PythonとNLTKを使用する必要がある場合は、Herokuを見てください。

*注意、私の経験は2011年のものです-GAEはNLTKでより良くプレイできるかもしれません。

于 2012-06-11T09:15:27.820 に答える
0

私はmontylinguaをGAEインスタンス(Python 2.5)にインストールしました。辞書をロードする大量のメモリを食べますが、機能します。サーバー上のローカル辞書から読むことを忘れないでください。

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はデフォルトで1桁あたり8バイト(64ビット)を読み取るため。

于 2012-09-28T04:53:29.517 に答える