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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e68b3fb62aa45b42d5db42d3cda03a2c661dac44f96d195f1c2150c8da9ce06a
|
|
| MD5 |
09ca7c5ff2fae4fdd0bd0f5337987f28
|
|
| BLAKE2b-256 |
143c3a42ad3c352f1790badbd9c8a7655a175aa015b8c3f5b1dbcc35cd5b926a
|
File details
Details for the file text_rewrite_system-1.0.2-py2.py3-none-any.whl.
File metadata
- Download URL: text_rewrite_system-1.0.2-py2.py3-none-any.whl
- Upload date:
- Size: 6.0 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.28.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
337480e7642051766f34396ec3fc4144e96f9de627a82119e33cfb829ca79708
|
|
| MD5 |
5b62c0fedc4fa37d8df03a66666b7ace
|
|
| BLAKE2b-256 |
57dfec32d1c70d43fc89d6de8b54a47df1cff4a282fd4fee13f31a24b3124c3c
|