Ich kann java.exe für stanfordtagger in Android nicht über Python-Skript und Chaquopy starten

Aug 28 2020

Ich möchte mein Python-Skript starten, das Textdaten mit nltk und stanford tagger analysiert. Das Problem ist, dass ich keine Berechtigung habe, die kopierte java.exe zu starten.

Der Code zum Starten des Stanfordtagger lautet:

    #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")

Dies ist der Fehler:

    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)

Wie kann ich dieses Problem lösen? Oder gibt es eine andere Option, um auf die kopierte Datei java.exe zuzugreifen (von: "C: \ Programme \ Java \ jdk-14 \ bin \ java.exe") in die Richtung: lib_dir = join (Verzeichnisname ( Datei ), "Bibliotheksdateien" / " )) Fenster im Python-Skript?

java_path = fct.lib_dir + "java.exe"

Antworten

1 mhsmith Aug 28 2020 at 13:41

Leider müssten Sie viel mehr tun, damit dieser Ansatz funktioniert. Sie müssten eine vollständige JRE bereitstellen, nicht nur die javaausführbare Datei, und sie müsste für Android und nicht für Windows erstellt werden. Mir ist keine einfache Möglichkeit bekannt, dies zu tun. Ich empfehle Ihnen daher, andere Optionen zu prüfen, z.

  • Fügen Sie die JAR Ihrem app/libsVerzeichnis hinzu und rufen Sie sie von Java oder Kotlim aus auf
  • Oder verwenden Sie einfach einen anderen Tagger.