提取 SpaCy DATE 实体并添加到新的 pandas 列

Extracting SpaCy DATE entities and adding to new pandas column

我有一组社交媒体评论,我想根据它们对日期的参考来探索这些评论。为此,我使用 SpaCy 的命名实体识别器来搜索 DATE 个实体。我在 comment 列下名为 df_test 的 pandas 数据框中有评论。我想向此数据框添加一个新列 dates,该数据框包含在每条评论中找到的所有日期实体。有些评论不会包含任何日期实体,在这种情况下,应在此处添加 None。 例如:

comment
'bla bla 21st century'
'bla 1999 bla bla 2022'
'bla bla bla'

应该是:

comment                        dates
'bla bla 21st century'         '21st century'
'bla 1999 bla bla 2022'        '1999', '2022'
'bla bla bla'                  'None'

基于Is their a way to add the new NER tag found in a new column?我尝试了列表方法:

date_label = ['DATE']
dates_list = []

def get_dates(row):
    comment = str(df_test.comment.tolist())
    doc = nlp(comment)
    for ent in doc.ents:
        if ent.label_ in date_label:
            dates_list.append([ent.text])
        else:
            dates_list.append(['None'])

df_test.apply(lambda row: get_dates(row))
date_df_test = pd.DataFrame(dates_list, columns=['dates'])

但是,这会产生一个比原始数据框更长的列,例如:

comment                        dates
'bla bla 21st century'         '21st century'
'bla 1999 bla bla 2022'        '1999'
'bla bla bla'                  '2022'
                               'None'

这不起作用,因为日期条目不再与其相应的注释匹配。我知道这是因为我在所有实体之间循环,但我不知道如何解决这个问题。有什么方法可以解决这个问题,以便我可以提取所有日期实体并以某种方式将它们连接到它们所在的评论以供以后分析?非常感谢任何帮助!

我使用这个函数找到了解决我自己问题的方法。

date_label = ['DATE']

def extract_dates(text):
    doc = nlp(text)
    results = [(ent.text, ent.label_) for ent in doc.ents if ent.label_ in date_label]
    return results

df_test['dates'] = df_test['comment'].apply(extract_dates)

我希望这可以帮助遇到类似问题的任何人。