Exemplo n.º 1
0
def stem_texto(texto, lenguaje='es', limpiar=False, stemmer=None):
    """
    Función que aprovecha la clase Stemmer para realizar *stemming*, o \
    reducción de palabras a su raíz, en un texto de entrada.

    :param texto: (str) Texto al que se desea aplicar el *stemming*.
    :param lenguaje: (str) Valor por defecto: 'es'. Lenguaje del  texto al que se va \ 
        a aplicar *stemming*. Para mayor información, consultar la sección de \ 
        :ref:`Lenguajes soportados <seccion_lenguajes_soportados>`.
    :param limpiar: (bool) {True, False} Valor por defecto: False. Define \
        si se desea hacer una limpieza básica (aplicando la función  \
        `limpieza_basica` del módulo `limpieza`) al texto de entrada,  \
        antes de aplicar el *stemming*.
    :param stemmer: (Stemmer). Parámetro opcional. Objeto de la clase Stemmer para aplicar \
        *stemming* sobre el texto de entrada. Se puede utilizar para aplicar \
        *stemming* a varios textos a la vez, sin necesidad de inicializar una \
        instancia de la clase Stemmer en cada ocasión. Esto puede representar \
        ahorro en tiempos al momento de aplicar la función.
    :return: (str) Texto luego de la aplicación del *stemming*.
    """
    # Si no se provee un stemmer, este debe ser inicializado
    if stemmer is None:
        if lenguaje == 'auto':
            lenguaje = detectar_lenguaje(texto)
        stemmer = Stemmer(lenguaje)

    if stemmer.stemmer is None:
        print('Lenguaje no válido.')
        return None

    return stemmer.stemming(texto, limpiar)
Exemplo n.º 2
0
def corregir_texto(texto,
                   lenguaje='es',
                   corrector=None,
                   diccionario=None,
                   distancia=2,
                   limpieza=False,
                   tokenizador=None):
    """ 
    Función que aprovecha la clase Corrector para realizar corrección \
        ortográfica sobre un texto de entrada.

    :param texto: (str) Texto al cuál se desea aplicar corrección ortográfica.
    :param lenguaje: (str) Lenguaje de los textos a los que se les va a aplicar \ 
        corrección ortográfica. Para mayor información, consultar la sección de \ 
        :ref:`Lenguajes soportados <seccion_lenguajes_soportados>`.
    :param corrector: (Corrector) Parámetro opcional. Objeto de la clase Corrector para aplicar \
        corrección ortográfica sobre el texto de entrada. Se puede utilizar para \
        corregir varios textos a la vez, sin necesidad de inicializar una instancia de \
        la clase Corrector en cada ocasión. Esto puede representar ahorro en tiempos al \
        momento de aplicar la función.
    :param diccionario: (dict, list o str) Valor por defecto: None. Diccionario (o string con ubicación del \
        archivo JSON que lo contiene), o lista que permite modificar y agregar palabras. \
        Si es una lista, contiene las palabras que serán consideradas como válidas o correctas. \
        Si es un diccionario, las llaves del diccionario son las palabras que serán consideradas
        como válidas o correctas, y los valores del diccionario son las frecuencias de cada palabra \
        en el diccionario. Las frecuencias son utilizadas como criterio de desempate, cuando una \
        palabra incorrecta tiene más de una palabra candidata para la corrección. Si se deja este \
        parámetro como None, se cargará el diccionario por defecto que trae la librería `spellchecker` \
        para el lenguaje determinado.
    :param distancia: (int) Valor por defecto: 2. Máxima distancia de Levenshtein que puede haber \
        entre una palabra incorrecta (o no reconocida) y las palabras del diccionario para \
        determinar si hay palabras candidatas para realizar la corrección.
    :param limpieza: (bool) {True, False} Valor por defecto: False. Argumento \
        opcional que define si se desea hacer una limpieza 
        básica (aplicando la función `limpieza_basica` del módulo `limpieza`) al \
        texto antes de aplicar la corrección ortográfica.
    :param tokenizador: Valor por defecto: None. Objeto encargado de la tokenización y detokenización de \
        textos. Si el valor es 'None', se cargará por defecto una instancia de la clase *TokenizadorNLTK*.        
    :return: (str) Texto de entrada luego de la corrección ortográfica.
    """
    if corrector is None:
        if lenguaje == 'auto':
            lenguaje = detectar_lenguaje(texto)
        corrector = Corrector(lenguaje, diccionario, distancia, tokenizador)

    if corrector.corrector is None:
        print('Lenguaje no válido.')
        return None

    return corrector.correccion_ortografia(texto, limpieza)
Exemplo n.º 3
0
def stem_texto(texto, lenguaje="es", limpiar=False, stemmer=None):
    """
    Función que aprovecha la clase `Stemmer` para realizar *stemming*, o \
    reducción de palabras a su raíz, en un texto de entrada.

    :param texto: Texto al que se desea aplicar el *stemming*.
    :type texto: str
    :param lenguaje: Lenguaje de los textos a los que se va a aplicar \
        *stemming*. Para mayor información, consultar la sección de \
        :ref:`Lenguajes soportados <seccion_lenguajes_soportados>`. \
        Valor por defecto `'es'`.
    :type lenguaje: {'es', 'en', 'fr', 'ge'}, opcional
    :param limpiar: Define si se desea hacer una limpieza básica \
        (aplicando la función `limpieza_basica` del módulo \
        `limpieza`) al texto antes de aplicar el *stemming*. \
        Valor por defecto `False`.
    :type limpiar: bool, opcional
    :param stemmer: Objeto de la clase `Stemmer` para aplicar *stemming* \
        sobre el texto de entrada. \
        Se puede utilizar para aplicar *stemming* a varios textos a la \
        vez, sin necesidad de inicializar una instancia de la clase *Stemmer* \
        en cada ocasión. Esto puede representar ahorro en tiempos al momento \
        de aplicar la función. Valor por defecto `None`.
    :type stemmer: Stemmer, opcional
    :return: (str) Texto luego de la aplicación del *stemming*.
    """
    # Si no se provee un stemmer, este debe ser inicializado
    if stemmer is None:
        if lenguaje == "auto":
            lenguaje = detectar_lenguaje(texto)
        stemmer = Stemmer(lenguaje)

    if stemmer.stemmer is None:
        print("Lenguaje no válido.")
        return None

    return stemmer.stemming(texto, limpiar)
Exemplo n.º 4
0
def corregir_texto(
    texto,
    lenguaje="es",
    corrector=None,
    diccionario=None,
    distancia=2,
    limpieza=False,
    tokenizador=None,
):
    """
    Función que aprovecha la clase `Corrector` para realizar corrección \
    ortográfica sobre un texto de entrada.

    :param texto: Texto al cuál se desea aplicar corrección ortográfica.
    :type texto: str
    :param lenguaje: Lenguaje de los textos a los que se les va a \
        aplicar corrección ortográfica. Para mayor información, consultar la \
        sección de \
        :ref:`Lenguajes soportados <seccion_lenguajes_soportados>`. Valor \
        por defecto `'es'`.
    :type lenguaje: {'es', 'en', 'fr', 'ge'}, opcional
    :param corrector: Objeto de la clase `Corrector` para aplicar corrección \
        ortográfica sobre el texto de entrada. Se puede utilizar para \
        corregir varios textos a la vez, sin necesidad de inicializar una \
        instancia de la clase `Corrector` en cada ocasión. Esto puede \
        representar ahorro en tiempos al momento de aplicar la función. Valor \
        por defecto `None`.
    :type corrector: Object, opcional
    :param diccionario: Diccionario (o string con ubicación del archivo \
            JSON que lo contiene), o lista que permite modificar y agregar \
            palabras. Si es una lista, contiene las palabras que serán \
            consideradas como válidas o correctas. \
            Si es un diccionario, las llaves del diccionario son las palabras \
            que serán consideradas como válidas o correctas, y los valores \
            del diccionario son las frecuencias de cada palabra en el \
            diccionario. Las frecuencias son utilizadas como criterio de \
            desempate, cuando una palabra incorrecta tiene más de una palabra \
            candidata para la corrección. Si se deja este \
            parámetro como `None`, se cargará el diccionario por defecto que \
            trae la librería `spellchecker` para el lenguaje determinado.
    :type diccionario: dict, list, str, opcional
    :param distancia: Máxima distancia de \
            Levenshtein que puede haber entre una palabra incorrecta (o no \
            reconocida) y las palabras del diccionario para determinar si \
            hay palabras candidatas para realizar la corrección. \
            Valor por defecto `2`.
    :type distancia: int
    :param limpieza: Define si se desea hacer una limpieza \
            básica (aplicando la función `limpieza_basica` del módulo \
            `limpieza`) al texto antes de aplicar la corrección ortográfica.\
            Valor por defecto `False`.
    :type limpieza: bool, opcional
    :param tokenizador: Objeto encargado de la tokenización y \
            detokenización de textos. Si el valor es `None`, se cargará por \
            defecto una instancia de la clase `TokenizadorNLTK`. Valor por \
            defecto `None`.
    :type tokenizador: object, opcional
    :return: (str) Texto de entrada luego de la corrección ortográfica.
    """
    if corrector is None:
        if lenguaje == "auto":
            lenguaje = detectar_lenguaje(texto)
        corrector = Corrector(lenguaje, diccionario, distancia, tokenizador)

    if corrector.corrector is None:
        print("Lenguaje no válido.")
        return None

    return corrector.correccion_ortografia(texto, limpieza)
Exemplo n.º 5
0
def lematizar_texto(texto,
                    lenguaje='es',
                    libreria='spacy',
                    limpiar=True,
                    lematizador=None,
                    dict_lemmas=None,
                    dim_modelo='md',
                    modelo_lemas='',
                    archivo_salida='',
                    maxima_longitud=None,
                    tokenizador=None):
    """ Función que retorna un texto lematizado por la librería Spacy o Stanza. \
        Permite escoger el idioma de lematización, si hacer limpieza del texto, \
        modificar los modelos de lematizaciones originales y guardar los modelos \
        modificados.

    :param texto: (str) Texto de entrada a ser lematizado.
    :param lenguaje: (str) Valor por defecto: 'es'. Define el lenguaje del \ 
        texto a ser tratado. Para mayor información, consultar la sección de \ 
        :ref:`Lenguajes soportados <seccion_lenguajes_soportados>`.
    :param libreria: (str) {'spacy', 'stanza'} Valor por defecto: 'spacy'. \
        Se define la librería de Python de lematización para ser utilizada en '
        el texto. Las opciones son las librerías Spacy y Stanza.
    :param limpiar: (bool) {True, False} Valor por defecto: True. Especifica \
        si se desea hacer una limpieza básica del texto antes de la lematización.
    :param lematizador: Valor por defecto: None. Parámetro opcional. Objeto de la clase \
        LematizadorSpacy o LematizadorStanzapara aplicar lematización sobre el texto de entrada. \
        Se puede utilizar para aplicar lematización a varios textos a la vez, sin necesidad de inicializar \
        un lematizador en cada ocasión. Esto puede representar ahorro en tiempos al momento de aplicar la función.
    :param dict_lemmas: (dict) Diccionario que permite modificar y agregar \
        lemas. Las llaves del diccionario son las palabras completas y los \
        valores del diccionario son los lemas escogidos para cada palabra.
    :param dim_modelo: (str) {'lg', 'md', 'sm'} Valor por defecto: 'md'. \
        Se define el tamaño del modelo. 'lg' es grande (large), 'md' es mediano \
        (medium) y 'sm' es pequeño (small). Aplica únicamente para el lematizador Spacy.
    :param modelo_lemas: (str) Valor por defecto: None. Especifica la ruta \
        de un modelo de lemas personalizado. En caso de ser vacío, se utiliza \
        el modelo genérico de lemas de Stanza. Aplica únicamente para la \
        lematización con Stanza.
    :param archivo_salida: (str) Valor por defecto: ''. Especifica la ruta \
        del archivo de salida del modelo de lemas modificado. En caso de ser \
        vacío, el resultado de la lematizacción se guarda en un archivo \
        temporal que eventualmente será borrado. Aplica únicamente para la \
        lematización con Stanza.
    :param maxima_longitud: (int) Valor por defecto: None. Parámetro opcional que \ 
        permite establecer la máxima longitud (número de caracteres) que acepta el \
        LematizadorSpacy en un texto de entrada. Si este valor se deja en None, se utilizará \
        la máxima longitud que trae Spacy por defecto (1 millón de caracteres). Aplica únicamente \
        para la lematización con Spacy.
    :param tokenizador: Valor por defecto: None. Objeto encargado de la detokenización \
        de textos después de lematizar. Si el valor es 'None', se cargará por defecto una \
        instancia de la clase *TokenizadorEspacios*.
    :return: (str) Texto lematizado. 
    """
    # Si no se provee un lematizador, este debe ser inicializado
    if lematizador is None:
        if lenguaje == 'auto':
            lenguaje = detectar_lenguaje(texto)
        if libreria.lower() == 'spacy':
            lematizador = LematizadorSpacy(lenguaje, dim_modelo, dict_lemmas,
                                           maxima_longitud, tokenizador)
        elif libreria.lower() == 'stanza':
            lematizador = LematizadorStanza(lenguaje, modelo_lemas,
                                            dict_lemmas, archivo_salida,
                                            tokenizador)
        else:
            print(
                'Por favor escoja una librería válida para el lematizador (Spacy o Stanza)'
            )
            return None
    # Si el lenguaje no se reconoce, se envía mensaje
    if lematizador.lematizador is None:
        print('Lenguaje no válido.')
        return None
    # Devolver la lematización del texto
    return lematizador.lematizar(texto, limpiar)
Exemplo n.º 6
0
def lematizar_texto(
    texto,
    lenguaje="es",
    libreria="spacy",
    limpiar=True,
    lematizador=None,
    dict_lemmas=None,
    dim_modelo="md",
    modelo_lemas=None,
    archivo_salida=None,
    maxima_longitud=None,
    tokenizador=None,
):
    """
    Función que retorna un texto lematizado por la librería `Spacy` o \
    `Stanza`. \
    Permite escoger el idioma de lematización, si hacer limpieza del texto, \
    modificar los modelos de lematizaciones originales y guardar los modelos \
    modificados.

    :param texto: Texto de entrada a ser lematizado.
    :type texto: str
    :param lenguaje: Define el lenguaje del Lematizador. \
        Para mayor información, consultar la sección de \
        :ref:`Lenguajes soportados <seccion_lenguajes_soportados>`. \
        Valor por defecto `'es'`.
    :type lenguaje: {'es', 'en', 'fr', 'ge'}, opcional
    :param libreria: Se define la librería de lematización para ser utilizada \
        en el texto. Las opciones son las librerías `spacy` o `stanza`.
        Valor por defecto `spacy`.
    :type libreria: {'spacy', 'stanza'}
    :param limpiar: Si `limpiar = True` se hace una limpieza básica de texto \
        antes del proceso de lematización. Valor por defecto `True`.
    :type limpiar: bool, opcional
    :param lematizador:  Objeto de la clase `LematizadorSpacy` o \
        `LematizadorStanza` para el proceso de lematización sobre el texto \
        de entrada. Se puede utilizar para lematización a varios textos a la \
        vez, sin necesidad de inicializar un lematizador en cada ocasión. \
        Esto puede representar ahorro en tiempos al momento de aplicar la \
        función. Valor por defecto `None`.
    :type lematizador: {LematizadorStanza, LematizadorSpacy}, opcional
    :param dict_lemmas: Diccionario que permite modificar \
            y agregar lemas. Las llaves del diccionario son las palabras \
            completas y los valores del diccionario son los lemas escogidos \
            para cada palabra.
    :type dict_lemmas: dict
    :param dim_modelo: Tamaño del modelo. 'lg' es grande (large), 'md' es \
            mediano (medium) y 'sm' es pequeño (small). Los modelos más \
            grandes usualmente obtienen mejores resultados, pero requieren \
            mayor tiempo de carga. Aplica unicamente para `LematizadorSpacy`. \
            Valor por defecto `'md'`.
    :type dim_modelo: {'lg', 'md', 'sm'}, opcional.
    :param modelo_lemas: Especifica la ruta de un modelo de lemas \
        personalizado. Si `modelo_lemas = None`, utiliza el modelo \
        genérico de lemas de `Stanza`. Aplica únicamente para la \
        lematización con Stanza.
    :type modelo_lemas: str, opcional
    :param archivo_salida: Especifica la ruta del archivo de salida del \
        modelo de lemas modificado. Si `archivo_salida = None`, el \
        resultado de la lematizacción se guarda en un archivo temporal \
        que eventualmente será borrado. Aplica únicamente para la \
        lematización con Stanza.
    :type archivo_salida: str, opcional
    :param maxima_longitud: Establecer la máxima longitud (número de \
        caracteres) que acepta el lematizador en un texto de entrada. Si \
        `maxima_longitud = None`, se utilizará la máxima longitud que \
        trae `Spacy` por defecto (1 millón de caracteres). Aplica únicamente \
        para la lematización con Spacy. Valor por defecto `None`.
    :type maxima_longitud: int, opcional
    :param tokenizador: Objeto encargado de la tokenización y \
        detokenización de textos después de lematizar. Si el valor es \
        `None`, se cargará por defecto una instancia de la clase \
        `TokenizadorEspacios`. Valor por defecto `None`.
    :type tokenizador: object, opcional
    :return: (str) Texto lematizado.
    """
    # Si no se provee un lematizador, este debe ser inicializado
    if lematizador is None:
        if lenguaje == "auto":
            lenguaje = detectar_lenguaje(texto)
        if libreria.lower() == "spacy":
            lematizador = LematizadorSpacy(lenguaje, dim_modelo, dict_lemmas,
                                           maxima_longitud, tokenizador)
        elif libreria.lower() == "stanza":
            lematizador = LematizadorStanza(
                lenguaje,
                modelo_lemas,
                dict_lemmas,
                archivo_salida,
                tokenizador,
            )
        else:
            print(("Por favor escoja una librería válida "
                   "para el lematizador (Spacy o Stanza)"))
            return None
    # Si el lenguaje no se reconoce, se envía mensaje
    if lematizador.lematizador is None:
        print("Lenguaje no válido.")
        return None
    # Devolver la lematización del texto
    return lematizador.lematizar(texto, limpiar)