运行 spacy 的预初始化 doc 对象上的依赖解析器

Run dependency parser on pre-initialized doc object of spacy

我正在尝试通过网络 API.

将 spacy 的依赖解析器合并到 java 中的遗留代码中

所有其他组件标记器、标记器、merged_words、NER 都是从遗留 NLP 代码完成的。我只对应用依赖解析器和 spacy 3 的依赖规则匹配器感兴趣。

我试过以下方法

  1. 正在使用 https://spacy.io/api/doc#init 创建一个新的文档对象。
from spacy.tokens import Doc
sent=["The heating_temperature was found to be 500 C"]
words=["The","heating_temperature", "was", "found", "to", "be", "500", "C"]
spaces=[True,True,True,True,True,True,True,False]
tags=["DT","NN","VBD","VBN","TO","VB","CD","NN"]
ents=["O","I-PARAMETER","O","O","O","O","I-VALUE","O"]
doc = Doc(nlp.vocab, words=words,spaces=spaces, tags=tags, ents=ents)
  1. 创建一个只有解析器的 NLP 管道
#can use nlp.blank too
nlp2 = spacy.load("en_core_web_sm", exclude=['attribute_ruler', 'lemmatizer', 'ner', "parser","tagger"])
pipeWithParser = nlp2.add_pipe("parser", source=spacy.load("en_core_web_sm"))
processed_dep = pipeWithParser(doc) #refer similar example in https://spacy.io/api/tagger#call

但是,我得到以下依赖关系树

dependency tree

其中每个单词都是与第一个单词的 nmod 关系。

我错过了什么? 如果需要,我也可以使用 spacy 的标记器。我尝试使用上述类似方法包括标记器,但所有标记都被标记为 'NN'

en_core_web_sm中的parser组件依赖于tok2vec组件,所以需要在doc之前运行tok2vec 运行宁 parser 让解析器有正确的输入。

doc = nlp2.get_pipe("tok2vec")(doc)
doc = nlp2.get_pipe("parser")(doc)