1

我正在尝试通过 web 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

但是,我得到以下依赖树

依赖树

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

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

4

1 回答 1

1

parser组件en_core_web_sm依赖于组件,因此tok2vec您需要在运行tok2vec之前doc运行parser解析器才能获得正确的输入。

doc = nlp2.get_pipe("tok2vec")(doc)
doc = nlp2.get_pipe("parser")(doc)
于 2021-09-17T07:05:42.337 回答