如何仅选择从空间实体提取的第一个实体?

2024-10-05 13:17:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用以下代码从DataFrame中可用的文本中提取实体

for i in df['Text'].to_list():

    doc = nlp(i)
    for entity in doc.ents:
        if entity.label_ == 'GPE':

我需要将第一个GPE的文本与其对应的文本列一起存储。例如,如果下面是列df['Text']中索引0处的文本

Match between USA and Canada was postponed

然后,我只需要另一列中的第一个位置(USA),例如文本对应索引处的df['Place'],即0df['Place']在DataFrame中不可用意味着将在赋值时创建它。我尝试了以下代码。但它用它能找到的第一个值填充整个列

for i in df['Text'].to_list():

    doc = nlp(i)
    for entity in doc.ents:
        if entity.label_ == 'GPE':
            df['Place'] = (entity.text)

我还尝试用e_list.append((entity.text))在列表中附加文本,但它会附加在文本中可以找到的所有实体。 有人可以帮助我如何只在相应的索引中存储第一个实体吗。多谢各位


Tags: to代码textin文本实体dataframedf
1条回答
网友
1楼 · 发布于 2024-10-05 13:17:41

您可以使用Text列上的Series.apply获取每个条目的所有实体,如

df['Place'] = df['Text'].apply(lambda x: [entity.text for entity in nlp(x).ents if entity.label_ == 'GPE'])

如果您只想从每个条目中获取第一个实体,请使用

df['Text'].apply(lambda x: ([entity.text for entity in nlp(x).ents if entity.label_ == 'GPE'] or [''])[0])

以下是一个测试片段:

import spacy
import pandas as pd
df = pd.DataFrame({'Text':['Match between USA and Canada was postponed', 'No ents']})
df['Text'].apply(lambda x: [entity.text for entity in nlp(x).ents if entity.label_ == 'GPE'])
# => 0    [USA, Canada]
#    1               []
#    Name: Text, dtype: object
df['Text'].apply(lambda x: ([entity.text for entity in nlp(x).ents if entity.label_ == 'GPE'] or [''])[0])
# => 0    USA
#    1       
#    Name: Text, dtype: object

相关问题 更多 >

    热门问题