Cómo obtener entidades de un texto y vincularlas con el ID del archivo fuente?
Tengo un archivo CSV con algunas columnas, incluyendo una columna de identificación y una columna de texto.
Archivo de origen de ejemplo:
source_file
Me gustaría extraer el texto y la etiqueta de la entidad utilizando spaCy. Luego, escribir el texto de la entidad y la etiqueta en un dataframe con la identificación correspondiente de origen. Es muy posible que una oración contenga más de una entidad. Esas entidades deberían tener la misma identificación.
Pensé que usar la función “pd apply” es la mejor opción para hacer esto, pero obtengo un error. ¿Alguien puede decirme qué estoy haciendo mal?
df = pd.read_csv(r'data/test_data.csv')
nlp = spacy.load("nl_core_news_lg")
ner_entities = []
def get_entities(row):
entity_id = row['id']
text = row['text']
doc = nlp(text)
for ent in doc.ents:
ner_entities.append([entity_id, ent.text, ent.label_])
df.apply(lambda row: get_entities(row))
ner_df = pd.DataFrame(ner_entities, columns=['id', 'ent', 'label'])
merged_df = pd.merge(df, ner_df, on='id', how='outer')
Recibo el siguiente mensaje de error:
error message
davy.ai
Solución
Hay algunos problemas en el código proporcionado:
Text
debe sertext
en la línea 8 (doc = nlp(text)
).get_entities
necesita devolver la lista de entidades extraídas.df.apply
con una función lambda, simplemente podemos recorrer las filas del dataframe utilizandodf.iterrows()
.Aquí está el código corregido:
Este código debería extraer correctamente las entidades del texto y crear un nuevo dataframe que incluya las entidades con sus respectivos ids.