[Python] Como fazer substituições em strings a partir de índices de tuplas em larga escala?

Discussão em 'Python' iniciado por Stack, Dezembro 31, 2024.

  1. Stack

    Stack Membro Participativo

    Preciso encontrar o índice de algumas palavras em uma string, armazenar esses índices e, a partir deles, realizar outras substituições baseadas em índices de tuplas, que sinalizam quais palavras devem ser substituídas e onde estão (índice) na string. É necessário ter o índice porque é preciso detectar em que ponto do texto pode ser aplicada a operação reversa futuramente, já que nem toda palavra está na ortografia não oficial. Por exemplo, nem todo "ela" está registrada como "ea", nem todo "com" como "c'", etc. Por isso, substituições sem registrar o índice não resolvem meu problema. A proposta é transformar ortografia não oficial na oficial. Até agora, já encontrei os índices das substituições a serem feitas, mas não sei substituir em larga escala. A string de exemplo é a seguinte:

    texto = """
    ontem ea foi lá cum uma cara fea demais
    e' falou c'ocê na parte da tarde
    o' como que eu tô tá vendo
    """


    A partir da string, utilizo uma expressão regular que me dá as seguintes tuplas:

    tuplas1 = [
    ("ela", "ea"),
    ("com", "cum"),
    ("feia", "fea"),
    ("ele", "e'"),
    ("com você", "c'ocê"),
    ("olha", "o'"),
    ("estou", "tô"),
    ("está", "tá"),
    ]


    Para conseguir o índice das palavras da ortografia não oficial na string, utilizo o segundo elemento da variável tuplas1 como base. Fiz assim:

    for x, y in enumerate(texto2.split()):
    for z in tuplas1:
    if y == z[1]:
    lista_idx.append((x, y, z[0]))


    Resultado:

    lista_idx = [
    (1, "ea", "ela"),
    (4, "cum", "com"),
    (7, "fea", "feia"),
    (9, "e'", "ele"),
    (11, "c'ocê", "com você"),
    (16, "o'", "olha"),
    (20, "tô", "estou"),
    (21, "tá", "está"),
    ]


    Agora preciso usar o terceiro elemento de cada tupla em lista_idx para substituir o segundo elemento da tupla baseado no índice, dado no primeiro elemento. No exemplo abaixo, transformei a string em lista e substituí o elemento de índice [1] de texto_lista pelo elemento de índice [2] da tupla de índice [0], isto é, substituí "ea" por "ela" na primeira tupla da variável lista_idx:

    lista_idx = [(1, 'ea', 'ela')
    texto_lista = texto.split()
    texto_lista[1] = lista_idx[1][2]


    Resultado de exemplo: a frase ''ontem ea foi lá cum uma cara fea demais'' ficaria "ontem ela foi lá com uma cara feia demais". Como fazer isso baseado em todos os índices armazenados no primeiro elemento da variável lista_idx no texto?

    Continue reading...

Compartilhe esta Página