Spacy:如何获取所有描述名词的词?

mat*_*51 5 python nlp spacy

我是 spacy 和 nlp 的新手。

为了理解 spacy 是如何工作的,我想创建一个函数,它接受一个句子并返回一个字典、元组或列表,其中包含名词和描述它的词。

我知道 spacy 创建了一个句子树,并且知道每个单词的用法(显示为 displacy)。

但正确的方法是什么:

“一个大房间,里面有两个黄色的洗碗机”

到:

{名词:"房间",adj:"大"} {名词:"洗碗机",adj:"黄色",adv:"两个"}

或者任何其他解决方案,在一个可用的包中给我所有相关的词。

提前致谢!

pol*_*m23 10

这是DependencyMatcher的非常简单的使用。

import spacy
from spacy.matcher import DependencyMatcher

nlp = spacy.load("en_core_web_sm")

pattern = [
  {
    "RIGHT_ID": "target",
    "RIGHT_ATTRS": {"POS": "NOUN"}
  },
  # founded -> subject
  {
    "LEFT_ID": "target",
    "REL_OP": ">",
    "RIGHT_ID": "modifier",
    "RIGHT_ATTRS": {"DEP": {"IN": ["amod", "nummod"]}}
  },
]

matcher = DependencyMatcher(nlp.vocab)
matcher.add("FOUNDED", [pattern])

text = "A large room with two yellow dishwashers in it"
doc = nlp(text)
for match_id, (target, modifier) in matcher(doc):
    print(doc[modifier], doc[target], sep="\t")
Run Code Online (Sandbox Code Playgroud)

输出:

large   room
two dishwashers
yellow  dishwashers
Run Code Online (Sandbox Code Playgroud)

把它变成字典或者任何你想要的东西应该很容易。您可能还想修改它以将专有名词作为目标,或支持其他类型的依赖关系,但这应该是一个好的开始。

您可能还想查看名词块功能。