5

AWS の Lambda 関数で Python スペルチェック ライブラリ Pyechant を使用しようとしています。Pienchant は、C libenchant ライブラリのラッパーであり、Aspell などのプロバイダーの単語辞書に依存しています。

Lambda で実行されている私の Python コードでは、エンチャント ライブラリをコンパイルして AWS Linux EC2 インスタンスに C ライブラリ (libenchant.so) を正常にインポートし、出力を Lambda 展開パッケージにコピーすることができます。

ただし、pyenchant ライブラリは、動作する必要がある Lambda で実行すると、単語辞書を読み込むことができません。次に、以下を使用して EC2 インスタンスに Aspell をインストールしました。

yum install aspell-en enchant-aspell

次に、次の追加の .so ファイルを展開パッケージの /lib フォルダーにコピーしました。

  • libaspell.so
  • libenchant_aspell.so
  • libenchant_ispell.so
  • libenchant_myspell.so
  • libenchant.so

libenchant_aspell.so が実際の辞書であると確信していますが、それを拾っていないため、次にどこに行くべきかわかりません。

以下は私の lambda_handler python コードです:

from __future__ import print_function
import os
import sys
import re
import enchant

enchant.set_param("enchant.aspell.dictionary.path","/var/task/lib")

def lambda_handler(event, context):

    print("# List available enchant dictionary languages")
    print(enchant.list_languages())
    b = enchant.Broker()
    print("# List available enchant brokers")
    print(b.describe())
    d = enchant.Dict("en_GB")
    # print(d.provider.name)
    # print(d.provider.file)
    return "Done"

Lambda 関数を呼び出した結果の出力は次のとおりです。

START RequestId: 7539245b-d3d6-11e6-b7e6-edc1dc8cbdd4 Version: $LATEST
# List available enchant dictionary languages
[]
# List available enchant brokers
[]
Dictionary for language 'en_GB' could not be found: DictNotFoundError
Traceback (most recent call last):
  File "/var/task/package_test.py", line 16, in lambda_handler
    d = enchant.Dict("en_GB")
  File "/var/task/enchant/__init__.py", line 558, in __init__
    _EnchantObject.__init__(self)
  File "/var/task/enchant/__init__.py", line 168, in __init__
    self._init_this()
  File "/var/task/enchant/__init__.py", line 565, in _init_this
    this = self._broker._request_dict_data(self.tag)
  File "/var/task/enchant/__init__.py", line 310, in _request_dict_data
    self._raise_error(eStr % (tag,),DictNotFoundError)
  File "/var/task/enchant/__init__.py", line 258, in _raise_error
    raise eclass(default)
DictNotFoundError: Dictionary for language 'en_GB' could not be found

END RequestId: 7539245b-d3d6-11e6-b7e6-edc1dc8cbdd4
REPORT RequestId: 7539245b-d3d6-11e6-b7e6-edc1dc8cbdd4  Duration: 1.03 ms   Billed Duration: 100 ms     Memory Size: 256 MB Max Memory Used: 16 MB

ご覧のとおりimport enchant、正常に動作しますが、辞書ファイルが見つかりません。

私は本当にこれに行き詰まっており、これを機能させる方法を見つけようとして6時間の大部分を費やしました。よろしくお願いします。

4

1 に答える 1