Python 在云函数中使用带Punkt的TFIDFvectorier
我目前对Python 在云函数中使用带Punkt的TFIDFvectorier,python,google-cloud-functions,nltk,tmp,tfidfvectorizer,Python,Google Cloud Functions,Nltk,Tmp,Tfidfvectorizer,我目前对TfidfVectorizer的理解是,在对输入数据进行转换之前,需要运行nltk.download(“punkt”),因为所有默认标记器都可以在punkt中使用。目前,由于我在云函数中使用了tfidfvectorier,所以我在云函数容器中运行nltk.download(“punkt”),该容器将punkt下载到/tmp。我的问题是,我不能保证每次调用Google Cloud函数都能访问相同的文件系统内容,因为“对同一函数的后续调用有时会在不同的容器中执行,因此它们会有不同的/tmp装
TfidfVectorizer
的理解是,在对输入数据进行转换之前,需要运行nltk.download(“punkt”)
,因为所有默认标记器都可以在punkt
中使用。目前,由于我在云函数中使用了tfidfvectorier
,所以我在云函数容器中运行nltk.download(“punkt”)
,该容器将punkt
下载到/tmp
。我的问题是,我不能保证每次调用Google Cloud函数都能访问相同的文件系统内容,因为“对同一函数的后续调用有时会在不同的容器中执行,因此它们会有不同的/tmp
装载。因此,不能使用/tmp
在函数之间进行通信”(来自)。这导致在任何时候切换容器时都需要重新下载punkt
,这会显示在my Cloud函数的日志中
我尝试从english.pickle
创建一个反序列化的标记器,它是punkt
的一部分。即使将此自定义标记器的tokenize
函数作为tokenizer
传递到TfidVectorizer
时,由于缺少punkt
下载,输入数据的转换最终也会失败
有没有办法将
punkt
下载到Python的可用内存中,这样它就不会存储在文件系统中,在切换容器时也不会被擦除?似乎我需要将punkt
下载到文件系统中,而不管我是传入自定义标记器还是让TfidfVectorizer
选择自己的默认标记器。您当然可以将文件下载到/tmp,并期望在那里看到它们,以便将来使用相同服务器实例的函数调用。您无法保证将使用哪个服务器实例来处理任何给定事件。服务器实例将在云功能认为合适时重用,但它也可以在没有警告的情况下取消分配服务器实例
但您可以做的只是在执行任何操作之前检查您想要的文件是否已经存在。如果文件存在,则无需下载-只需使用该文件即可。如果不存在,则执行下载