问题描述
我正在 Azure Synapse 笔记本中试验 NLTK。当我尝试运行 nltk.download('stopwords') 时,出现以下错误:
ValueError: I/O operation on closed file
Traceback (most recent call last):
File "/home/trusted-service-user/cluster-env/env/lib/python3.6/site-packages/nltk/downloader.py",line 782,in download
show(msg.message)
File "/home/trusted-service-user/cluster-env/env/lib/python3.6/site-packages/nltk/downloader.py",line 775,in show
subsequent_indent=prefix + prefix2 + " " * 4,File "/mnt/var/hadoop/tmp/nm-local-dir/usercache/trusted-service-user/appcache/application_1616860588116_0001/container_1616860588116_0001_01_000001/tmp/9026485902214290372",line 536,in write
super(UnicodeDecodingStringIO,self).write(s)
ValueError: I/O operation on closed file
如果我尝试只运行 nltk.download() 我会收到以下错误:
EOFError: EOF when reading a line
Traceback (most recent call last):
File "/home/trusted-service-user/cluster-env/env/lib/python3.6/site-packages/nltk/downloader.py",line 765,in download
self._interactive_download()
File "/home/trusted-service-user/cluster-env/env/lib/python3.6/site-packages/nltk/downloader.py",line 1117,in _interactive_download
DownloaderShell(self).run()
File "/home/trusted-service-user/cluster-env/env/lib/python3.6/site-packages/nltk/downloader.py",line 1143,in run
user_input = input("Downloader> ").strip()
EOFError: EOF when reading a line
我希望有人可以帮助我了解可能导致此问题的原因以及解决方法。我找不到很多关于从这里去哪里的信息。
import nltk
nltk.download('stopwords')
更新 我最终向 Microsoft 提出了支持请求,这是他们的回应:
Synapse 不支持任意 shell 脚本 将下载NLTK的相关模型语料
他们建议我使用 sc.addFile,我最终开始工作了。因此,如果其他人发现了这一点,这就是我所做的。
- 在此处下载 NLTK 停用词:http://nltk.org/nltk_data/
- 将停用词上传到存储中的以下文件夹:abfss://
@ .dfs.core.windows.net/synapse/workspaces/ /nltk_data/corpora/stopwords/ - 运行以下代码以导入它们
.
import os
import sys
import nltk
from pyspark import SparkFiles
#add stopwords from storage
sc.addFile('abfss://<file_system>@<account_name>.dfs.core.windows.net/synapse/workspaces/<workspace_name>/nltk_data/',True)
#append path to NLTK
nltk.data.path.append(SparkFiles.getRootDirectory() + '/nltk_data')
nltk.corpus.stopwords.words('english')
谢谢!
解决方法
我最终向 Microsoft 提出了支持请求,这是他们的回应:
Synapse 不支持任意 shell 脚本 将下载NLTK的相关模型语料
他们建议我使用 sc.addFile,我最终开始工作了。因此,如果其他人发现了这一点,这就是我所做的。
- 在此处下载 NLTK 停用词:http://nltk.org/nltk_data/
- 将停用词上传到存储中的 foll0woing 文件夹:abfss://
@ .dfs.core.windows.net/synapse/workspaces/ /nltk_data/corpora/stopwords/ - 运行以下代码以导入它们
....
import os
import sys
import nltk
from pyspark import SparkFiles
#add stopwords from storage
sc.addFile('abfss://<file_system>@<account_name>.dfs.core.windows.net/synapse/workspaces/<workspace_name>/nltk_data/',True)
#append path to NLTK
nltk.data.path.append(SparkFiles.getRootDirectory() + '/nltk_data')
nltk.corpus.stopwords.words('english')
谢谢!