Skip to main content

Generates Python functions capable of rewriting text according to pre-defined rules.

Project description

Enunciado 2: Sistema de Reescrita Textual / Regex

Introdução

Este enunciado descreve a criação de um módulo capaz de converter "pseudo-funções", responsáveis por converter texto para, por exemplo, outra língua, em funções Python que permitam aplicar essa conversão em textos.

Estas "pseudo-funções" deverão seguir um template que será lido e transformado pelo módulo.

Template

O template segue um modelo semelhante ao seguinte:

defrt p2e
    "o gato" => "the cat"
    "chama-se {}" => "is called $1"
    "gritar" => str.upper($0)
endrt

Cada linha dentro da função possui um par, com o primeiro elemento correspondente ao valor a procurar no texto e o segundo correspondente ao valor que o deverá substituir.

Aqui, as conversões são lidas e interpretadas por ordem (de cima para baixo). Desta forma, as expressões mais específicas deverão ser colocadas mais acima na função. Para além disso, deverão ser escritas com letra minúscula. Se o texto original contiver letras maiúsculas, o módulo tentará efetuar a conversão e manter a capitalização original. Por exemplo, se o texto original contiver "The cat" e a função contiver o par "the cat" => "o gato", o texto final irá mostrar a expressão "O gato", visto que o texto original continha a primeira letra maiúscula.

O segundo elemento do par pode ser uma string, um callable, isto é, uma função de Python, ou um condicional, que usa a sintaxe [condição] ? [valor_se_verdade] : [valor_se_falso] ou apenas [condição] ? [valor_se_verdade]. Dentro do elemento, poderão existir valores como $0 ou $1. Estes representam grupos de captura do texto original. $0 diz respeito a toda a string capturada, enquanto que $N, em que N > 0, corresponde ao grupo de captura N, representado na string original por {}.

No caso do elemento condicional apenas tiver o valor de verdade (i.e.: [condição] ? [valor_se_verdade]) e a condição não se verificar, a correspondência é ignorada. Por outras palavras, o programa continua a percorrer a lista de expressões à procura de uma nova correspondência.

Os caracteres {} na string do lado esquerdo do par, se não tiverem nada dentro dos mesmos, correspondem a uma palavra. Contudo, é possível escrever uma expressão regular dentro das chavetas, que será usada para o grupo de captura.

O ficheiro reescrita_textual.py converte um ficheiro .pyrt, isto é, um ficheiro Python com pseudo-funções de reescrita textual, como a do exemplo acima, num ficheiro .py funcional.

Para tal, é utilizado o módulo Lark para gerar uma Representação Intermédia (RI) a partir das pseudo-funções, que é posteriormente convertida para código Python válido.

Representação Intermédia

A RI usa um formato semelhante a JSON com a seguinte estrutura:

{
    "name": "[nome da função]",
    "values": [
        {
            "type": "(term / callable)",
            "original": "[texto original]",
            "converted": "[novo valor, pode ser textual ou um callable]"
        },
        {
            "type": "conditional",
            "original": "[texto original]",
            "condition": "[condição para efetuar a reescrita]",
            "if_true": {
                "type": "(term / callable)",
                "converted": "[novo valor, pode ser textual ou um callable]"
            },
            "if_false": {
                "type": "(term / callable)",
                "converted": "[novo valor, pode ser textual ou um callable]"
            },
        }
    ]
}

Cada valor pode assumir 1 de 3 tipos, termo, callable ou condicional. O tipo condicional, por ser mais complexo do que os outros dois, requer mais valores. O valor "if_false" é opcional.

Cada função de reescrita textual possui a sua própria RI. Por outras palavras, as funções de conversão são sempre independentes uma das outras, sendo que um ficheiro pode conter várias.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

text_rewrite_system-1.0.2.tar.gz (6.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

text_rewrite_system-1.0.2-py2.py3-none-any.whl (6.0 kB view details)

Uploaded Python 2Python 3

File details

Details for the file text_rewrite_system-1.0.2.tar.gz.

File metadata

  • Download URL: text_rewrite_system-1.0.2.tar.gz
  • Upload date:
  • Size: 6.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.28.0

File hashes

Hashes for text_rewrite_system-1.0.2.tar.gz
Algorithm Hash digest
SHA256 e68b3fb62aa45b42d5db42d3cda03a2c661dac44f96d195f1c2150c8da9ce06a
MD5 09ca7c5ff2fae4fdd0bd0f5337987f28
BLAKE2b-256 143c3a42ad3c352f1790badbd9c8a7655a175aa015b8c3f5b1dbcc35cd5b926a

See more details on using hashes here.

File details

Details for the file text_rewrite_system-1.0.2-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for text_rewrite_system-1.0.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 337480e7642051766f34396ec3fc4144e96f9de627a82119e33cfb829ca79708
MD5 5b62c0fedc4fa37d8df03a66666b7ace
BLAKE2b-256 57dfec32d1c70d43fc89d6de8b54a47df1cff4a282fd4fee13f31a24b3124c3c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page