Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在云函数中使用带Punkt的TFIDFvectorier_Python_Google Cloud Functions_Nltk_Tmp_Tfidfvectorizer - Fatal编程技术网

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

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