首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chaquopy无法下载NLTK资源

Chaquopy无法下载NLTK资源
EN

Stack Overflow用户
提问于 2019-05-23 22:25:38
回答 1查看 317关注 0票数 1

我正在尝试使用android上的chaquopy工具实时下载nltk所需的软件包。

我试图将模型下载到一个特定的数据目录中,如下所示:

代码语言:javascript
复制
from android.os import Bundle
from android.support.v7.app import AppCompatActivity
from activity import R
from com.chaquo.python import Python
from java import jvoid, Override, static_proxy
import nltk
import os

class MainActivity(static_proxy(AppCompatActivity)):
    @Override(jvoid, [Bundle])
    def onCreate(self, state):
        AppCompatActivity.onCreate(self, state)
        self.setContentView(R.layout.activity_main)
        download_dir = "{}/nltk".format(Python.getPlatform().getApplication().getFilesDir())
        if not os.path.exists(download_dir):
            os.mkdir(download_dir)
        os.environ['NLTK_DATA'] = download_dir
        print('Download Dir: {}'.format(download_dir))
        #print(nltk.__version__)
        #dl = nltk.downloader.Downloader('http://nltk.org/nltk_data/')
        #dl.download('punkt', download_dir=download_dir)
        nltk.download('punkt')
        self.findViewById(R.id.text_box_1).setText(str(nltk.word_tokenize("Hello Python")))

我收到以下错误,因为客户端无法找到或下载所需的包:

E/AndroidRuntime:致命异常:主进程:进程,PID: 22186 java.lang.RuntimeException:无法启动活动ComponentInfo{/utils.Utils.MainActivity}:com.chaquo.python.PyException: LookupError:

代码语言:javascript
复制
  Resource [93mpunkt[0m not found.
  Please use the NLTK Downloader to obtain the resource:

  [31m>>> import nltk
  >>> nltk.download('punkt')
  [0m
  For more information see: https://www.nltk.org/data.html

  Attempted to load [93mtokenizers/punkt/PY3/english.pickle[0m

  Searched in:
    - '/usr/local/nltk_data'
    - '/usr/local/share/nltk_data'
    - '/usr/local/lib/nltk_data'
    - '/usr/share/nltk_data'
    - '/usr/local/share/nltk_data'
    - '/usr/lib/nltk_data'
    - '/usr/local/lib/nltk_data'
    - ''
**********************************************************************

    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3121)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3257)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:81)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1935)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7116)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:925)
 Caused by: com.chaquo.python.PyException: LookupError: 
**********************************************************************
  Resource [93mpunkt[0m not found.
  Please use the NLTK Downloader to obtain the resource:

  [31m>>> import nltk
  >>> nltk.download('punkt')
  [0m
  For more information see: https://www.nltk.org/data.html

  Attempted to load [93mtokenizers/punkt/PY3/english.pickle[0m

  Searched in:
    - '/usr/local/nltk_data'
    - '/usr/local/share/nltk_data'
    - '/usr/local/lib/nltk_data'
    - '/usr/share/nltk_data'
    - '/usr/local/share/nltk_data'
    - '/usr/lib/nltk_data'
    - '/usr/local/lib/nltk_data'
    - ''
**********************************************************************

    at <python>.nltk.data.find(data.py:701)
    at <python>.nltk.data._open(data.py:995)
    at <python>.nltk.data.load(data.py:870)
    at <python>.nltk.tokenize.sent_tokenize(__init__.py:104)
    at <python>.nltk.tokenize.word_tokenize(__init__.py:143)
    at <python>.utils.Utils.onCreate(Utils.py:23)
    at <python>.chaquopy_java.call(chaquopy_java.pyx:283)
    at <python>.chaquopy_java.Java_com_chaquo_python_PyObject_callAttrThrows(chaquopy_java.pyx:255)
    at com.chaquo.python.PyObject.callAttrThrows(Native Method)
    at com.chaquo.python.PyObject._chaquopyCall(PyObject.java:222)
    at utils.Utils.MainActivity.onCreate(MainActivity.java:24)
    at android.app.Activity.performCreate(Activity.java:7698)
    at android.app.Activity.performCreate(Activity.java:7687)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3096)
        ... 11 more

我知道线程:查克比代码在哪个目录中搜索在Android应用程序代码的Python代码中导入的Python包?,它似乎是一种类似的情况,但并没有解决我的问题。

EN

回答 1

Stack Overflow用户

发布于 2019-05-24 20:26:40

尝试更新到Chaqu皮4.0.0或更高版本。这些版本将HOME环境变量设置为应用程序的文件目录,NLTK将在那里自动创建一个nltk_data子目录。这样就不再需要使用NLTK_DATA环境变量或download_dir参数了,并且应该删除所有这些代码。

(如果您已经在使用Chaquopy 4.0.0或更高版本,请在您的Chaquopy和NLTK版本中添加一个注释。)

由于仿真器错误,您可能需要在循环中调用nltk.download,如这个答案中所述。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56283660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档