在云函数中使用带Punkt的TFIDFvectorier

2024-05-14 11:07:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前对TfidfVectorizer的理解是,它需要在对输入数据进行转换之前运行nltk.download("punkt"),因为所有默认标记化器都可以在punkt中使用。目前,因为我在云函数中使用了TfidfVectorizer,所以我在云函数容器中运行nltk.download("punkt"),该容器将punkt下载到/tmp。我的问题是,我不能保证每次调用Google Cloud函数都能访问相同的文件系统内容,因为“对同一函数的后续调用有时会在不同的容器中执行,因此它们会有不同的/tmp装载。因此,不能使用/tmp在函数之间进行通信”(从this SO question)。这导致punkt需要在容器切换时重新下载,这会显示在my Cloud函数的日志中

我尝试创建一个从english.pickle反序列化的标记器,它是punkt的一部分。即使将此自定义标记器的tokenize函数作为tokenizer传递到TfidVectorizer时,由于缺少punkt下载,输入数据的转换最终也会失败

有没有办法将punkt下载到Python的可用内存中,这样它就不会存储在文件系统中,在切换容器时也不会被擦除?似乎我需要将punkt下载到文件系统中,而不管我是传入自定义标记器还是让TfidfVectorizer选择自己的默认标记器


Tags: 数据函数标记cloud内容sodownloadgoogle
1条回答
网友
1楼 · 发布于 2024-05-14 11:07:25

您当然可以将文件下载到/tmp,并期望在那里看到它们,以便将来使用相同服务器实例的函数调用。您无法保证将使用哪个服务器实例来处理任何给定事件。服务器实例将在云功能认为合适时重用,但它也可以在没有警告的情况下取消分配服务器实例

但您可以做的只是在执行任何操作之前检查您想要的文件是否已经存在。如果文件存在,则无需下载-只需使用该文件即可。如果不存在,则执行下载

相关问题 更多 >

    热门问题