Ich kann java.exe für stanfordtagger in Android nicht über Python-Skript und Chaquopy starten
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
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.