下面是我的代码:
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
,但它是一个空数组。这一切为什么要发生?
发布于 2018-02-25 10:28:34
我认为这里的问题很简单:获取句子的根及其子句需要依赖关系解析。这意味着您需要加载一个模型,该模型包含用于预测依赖关系的权重。
在您的代码中,您只需要导入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, .]
https://stackoverflow.com/questions/48970035
复制