在 spaCy 中创建自定义命名实体
如果 spaCy 内置的命名实体还不够用,您可以使用 spaCy 的 entity_ruler 管道组件自定义实体。
entity_ruler 组件允许您创建自己的实体,并将其加入 spaCy 的 pipeline。
首先使用 nlp.add_pipe() 将该组件添加到现有 pipeline 中,并将其放在 "ner" 组件之前,以便优先应用您的规则。add_pipe() 会返回它所添加的组件。
随后,您可以对该组件调用 add_patterns(),并传入包含要标注为实体的文本 pattern 的字典。
鉴于 Acme 是一家科技公司,您决定将模式 "smartphone" 标注为 "PRODUCT" 实体标签。
spaCy 已导入,nlp 已加载 en_core_web_sm 模型。由于修改 pipeline 不会影响已存在的 doc,在新组件就位后,您将使用 call_4_channel_2.wav 的转写文本重新创建 doc,对应的file。
本练习是课程的一部分
Python 语音语言处理
练习说明
- 将
"entity_ruler"组件添加到nlp的 pipeline 中,置于"ner"组件之前,并将其保存为ruler。 - 将
"smartphone"作为"pattern"键的取值添加。 - 打印
doc中包含的实体属性。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# Add an entity_ruler component to the pipeline, before ner
ruler = nlp.add_pipe(____, before=____)
# Define pattern for new entity
ruler.add_patterns([{"label": "PRODUCT", "pattern": ____}])
# Recreate the doc so it uses the updated pipeline
doc = nlp(call_4_channel_2_text)
# Test new entity
for entity in doc.____:
print(entity.text, entity.label_)