使用Langchain NodeJS将PDF文本从GoogleCloudStorage下载到内存中

h43kikqp  于 2023-10-17  发布在  Node.js
关注(0)|答案(2)|浏览(142)

我正在尝试从GCS存储桶下载PDF文件并将内容读入内存。
当使用Langchain与python时,我可以使用GCSDirectoryLoader来读取bucket中的所有文件和pdf文本。
NodeJ的Langchain没有GCSDirectoryLoader或PDF文件的webloader。当下载文件时,我得到一个以二进制表示为内容的文档。
将pdf内容从GCS存储桶下载到内存中的最佳方法是什么?

5sxhfpxr

5sxhfpxr1#

将其作为社区wiki共享,以造福他人
如@K J所述,
任何东西都可以加载到内存中,但是要为PDF处理下载的任何用途,需要是一个十进制地址的文件(从位置0到文件末尾的全长),因此在/Length处以十进制字节数写入文件结束标记(这就是PDF在工作时可以查找文件的方式),因此您需要拥有或构建一个内存文件系统。然后下一个进程可以从filetype.pdf读取文件进行转换

nnsrf1az

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',我在文档中找不到。
我仍然会花一些时间来确定是否真的需要第三方自由党。但这对我来说优先级较低

相关问题