如何使用 spaCy 从只有 1 个命名实体的文本中提取句子?

How to extract sentences from one text with only 1 named entity using spaCy?

我有一个句子列表,我希望能够使用 spaCy 仅附加带有 1 个“PERSON”命名实体 的句子。我使用的代码如下:

test_list = []
for item in sentences: #for each sentence in 'sentences' list
  for ent in item.ents: #for each entity in the sentence's entities 
    if len(ent in item.ents) == 1: #if there is only one entity
      if ent.label_ == "PERSON": #and if the entity is a "PERSON"
        test_list.append(item) #put the sentence into 'test_list'

但后来我得到:

TypeError: object of type 'bool' has no len()

我做错了吗?我将如何完成这项任务?

你得到错误是因为 ent in item.ents returns 一个布尔结果,你无法得到它的长度。

你要的是

test_list = []
for item in sentences: #for each sentence in 'sentences' list
    if len(item.ents) == 1 and item.ents[0].label_ == "PERSON": #if there is only one entity and if the entity is a "PERSON"
        test_list.append(item) #put the sentence into 'test_list'

len(item.ents) == 1 检查句子中是否只检测到一个实体,item.ents[0].label_ == "PERSON" 确保第一个实体标签文本是 PERSON.

注意 and 运算符,两个条件都必须满足。