NLTK中CoreNLPNERTagger初始化时encoding参数重复赋值错误解决
解决 TypeError: init() got multiple values for keyword argument 'encoding'
这个错误的核心原因有两个:要么是你用错了Stanford Tagger的类,要么是参数传递方式不符合该类的构造方法要求,咱们一步步来解决:
第一步:确认你要用的Tagger类型
你加载的english-left3words-distsim.tagger是**词性标注(POS Tagging)的模型,但你导入的CoreNLPNERTagger是用于命名实体识别(NER)**的类——这俩是完全不同的工具,用错类自然会出问题。
如果你确实是要做词性标注,应该导入StanfordPOSTagger而非CoreNLPNERTagger。
第二步:正确初始化StanfordPOSTagger
对于StanfordPOSTagger,你可以直接按以下方式传递参数(包括encoding),完全符合方法的参数规则:
from nltk.tag.stanford import StanfordPOSTagger # 初始化词性标注器 english_postagger = StanfordPOSTagger( RESOURCES_DIR + 'jars/english-left3words-distsim.tagger', RESOURCES_DIR + 'jars/stanford-postagger.jar', encoding='utf-8' )
如果你确实需要用CoreNLPNERTagger(NER任务)
那你得先换成对应的NER模型(比如english.all.3class.distsim.crf.ser.gz),同时注意参数顺序——encoding是第四个参数,你可以这样写:
from nltk.tag.stanford import CoreNLPNERTagger # 初始化NER标注器 english_nertagger = CoreNLPNERTagger( RESOURCES_DIR + 'jars/english.all.3class.distsim.crf.ser.gz', RESOURCES_DIR + 'jars/stanford-ner.jar', encoding='utf-8' )
(注意这里的jar包是stanford-ner.jar,不是词性标注用的那个jar)
为什么会触发这个错误?
在你原来的代码里,CoreNLPNERTagger的构造方法第三个位置参数是java_options,而你直接传递了encoding='utf-8'作为关键字参数。部分NLTK版本的参数解析逻辑会把这个操作判定为“重复赋值”——既通过位置参数给某个变量传了值,又通过关键字参数重复传值,于是就抛出了这个TypeError。
内容的提问来源于stack exchange,提问作者Swathi Krishna
相关产品推荐
相关产品推荐

