因此,这是 nltk 上下文中的问题。在包含 nltk.download 行之一后:
nltk.download('popular') or nltk.download('punkt') or nltk.download('all')
我得到了这个堆栈跟踪:
2020-08-26 13:33:45.742 19765-19765/com.pro.useyournotes E/ExceptionTag: com.chaquo.python.PyException: BadZipFile: File is not a zip file com.chaquo.python.PyException: BadZipFile: File is not a zip file at <python>.zipfile._RealGetContents(zipfile.py:1335) at <python>.zipfile.__init__(zipfile.py:1268) at <python>.nltk.data.__init__(data.py:936) at <python>.nltk.compat._decorator(compat.py:41) at <python>.nltk.data.__init__(data.py:396) at <python>.nltk.compat._decorator(compat.py:41) at <python>.nltk.data.find(data.py:544) at <python>.nltk.data.find(data.py:557) at <python>.nltk.tag.perceptron.__init__(perceptron.py:168) at <python>.nltk.tag._get_tagger(__init__.py:106) at <python>.nltk.tag.pos_tag_sents(__init__.py:178) at <python>.uyn_pre_processing.pre_processing(uyn_pre_processing.py:88) at <python>.uyn_analysis_workflow.analyse_new_data(uyn_analysis_workflow.py:62) at <python>.uyn_main.main(uyn_main.py:266) 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:7136) at android.app.Activity.performCreate(Activity.java:7127) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 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:1808) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
发生该错误的代码是:
tagged_words=nltk.pos_tag_sents(tokenized_sentences) at <python>.uyn_pre_processing.pre_processing(uyn_pre_processing.py:88)
我也不知道 nltk 文件放在哪里。以前我刚开始用 python 编程的时候只记得用过import nltk命令。希望有人已经找到了使用 nltk 的解决方案。
这个错误是由于 nltk 在试图加载某些数据文件时遇到了问题。具体来说,BadZipFile: File is not a zip file 的错误通常表示 NLTK 尝试读取一个被认为是 zip 文件的文件,但该文件实际上并不是一个有效的 zip 文件。这可能是由于下载的文件损坏或格式不正确。
nltk
BadZipFile: File is not a zip file
这里有一些步骤可以帮助你解决这个问题:
打开 Python 解释器并运行以下代码,强制 NLTK 重新下载数据集: python import nltk nltk.download('popular', force=True) # 或者使用 'punkt' 或 'all'
python import nltk nltk.download('popular', force=True) # 或者使用 'punkt' 或 'all'
检查 NLTK 数据路径:
python import nltk print(nltk.data.path)
确保你检查这些路径下的文件。删除可能损坏的文件,并确保它们是有效的 zip 文件。
手动删除文件:
如果你在 nltk.data.path 中找到的目录下有损坏的文件,可以手动删除它们。然后再次运行下载命令来重新获取它们。
nltk.data.path
查看 Python 环境:
如果你使用的是虚拟环境,确保该环境中的 NLTK 安装正确。如果不确定,可以尝试在全局 Python 环境中运行相同的代码。
更新 NLTK:
确保你使用的是最新版本的 NLTK。可以使用 pip 来更新: bash pip install --upgrade nltk
bash pip install --upgrade nltk
检查网络连接:
这是一个示例代码,演示如何重新下载并检查 NLTK 数据:
import nltk # 打印 NLTK 数据路径 print("NLTK Data Path:", nltk.data.path) # 尝试重新下载数据集 try: nltk.download('popular', force=True) # 或者 'punkt', 'all' except Exception as e: print("Download error:", e)
执行这些步骤后,再次尝试运行 nltk.pos_tag_sents(tokenized_sentences)。如果问题仍然存在,请确保在运行代码的环境中没有任何与文件操作相关的问题。希望这能帮助你解决问题!如果还有其他问题,请随时问我。
nltk.pos_tag_sents(tokenized_sentences)