python 스크립트 및 chaquopy를 통해 Android에서 stanfordtagger 용 java.exe를 시작할 수 없습니다.

Aug 28 2020

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"

답변

1 mhsmith Aug 28 2020 at 13:41

안타깝게도이 접근 방식이 작동하려면 훨씬 더 많은 작업을 수행해야합니다. java실행 파일 뿐만 아니라 완전한 JRE를 제공해야하며 Windows가 아닌 Android 용으로 빌드되어야합니다. 이 작업을 수행하는 쉬운 방법을 알지 못하므로 다음과 같은 다른 옵션을 살펴 보는 것이 좋습니다.

  • app/libs디렉토리에 JAR을 추가하고 Java 또는 Kotlim에서 호출하십시오.
  • 또는 단순히 다른 태거를 사용하십시오.