【解决】langchain框架加载文件报错 BadZipFile: File is not a zip file 或者 No such file or directory

说在前面

最近在使用langchain框架来学习一些ai应用的开发,在调用下面的方法读取markdown文件时遇到了一个奇怪的报错:
代码如下:

from langchain_community.document_loaders.markdown import UnstructuredMarkdownLoader

loader = UnstructuredMarkdownLoader("..//Introduction.md")
md_pages = loader.load()

报错信息如下:

BadZipFile: File is not a zip file

因为本身要读取的文档是markdown格式,这里却反馈文件不是压缩文件。

解决思路

通过错误堆栈分析,问题正式出在了NLTK数据包自动下载的环节,其中正有一句话是

//...
nltk.download("averaged_perceptron_tagger_eng", quiet=True)
//...
modified_name = "/".join(pieces[:i] + [pieces[i] + ".zip"] + pieces[i:])

我的猜想是他执行download方法,然后失败了(因为需要科学上网),然后去找下载的zipfile的时候报的错误,不管怎么样,问题出在NLTK数据包自动下载环节。

我中间尝试了

import nltk
nltk.download('punkt')       # 分词必需(约 40MB)
nltk.download('stopwords')   # 停用词(约 1MB)

再或者将相关文件下载到指定目录下

python -m nltk.downloader -d "F:\nltk_data" punkt averaged_perceptron_tagger
当然,如果使用上述方式能下载成功,请记得将路径加入到nltk的path
import nltk
nltk.data.path.append(r"F:\nltk_data")

这两种方式最终都没能成功,明明有在科学上网,但是速度出奇的慢,索性我也不等了,直接去github上下载了下来,以要下载的punkt为例,路径是:https://github.com/nltk/nltk_data/tree/gh-pages/packages/tokenizers
然后挨个下载以后,放到了对应的位置。
那么放到哪里呢?

import nltk
print(nltk.data.path)

打印出来的路径随便选择一个即可,或者你手动指定一个

import nltk
nltk.data.path.append(r"F:\nltk_data")

在这里插入图片描述
那我要是不能科学上网呢?
我发现即便是科学上网了直接下载压缩包也会失败,如果大家真有需求,可以留言,我帮你下载放到个百度网盘这种的地方。

再次报错

将文件都放到指定位置又报了一个错,最后定位到问题是zip文件没有解压缩,解压缩之后就可以正常运行了。最后的样子大概是这样:
在这里插入图片描述

说到最后

这一系列问题算上问大模型,和自己思考,前后用了小半天,挺尴尬的,如果你遇到相同的问题,希望可以帮助你快速解决问题。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值