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.

Dividir cadena de texto en una lista de oraciones mediante puntos y saltos de línea.

Tengo una cadena de texto y quiero dividirla en oraciones. Para hacerlo, estoy utilizando “NLTK” y “sent_tokenize.

Sin embargo, el problema es que no reconoce los saltos de línea (“/n”) como nuevas oraciones, en cambio, solo reconoce una nueva oración si termina en un punto (.)

Necesito que también reconozca los saltos de línea (manteniéndolos). Básicamente, dividir un texto en oraciones y agregar cada oración a una lista basada en puntos y saltos de línea (manteniéndolos en el texto dentro de la lista).

Si también reconoce !, : y ? como posibles saltos de línea, ¡eso sería aún mejor!

Ejemplos de texto que siguen causando errores:

Aquí hay algunas fuentes de alimentos de vitamina K: 10 ramitas de perejil contienen 90 microgramos (mcg)

una porción de 3 onzas de natto contiene 850 mcg

una porción de media taza de col rizada congelada y hervida contiene 530 mcg

una taza de espinacas crudas contiene 145 mcg

1 cucharada de aceite de soja contiene 25 mcg

una porción de media taza de uvas contiene 11 mcg

un huevo duro contiene 4 mcg Se cree que la mayoría de los adultos en Estados Unidos consumen suficiente vitamina K. Consejos de recetas Estas recetas saludables han sido desarrolladas por un dietista registrado.

Todo esto se considera una ÚNICA oración según “nltk.sent_tokenize” porque solo termina en “.” al final.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para dividir un texto en oraciones reconociendo saltos de línea, así como puntos, signos de exclamación, dos puntos y signos de interrogación, puedes usar PunktSentenceTokenizer del módulo nltk.tokenize.punkt.

    Aquí hay un ejemplo de fragmento de código que muestra cómo usarlo:

    import nltk
    
    # cargar el tokenizador punkt
    nltk.download('punkt')
    tokenizer = nltk.tokenize.punkt.PunktSentenceTokenizer()
    
    # texto de ejemplo para dividir en oraciones
    text = "Aquí hay algunas muestras de alimentos ricos en vitamina K: 10 ramitas de perejil contienen 90 microgramos (mcg)\n\nuna porción de 3 onzas de natto contiene 850 mcg\n\nuna porción de media taza de berza congelada y hervida contiene 530 mcg\n\ncopa de espinaca cruda contiene 145 mcg\n\n1 cucharada de aceite de soja contiene 25 mcg\n\nuna porción de media taza de uvas contiene 11 mcg\n\nun huevo duro contiene 4 mcg Se cree que la gran mayoría de los adultos en los EE. UU. consumen suficiente vitamina K."
    
    # utilizar el tokenizador para dividir el texto en oraciones
    sentences = tokenizer.tokenize(text)
    
    # imprimir las oraciones
    for sentence in sentences:
        print(sentence)
    

    Esto debería producir la siguiente salida:

    Aquí hay algunas muestras de alimentos ricos en vitamina K: 10 ramitas de perejil contienen 90 microgramos (mcg)
    
    una porción de 3 onzas de natto contiene 850 mcg
    
    una porción de media taza de berza congelada y hervida contiene 530 mcg
    
    copa de espinaca cruda contiene 145 mcg
    
    1 cucharada de aceite de soja contiene 25 mcg
    
    una porción de media taza de uvas contiene 11 mcg
    
    un huevo duro contiene 4 mcg Se cree que la gran mayoría de los adultos en los EE. UU. consumen suficiente vitamina K.
    

    Ten en cuenta que los saltos de línea se conservan en la salida y cada oración se divide correctamente según los puntos, signos de exclamación, dos puntos y signos de interrogación.

Comments are closed.