首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新启用spacy的解析器组件给出错误

重新启用spacy的解析器组件给出错误
EN

Stack Overflow用户
提问于 2020-04-13 05:36:07
回答 1查看 243关注 0票数 0

目前,我正试图通过在不需要时删除额外的spaCy组件并在以后启用它们来加快我的应用程序。我想出了这个密码。

代码语言:javascript
复制
import spacy
nlp = spacy.load("en_core_web_lg", disable=('ner', 'textcat'))
nlp.pipe_names

它给出了以下输出

代码语言:javascript
复制
['tagger', 'parser']

我必须执行一项任务,下面是代码片段

代码语言:javascript
复制
text = """Extracts the selected  layers in the specified area of interest.... """

doc = nlp(text)

def get_pos(remove_parser=True):
    if remove_parser: 
        nlp.remove_pipe("parser")

    for kw in keywords:
        doc = nlp(kw[0])
        tag_list = [(token.text, token.tag_) for token in doc]

    if remove_parser:
        nlp.add_pipe(nlp.create_pipe('parser'))

    return tag_list

result = get_pos(remove_parser=True)
nlp.pipe_names

所以我用get_pos调用remove_parser=True函数。它删除解析器组件,为nlp(kw[0])列表中的每个项运行keywords。循环结束后,我将返回parser组件,可以通过nlp.pipe_names命令的输出来验证该组件。我得到下面的输出

代码语言:javascript
复制
['tagger', 'parser']   

但是如果我在调用nlp("Hello World")函数之后调用get_pos函数。它造成了这个错误-

代码语言:javascript
复制
ValueError                                Traceback (most recent call last)
<ipython-input-29-320b76b1fe36> in <module>
----> 1 nlp("Hello World")

~\.conda\envs\keyword-extraction\lib\site-packages\spacy\language.py in __call__(self, text, disable, component_cfg)
    433             if not hasattr(proc, "__call__"):
    434                 raise ValueError(Errors.E003.format(component=type(proc), name=name))
--> 435             doc = proc(doc, **component_cfg.get(name, {}))
    436             if doc is None:
    437                 raise ValueError(Errors.E005.format(name=name))

nn_parser.pyx in spacy.syntax.nn_parser.Parser.__call__()

nn_parser.pyx in spacy.syntax.nn_parser.Parser.predict()

nn_parser.pyx in spacy.syntax.nn_parser.Parser.require_model()

ValueError: [E109] Model for component 'parser' not initialized. Did you forget to load a model, or forget to call begin_training()?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-14 13:33:25

您正在尝试向管道中添加一个空白/未经训练的解析器,而不是它所提供的解析器。相反,尝试disable_pipes(),这样可以更容易地保存组件并在稍后将其添加回:

代码语言:javascript
复制
disabled = nlp.disable_pipes(["parser"])
# do stuff
disabled.restore()

请参阅:https://spacy.io/api/language#disable_pipes

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61182101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档