这是我的代码:
from spacy.lang.en import English
nlp = English()
nlp.add_pipe(nlp.create_pipe('sentencizer'))
doc = nlp("The quick brown fox jumps over the lazy dog.")
for sent in doc.sents:
print(list(sent.root.children))
我希望sent.root.children
包含指向其他字词/句子片段的链接,例如lazy
或brown
,但它是一个空数组。为什么会这样?
答案 0 :(得分:2)
我认为这里的问题很简单:获取句子的根和它的子句需要依赖解析。这意味着您需要加载一个包含权重的模型来预测依赖关系。
在您的代码中,您只导入English
语言类,该语言类仅包含特定于语言的规则和标记生成器。您可以下载这样的默认小英语模型(或任何other options):
python -m spacy download en
然后,您可以使用spacy.load()
加载模型。在引擎盖下,这告诉spaCy找到安装为'en'
的模型,检查其元数据以初始化相应的语言类(English
),构建处理管道(解析器,标记器,NER),以及使权重可用以使spaCy能够进行预测。由于默认句子边界检测器使用依赖关系解析,因此它将被包含在内 - 因此无需手动将其添加到管道中。
刚刚测试了你的例子,它现在打印了一个根的孩子列表:
nlp = spacy.load('en')
doc = nlp("The quick brown fox jumps over the lazy dog.")
for sent in doc.sents:
print(list(sent.root.children))
# [fox, over, .]