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 alguna manera de obtener un texto, extraer las palabras, introducirlas en una función y luego volver a colocar las palabras resultantes en el párrafo utilizando Python?

Estoy básicamente intentando reemplazar palabras en un texto, pero necesito poner la palabra más significativa en cada oración, ponerla en una función, en mi caso en una función most_similar de word2vec, y poner la palabra más similar en el texto original. Soy prácticamente principiante en Python, así que quiero encontrar una solución mejor que lo que hago a continuación, que todavía no está funcionando:

def closest(data, columna):
    lista_completa = []
    datr = data[columna].tolist()
    total_palabras = " ".join(datr).split()

# por filas
for i in range(len(datr)):
    # primero, por fila, obtener las palabras
    lista_palabras = re.sub("[^\w]", " ", datr[i]).split()
    print(lista_palabras)
    # ciclo por palabra
    total_fila = []

    for i in lista_palabras[:]:
      if len(i) <= 2:
        lista_palabras.remove(i)


    for palabra in lista_palabras:
      try:
          más_cercanas = []
          más_cercanas = word_vectors.most_similar(positive=palabra, topn=1)
          val = (palabra, más_cercanas)
          total_fila.append(val)
          lista_completa.append(total_fila)
      except:
        pass
        #print("no está en el vocabulario")
        más_cercanas = 0
return lista_completa
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para reemplazar palabras en un texto con la palabra más significativa en cada oración utilizando la función most_similar de word2vec, hay algunos pasos a seguir:

    1. Cargar el texto.
    2. Tokenizar el texto en oraciones.
    3. Para cada oración, tokenizar en palabras.
    4. Para cada palabra, pasarla a través de la función most_similar del modelo de word2vec para encontrar la palabra más similar.
    5. Reemplazar la palabra original con la palabra más similar.
    6. Unir la oración de nuevo y repetir para todas las oraciones en el texto.

    Aquí tienes un ejemplo de implementación de los pasos anteriores:

    import nltk
    from gensim.models import Word2Vec
    
    # cargar el modelo de word2vec pre-entrenado
    modelo = Word2Vec.load("ruta/al/modelo/word2vec")
    
    # cargar el texto
    with open("ruta/al/texto.txt") as f:
        texto = f.read()
    
    # tokenizar el texto en oraciones
    oraciones = nltk.sent_tokenize(texto)
    
    # definir una función para obtener la palabra más similar para una palabra dada
    def obtener_palabra_mas_similar(palabra):
        try:
            return modelo.wv.most_similar(positive=[palabra], topn=1)[0][0]
        except KeyError:
            return palabra
    
    # recorrer cada oración y reemplazar las palabras
    nuevo_texto = ""
    for oracion in oraciones:
        # tokenizar la oración en palabras
        palabras = nltk.word_tokenize(oracion)
    
        # reemplazar cada palabra con la palabra más similar
        nuevas_palabras = [obtener_palabra_mas_similar(palabra) for palabra in palabras]
    
        # unir las palabras de nuevo en una oración
        nueva_oracion = " ".join(nuevas_palabras)
    
        # agregar la oración al nuevo texto
        nuevo_texto += nueva_oracion + " "
    
    # imprimir el nuevo texto con las palabras reemplazadas
    print(nuevo_texto)
    

    En esta implementación, cargamos un modelo de word2vec pre-entrenado y usamos NLTK para tokenizar el texto en oraciones y palabras. Luego, definimos una función para obtener la palabra más similar para una palabra dada utilizando la función most_similar del modelo de word2vec. Finalmente, recorremos cada oración, reemplazamos cada palabra con su palabra más similar y unimos las palabras de nuevo en una oración. El nuevo texto resultante con las palabras reemplazadas se imprime en la consola.

Comments are closed.