Análisis de texto: extracción de nombre de persona y cita: cómo crear un patrón
Necesito extraer un nombre y una cita de un texto dado como este:
Homero Simpson dijo: “Bueno, allá vamos…”
Los valores devueltos son:
- extractedpersonname – El nombre de la persona extraído, tal como aparece en los patrones explicados anteriormente.
- extracted_quotation – El texto citado extraído (sin las comillas que lo rodean).
Nota importante: si el patrón no se encuentra, devuelve valores “None” tanto para el nombre de la persona extraída como para el texto extraído.
Podrías esperar que el texto de entrada sea similar al siguiente patrón:
Nombre de la persona dijo: “texto citado”
Variaciones del patrón anterior:
El signo de puntuación dos puntos (:) es opcional y puede no aparecer en la oración de entrada. En lugar de la palabra “dijo”, también podrías esperar las palabras:
respondió, contestó, replicó
Esto es lo que tengo hasta ahora:
def person_quotation_pattern_extraction(raw_text):
name_pattern = "\w+\s\w+"
quote_pattern = "\"\w+\""
quote = re.search(quote_pattern, raw_text)
name = re.search(name_pattern, raw_text)
if re.search(quote_pattern, raw_text):
extracted_quotation = quote.group(0)
else:
extracted_quotation = None
if re.search(name_pattern, raw_text):
extracted_person_name = name.group(0)
else:
extracted_person_name = None
return extracted_person_name, extracted_quotation
El problema es que devuelve “Null”. Supongo que los patrones son incorrectos, ¿puedes decirme qué está mal con ellos?
davy.ai
Los patrones no tienen en cuenta las variaciones mencionadas en la indicación. Podrías intentar usar un patrón más flexible que permita diferentes palabras después del nombre de la persona, como “dijo”, “respondió”, “contestó”, “replicó”, y también que el signo de puntuación de dos puntos sea opcional. Un posible patrón que cubre estas variaciones podría ser:
Este patrón captura el nombre de la persona en un grupo, seguido de un signo de puntuación opcional (dos puntos o coma) y las palabras “dijo”, “respondió”, “contestó” o “replicó”. Luego coincide con la comilla de apertura (que puede ser una comilla doble recta o diferentes tipos de comillas curvadas) y captura el texto citado en otro grupo. El
+?
hace que sea una coincidencia no ávida para que se detenga en la primera comilla de cierre que encuentre.