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.

Reemplazo de palabras mediante regex en un conjunto de datos sin cambios en el resultado.

Tengo un conjunto de datos con esta estructura

print(type(test_small_testval))
print((test_small_testval.features))

<class 'datasets.arrow_dataset.Dataset'>
{'premise': Value(dtype='string', id=None), 'hypothesis': Value(dtype='string', id=None), 'label': ClassLabel(num_classes=3, names=['entailment', 'neutral', 'contradiction'], names_file=None, id=None)}

Puedo acceder a la columna “hypothesis” del conjunto de datos haciendo esto

for i in range(len(test_small_testval)):
    print(test_small_testval['hypothesis'][i])

A modo de ejemplo, los dos primeros elementos se pueden ver así:

print(test_small_testval['hypothesis'][0:2])
['The owner threw the toy', 'The dog walked across the fallen log.']

En esta columna “hypothesis” quiero recorrer cada cadena y reemplazarla de la siguiente manera:

test_small_testval['hypothesis'][i] = re.sub(r'\bshe\b', r'them', test_small_testval['hypothesis'][i])
            test_small_testval['hypothesis'][i] = re.sub(r'\bhe\b', r'them', test_small_testval['hypothesis'][i])
            test_small_testval['hypothesis'][i] = re.sub(r'\bher\b', r'them', test_small_testval['hypothesis'][i])
            test_small_testval['hypothesis'][i] = re.sub(r'\bhim\b', r'them', test_small_testval['hypothesis'][i])
            test_small_testval['hypothesis'][i] = re.sub(r'\bdog\b', r'animal', test_small_testval['hypothesis'][i])
            test_small_testval['hypothesis'][i] = re.sub(r'\bcat\b', r'animal', test_small_testval['hypothesis'][i])

No está reemplazando las palabras en esa columna específica. Pensé que estaba sobrescribiendo la cadena con la cadena original, pero el enfoque me parece correcto.

¿Algún consejo?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando modificar las cadenas en la columna ‘hypothesis’ usando expresiones regulares, pero las modificaciones no se están reflejando en el conjunto de datos. Un posible problema es que el conjunto de datos puede ser de solo lectura, lo que significa que no puedes modificar su contenido directamente.

    Una opción que podrías intentar es crear un nuevo conjunto de datos con la columna ‘hypothesis’ modificada en lugar de modificar el conjunto de datos original directamente. Aquí tienes un ejemplo:

    import re
    import copy
    
    # crear una copia profunda del conjunto de datos
    new_dataset = copy.deepcopy(test_small_testval)
    
    # iterar sobre la columna 'hypothesis' y modificar las cadenas
    for i in range(len(new_dataset)):
        new_dataset[i]['hypothesis'] = re.sub(r'\bshe\b', r'them', new_dataset[i]['hypothesis'])
        new_dataset[i]['hypothesis'] = re.sub(r'\bhe\b', r'them', new_dataset[i]['hypothesis'])
        new_dataset[i]['hypothesis'] = re.sub(r'\bher\b', r'them', new_dataset[i]['hypothesis'])
        new_dataset[i]['hypothesis'] = re.sub(r'\bhim\b', r'them', new_dataset[i]['hypothesis'])
        new_dataset[i]['hypothesis'] = re.sub(r'\bdog\b', r'animal', new_dataset[i]['hypothesis'])
        new_dataset[i]['hypothesis'] = re.sub(r'\bcat\b', r'animal', new_dataset[i]['hypothesis'])
    
    # verificar la columna 'hypothesis' modificada
    print(new_dataset['hypothesis'][0:2])
    

    Este código crea una copia profunda del conjunto de datos original, lo que te permite modificar el contenido de la columna ‘hypothesis’ sin afectar al conjunto de datos original. Luego, itera sobre la columna ‘hypothesis’ y utiliza expresiones regulares para realizar las modificaciones deseadas. Finalmente, verifica la columna ‘hypothesis’ modificada para confirmar que las modificaciones fueron exitosas.

    ¡Espero que esto te ayude! Avísame si tienes alguna pregunta o problema adicional.

Comments are closed.