6

我正在运行 pytextrank 处于第二阶段,我从 spaCy 收到此错误:

File "C:\Anaconda3\lib\pathlib.py", line 371, in wrapped return strfunc(str(pathobj), *args)

FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Anaconda3\\lib\\site-packages\\spacy\\data\\en\\vocab\\strings.json'

我寻找了strings.json,但没有这样的东西。

有趣的是,当我使用以下错误代码安装 spaCy 时,存在与 pathlib.py 类似的错误:

OSError: Symbolic link privilege not held

你们有什么想法吗?谢谢

4

2 回答 2

9

最后,我可以在stackoverflow中回答问题。我遇到了同样的问题,但最终解决了。这是我的建议:

1. 从 python -m spacy 或 github 下载 spaCy 模型

两种方式都非常方便。

1)。来自python spacy:

python3 -m spacy download en

假设您使用的是 python3+,可以自动完成并生成新的模型包,您可以通过 import en 或使用导入spacy.load('en')

2)。来自 github

转移链接,选择最新版本并下载。

2.(如果你不使用 python -m 方式那么你想手动链接模型)链接你下载的模型

这是最重要的部分,您必须解压缩下载的 tar 或 gzip 文件,并获得一个文件夹,但这仍然不是您想要的链接路径。

.
├── en_core_web_md-1.2.1
│   ├── deps
│   │   ├── config.json
│   │   └── model
│   ├── meta.json
│   ├── ner
│   │   ├── config.json
│   │   └── model
│   ├── pos
│   │   ├── config.json
│   │   └── model
│   └── vocab
│       ├── gazetteer.json
│       ├── lexemes.bin
│       ├── oov_prob
│       ├── serializer.json
│       ├── strings.json
│       └── vec.bin

您必须将文件夹与结构链接。which spacy 将通过您的链接快捷方式名称链接该文件夹。

这是您需要的链接脚本:

base_path=`pwd`
sudo python3 -m spacy link ${base_path}/en_core_web_md-1.2.1 en_core_web --force

您可以在该文件夹旁边创建一个 .sh 文件并运行它。

而已!

于 2017-03-29T14:24:40.327 回答
1

当您将 spaCy 和模型安装到系统目录中时,通常会发生该Symbolic link privilege not held错误,但您的用户没有创建符号链接所需的权限。要解决此问题,请以管理员身份运行downloadlink再次运行,或者,如果不可能,请使用 avirtualenv将所有内容安装到用户目录中(有关此问题的更多信息,请参阅故障排除文档)。

从 v1.7.0 开始,spaCy 又名创建符号链接。目录中的快捷链接spacy/data。这样可以更轻松地将模型存储在您想要的任何位置,将它们安装为 Python 包并使用自定义名称加载它们,例如spacy.load('my_model').

在您的情况下可能发生的情况是 spaCy 由于权限错误而无法设置此链接,现在无法找到并加载模型 - 包括vocab/strings.json. (不过,spaCy 在这里失败的方式并不理想——这已经在 v1.7.3 中得到修复。)

由于模型已经安装,您所要做的就是为它创建一个新的符号链接(作为管理员,或者在 a 中virtualenv):

python -m spacy link en_core_web_sm en

(如果您下载了不同的模型,只需替换en_core_web_sm为该模型的名称。en是使用的快捷方式,可以是您想要的任何名称。)

编辑:如果您只想使用标记器而不关心模型,或者想使用一种尚未附带统计模型的受支持语言Language,您也可以只在 v1.1 中导入该类。 7.3:

from spacy.fr import French
nlp = French()
于 2017-03-28T14:51:54.373 回答