值错误:nlp.AddPIPE(LanguageDetector(),Name=';Language_Detector';,Last=True)
问题描述
我在kaggel的下面的代码中发现了这个,每次我运行代码都会得到ValueError。 这是因为新版本的Spacy。请帮助 提前感谢
import scispacy
import spacy
import en_core_sci_lg
from spacy_langdetect import LanguageDetector
nlp = en_core_sci_lg.load(disable=["tagger", "ner"])
nlp.max_length = 2000000
nlp.add_pipe(LanguageDetector(), name='language_detector', last=True)
ValueError:[E966]nlp.add_pipe
现在接受已注册组件工厂的字符串名称,而不是可调用的组件。应为字符串,但在0x00000216BB4C8D30>;处获取了语言对象(名称:‘<;spacy_langdetect.spacy_langdetect.LanguageDetector_Detector’)。
如果您使用
nlp.create_pipe('name')
创建组件:删除nlp.create_pive并改为调用nlp.add_pipe('name')
。如果传入类似
TextCategorizer()
的组件:使用字符串名称调用nlp.add_pipe
,例如nlp.add_pipe('textcat')
。如果您正在使用定制组件:将修饰符
@Language.component
(用于功能组件)或@Language.factory
(用于类组件/工厂)添加到您的定制组件中,并为其指定一个名称,例如@Language.component('your_name')
。然后,您可以运行nlp.add_pipe('your_name')
将其添加到管道。
我已安装:
scispacy.version:‘0.4.0’
en_core_sci_lg版本:‘0.4.0’
Python_Version:3.8.5
space.版本:‘3.0.3’
解决方案
add_pipe
在v3中改变了工作方式;组件必须注册,然后只需使用它们的名称就可以添加到管道中。在本例中,您必须按如下方式包装LanguageDetector:
import scispacy
import spacy
import en_core_sci_lg
from spacy_langdetect import LanguageDetector
from spacy.language import Language
def create_lang_detector(nlp, name):
return LanguageDetector()
Language.factory("language_detector", func=create_lang_detector)
nlp = en_core_sci_lg.load(disable=["tagger", "ner"])
nlp.max_length = 2000000
nlp.add_pipe('language_detector', last=True)
您可以在the spaCy docs中阅读有关此操作的详细信息。
相关文章