我正在尝试从GCS存储桶下载PDF文件并将内容读入内存。当使用Langchain与python时,我可以使用GCSDirectoryLoader来读取bucket中的所有文件和pdf文本。NodeJ的Langchain没有GCSDirectoryLoader或PDF文件的webloader。当下载文件时,我得到一个以二进制表示为内容的文档。将pdf内容从GCS存储桶下载到内存中的最佳方法是什么?
5sxhfpxr1#
将其作为社区wiki共享,以造福他人如@K J所述,任何东西都可以加载到内存中,但是要为PDF处理下载的任何用途,需要是一个十进制地址的文件(从位置0到文件末尾的全长),因此在/Length处以十进制字节数写入文件结束标记(这就是PDF在工作时可以查找文件的方式),因此您需要拥有或构建一个内存文件系统。然后下一个进程可以从filetype.pdf读取文件进行转换
nnsrf1az2#
我最终为GCS桶做了以下工作:
documentBucket.getFiles() ... const [buffer] = await file.download(); const options = { normalizeWhitespace: true }; // Using 3rd part lib => pdf.js-extract await pdfExtract.extractBuffer(buffer, options) .then((data) => { ... }
Google Drive:
const drive = google.drive({ version: 'v3', auth, }) const resp = await drive.files.get({ fileId: file.id, alt: "media" }, {responseType: 'arraybuffer'}); const buffer = new Buffer.from(resp.data); const options = { normalizeWhitespace: true }; // Using 3rd part lib => pdf.js-extract await pdfExtract.extractBuffer(buffer, options) .then((data) => { ... }
API的文档可以更清楚,我最终需要的是将responseType设置为'arrayBuffer',我在文档中找不到。我仍然会花一些时间来确定是否真的需要第三方自由党。但这对我来说优先级较低
2条答案
按热度按时间5sxhfpxr1#
将其作为社区wiki共享,以造福他人
如@K J所述,
任何东西都可以加载到内存中,但是要为PDF处理下载的任何用途,需要是一个十进制地址的文件(从位置0到文件末尾的全长),因此在/Length处以十进制字节数写入文件结束标记(这就是PDF在工作时可以查找文件的方式),因此您需要拥有或构建一个内存文件系统。然后下一个进程可以从filetype.pdf读取文件进行转换
nnsrf1az2#
我最终为GCS桶做了以下工作:
Google Drive:
API的文档可以更清楚,我最终需要的是将responseType设置为'arrayBuffer',我在文档中找不到。
我仍然会花一些时间来确定是否真的需要第三方自由党。但这对我来说优先级较低