小能豆

Chaquopy 与 nltk 的问题及下载

py

因此,这是 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 的解决方案。


阅读 34

收藏
2024-11-05

共1个答案

小能豆

这个错误是由于 nltk 在试图加载某些数据文件时遇到了问题。具体来说,BadZipFile: File is not a zip file 的错误通常表示 NLTK 尝试读取一个被认为是 zip 文件的文件,但该文件实际上并不是一个有效的 zip 文件。这可能是由于下载的文件损坏或格式不正确。

解决方法

这里有一些步骤可以帮助你解决这个问题:

  1. 重新下载 NLTK 数据
  2. 打开 Python 解释器并运行以下代码,强制 NLTK 重新下载数据集:
    python import nltk nltk.download('popular', force=True) # 或者使用 'punkt' 或 'all'

  3. 检查 NLTK 数据路径

  4. 你可以使用以下代码找到 NLTK 数据存储的位置:
    python import nltk print(nltk.data.path)
  5. 确保你检查这些路径下的文件。删除可能损坏的文件,并确保它们是有效的 zip 文件。

  6. 手动删除文件

  7. 如果你在 nltk.data.path 中找到的目录下有损坏的文件,可以手动删除它们。然后再次运行下载命令来重新获取它们。

  8. 查看 Python 环境

  9. 如果你使用的是虚拟环境,确保该环境中的 NLTK 安装正确。如果不确定,可以尝试在全局 Python 环境中运行相同的代码。

  10. 更新 NLTK

  11. 确保你使用的是最新版本的 NLTK。可以使用 pip 来更新:
    bash pip install --upgrade nltk

  12. 检查网络连接

  13. 确保你的网络连接稳定,因为在下载文件时不稳定的网络可能会导致文件损坏。

示例代码

这是一个示例代码,演示如何重新下载并检查 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)。如果问题仍然存在,请确保在运行代码的环境中没有任何与文件操作相关的问题。希望这能帮助你解决问题!如果还有其他问题,请随时问我。

2024-11-05