es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La forma más eficiente de encontrar un pronombre en tercera persona del singular, un sustantivo y un verbo en una oración en Spacy.

Tengo este código (soy principiante en Python) y funciona bien, pero creo que mi código no es eficiente.
Comprueba si una oración contiene un pronombre en tercera persona singular (él, ella o ello), un sustantivo y un verbo:

def findNounVerbPronoun():
    countElements = 0
    nlp = spacy.load("en_core_web_sm")
    doc = nlp("Entre viajar, trabajar y prepararse para ser madre por primera vez, ella es una mujer muy ocupada.")
    for token in doc:
        if token.pos_ == "NOUN":
            countElements = countElements + 1
        if token.pos_ == "PRON" and token.morph.get("Person") == ["3"] and token.morph.get("Number") == ['Sing']:
            countElements = countElements + 1
        if token.pos_ == "VERB":
            countElements = countElements + 1
    if countElements == 3:
        return True
    else:
        return False

¿Es posible descubrir si una oración contiene un verbo, sustantivo y un pronombre (en tercera persona singular) de una manera más fácil que esta forma? Creo que mi código no es realmente pythonico. ¡Muchas gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma más pythonica de verificar si una oración contiene un verbo, un sustantivo y un pronombre (en tercera persona singular). Aquí hay un ejemplo:

    import spacy
    
    def encontrarSustantivoVerboPronombre():
        nlp = spacy.load("en_core_web_sm")
        doc = nlp("Entre viajar, trabajar y prepararse para ser madre por primera vez, ella es una mujer muy ocupada.")
    
        sustantivos = [token for token in doc if token.pos_ == "NOUN"]
        pronombres = [token for token in doc if token.pos_ == "PRON" and token.morph.get("Person") == ["3"] and token.morph.get("Number") == ['Sing']]
        verbos = [token for token in doc if token.pos_ == "VERB"]
    
        if len(sustantivos) > 0 and len(pronombres) > 0 and len(verbos) > 0:
            return True
        else:
            return False
    

    Este código utiliza comprensiones de lista para obtener todos los sustantivos, pronombres y verbos en la oración, y luego verifica si hay al menos uno de cada uno. Esta es una forma más concisa y legible para escribir la función.

Comments are closed.