Impossible de démarrer java.exe pour stanfordtagger dans Android via un script python et chaquopy

Aug 28 2020

Je veux démarrer mon script python, qui analyse les données de texte avec nltk et stanford tagger. Le problème est que je n'ai pas la permission de démarrer le java.exe copié.

Le code pour démarrer le stanfordtagger est:

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

Voici l'erreur:

    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)

Comment puis-je résoudre ce problème? Ou existe-t-il une autre option pour accéder au fichier java.exe copié (de: "C: \ Program Files \ Java \ jdk-14 \ bin \ java.exe" vers la direction: lib_dir = join (dirname ( fichier ), "library_files / " )) windows dans le script python?

java_path = fct.lib_dir + "java.exe"

Réponses

1 mhsmith Aug 28 2020 at 13:41

Malheureusement, vous devrez faire beaucoup plus pour que cette approche fonctionne. Vous auriez besoin de fournir un JRE complet, pas seulement l' javaexécutable, et il devrait être construit pour Android, pas Windows. Je ne connais aucun moyen simple de le faire, je vous recommande donc de regarder d'autres options, telles que:

  • Ajoutez le JAR à votre app/libsrépertoire et appelez-le depuis Java ou Kotlim
  • Ou utilisez simplement un autre tagueur.