【问题标题】:Can't start java.exe for stanfordtagger in android via python script and chaquopy无法通过 python 脚本和 chaquopy 在 android 中为 stanfordtagger 启动 java.exe
【发布时间】:2020-08-28 11:21:46
【问题描述】:

我想启动我的 python 脚本,它使用 nltk 和 stanford tagger 分析文本数据。 问题是我没有权限启动复制的 java.exe。

启动stanfordtagger的代码是:

    #set java path in environment variables
    java_path = fct.lib_dir + "java.exe"
    os.environ['JAVAHOME'] = java_path
    #load stanford NER
    sn = StanfordNERTagger(
    fct.lib_dir+"german.distsim.crf.ser.gz", 
    path_to_jar=fct.lib_dir+"stanford-ner.jar")

这是错误:

    com.chaquo.python.PyException: PermissionError: [Errno 13] Permission denied: '/data/user/0/com.pro.useyournotes/files/chaquopy/AssetFinder/app/library_files/java.exe'
        at <python>.subprocess._execute_child(subprocess.py:1702)
        at <python>.subprocess.__init__(subprocess.py:854)
        at <python>.nltk.internals.java(internals.py:132)
        at <python>.nltk.tag.stanford.tag_sents(stanford.py:113)
        at <python>.nltk.tag.stanford.tag(stanford.py:91)
        at <python>.uyn_pre_processing.get_tagged_stanford_corpus(uyn_pre_processing.py:185)
        at <python>.uyn_analysis_workflow.analyse_new_data(uyn_analysis_workflow.py:63)
        at <python>.uyn_main.main(uyn_main.py:268)
        at <python>.chaquopy_java.call(chaquopy_java.pyx:285)
        at <python>.chaquopy_java.Java_com_chaquo_python_PyObject_callAttrThrows(chaquopy_java.pyx:257)
        at com.chaquo.python.PyObject.callAttrThrows(Native Method)
        at com.chaquo.python.PyObject.callAttr(PyObject.java:209)
        at com.pro.useyournotes.MainActivity.getPythonHello(MainActivity.kt:70)
        at com.pro.useyournotes.MainActivity.onCreate(MainActivity.kt:59)
        at android.app.Activity.performCreate(Activity.java:7458)
        at android.app.Activity.performCreate(Activity.java:7448)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1286)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3409)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3614)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2199)
        at android.os.Handler.dispatchMessage(Handler.java:112)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

我该如何解决这个问题?或者是否有任何其他选项可以访问复制的 java.exe (从:"C:\Program Files\Java\jdk-14\bin\java.exe" 到方向:lib_dir = join(dirname(file ), "library_files/") ) python 脚本中的窗口?

java_path = fct.lib_dir + "java.exe"

【问题讨论】:

  • python 进程无法访问您尝试执行的文件。

标签: java python android stanford-nlp chaquopy


【解决方案1】:

不幸的是,您需要做更多工作才能使这种方法发挥作用。您需要提供完整的 JRE,而不仅仅是 java 可执行文件,而且它必须是为 Android 而不是 Windows 构建的。我不知道有什么简单的方法可以做到这一点,因此我建议您查看其他选项,例如:

  • 将 JAR 添加到您的 app/libs 目录并从 Java 或 Kotlim 调用它
  • 或者干脆使用不同的标记器。

【讨论】:

  • 这真的很糟糕,因为我正在结合这个和另一个标记器来优化我的结果。怎么可能用jar和kotlin开始ner标签分析?
  • 如果您的 build.gradle 文件的 dependencies 部分中有默认的“libs”行,如 here 所述,那么只需将 JAR 放在 app/libs 中就足够了,然后你就可以从你的 Kotlin 代码中访问它的 Java 类了。
  • 是的,我有默认的“libs”行,但我不知道如何访问 JAR 以及如何使用 ner_tagging 方法。
  • 我没有使用这个库的经验,但看起来有很多文档 herehere。我假设您的 JAR 已经内置了模型,在这种情况下,您可以直接转到 FAQ 问题"How can I achieve a single jar file deployment of the POS tagger?" 中的第 6 步。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 2021-09-03
相关资源
最近更新 更多