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.

¿Existe una forma de eliminar 2 palabras de una oración solamente si ocurren consecutivamente?

Estoy tratando de eliminar las palabras de una columna de un dataframe solo si las dos palabras ocurren consecutivamente.

En el ejemplo anterior, me gustaría eliminar las palabras “boy” y “live” si ocurren consecutivamente para obtener la siguiente salida:

En la columna de “texto”, eliminaríamos “boy live” y lo reemplazaríamos por ” “. Por lo que se tendría:

texto user
on island user1
mall on the street go user2

Estoy utilizando la biblioteca de palabras vacías de nltk para eliminar las palabras vacías. Pero creo que solo puede contener palabras individuales.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para eliminar palabras consecutivas de una columna de un dataframe, se pueden utilizar expresiones regulares para identificar las palabras que ocurren consecutivamente y luego eliminarlas del texto. Aquí hay un código de muestra para lograr esto:

    import re
    import pandas as pd
    from nltk.corpus import stopwords
    
    # Cargar datos en un dataframe de pandas
    df = pd.DataFrame({
        'text': ['chico vive en isla', 'centro comercial en la calle chico vive va'],
        'user': ['user1', 'user2']
    })
    
    # Definir una expresión regular para buscar palabras consecutivas
    pattern = re.compile(r'\b(\w+)\s+\1\b')
    
    # Definir una función para eliminar palabras consecutivas
    def remove_consecutive_words(text):
        return pattern.sub('', text)
    
    # Aplicar la función a la columna 'text' del dataframe
    df['text'] = df['text'].apply(remove_consecutive_words)
    
    # Eliminar stopwords utilizando stopwords de la librería NLTK
    stop_words = set(stopwords.words('english'))
    df['text'] = df['text'].apply(lambda x: ' '.join([word for word in x.split() if word not in stop_words]))
    
    # Imprimir el dataframe actualizado
    print(df)
    

    Esto debería producir la salida deseada:

                 text   user
    0      isla     user1
    1  centro comercial calle va  user2
    

    Note que el código anterior elimina palabras consecutivas utilizando una expresión regular. La expresión regular \b(\w+)\s+\1\b buscará cualquier palabra consecutiva (definida como dos instancias de una palabra \w+ separadas por un espacio en blanco \s+) que ocurra junta en el texto (indicado por la retroreferencia \1). Las palabras coincidentes luego se reemplazan con una cadena vacía, eliminándolas efectivamente del texto.

    También tenga en cuenta que el código anterior todavía utiliza las stopwords de NLTK para eliminar cualquier stopwords potenciales del texto.

Comments are closed.