<div align="center">
  <img src="https://i.imgur.com/WGkwXi9.png" width="400"/>
  <h1>Gerador de Lero-Lero em Python</h1>
  <p>Este é um pacote Python para gerar frases e textos completos no estilo "lero-lero" corporativo em português do Brasil. Ideal para dar uma leve descontraída em apresentações, relatórios e e-mails que precisam soar complexos e estratégicos.</p>
  
  ![Python Version](https://img.shields.io/badge/python-3.10+-blue.svg)
  ![License](https://img.shields.io/badge/license-MIT-green)
</div>

# Instalação

Você pode instalar o pacote diretamente do PyPI:

```bash
pip install pylerolero
```

# Importação

Para importar o pacote no seu código e ter acesso à classe e suas funções basta realizar um import seguindo o formato padrão, sem segredos:

```Python
from pylerolero import PyLeroLero
```

# Conhecendo as Funções
A classe do pacote oferece três funções principais para a geração de frases, parágrafos e textos, onde cada uma dessas funções possui um parâmetro para definição de uma semente, permitindo a geração consistente sempre que necessário:

## Frase:
```Python
"""
  Gerando uma frase a partir de uma semente.

  Args:
    seed (any, opcional): Valor que será utilizado como semente nas funções de
      randomização durante a geração da frase. (Padrão: None).

  Returns:
    string: A frase gerada pela concatenação de um elemento de cada
      lista de segmento.
"""
def generate_phrase(self, seed=None):
```

## Parágrafo:
```Python
"""
  Gerando um parágrafo de um tamanho específico a partir de uma semente.

  Args:
    density (int, opcional): Densidade do parágrafo em quantidade de frases.
      (Padrão: 3).
    seed (any, opcional): Valor que será utilizado como semente nas funções de randomização durante a geração do parágrafo.
      (Padrão: None).

  Returns:
    string: O parágrafo gerado pela concatenação das frases geradas.
"""
def generate_paragraph(self, density=3, seed=None):
```

## Texto:
```Python
"""
  Gerando um texto de um tamanho específico a partir de uma semente.

  Args:
    size (int, opcional): Tamanho do texto em quantidade de parágrafos.
      (Padrão: 3).
    density (int, opcional): Tamanho dos parágrafos que compõe o texto.
      (Padrão: 3).
    seed (any, opcional): Valor que será utilizado como semente nas funções de
      randomização durante a geração do texto. (Padrão: None).

  Returns:
    string: O texto gerado pela concatenação dos parágrafos gerados.
"""
def generate_text(self, size=3, density=3, seed=None):
```

# Gerando Frases:
Você pode gerar frases de forma aleatória ou de forma controlada, utilizando uma semente como parâmetro opcional através da função `generate_phrase(seed=None)`. Quando omitido o parâmetro da semente, uma semente aleatória será gerada através de um `random.randint(0,99999)`.

```Python
from pylerolero import PyLeroLero

# Instancia a classe do PyLeroLero:
pll = PyLeroLero()

# Exemplo de uso:
if __name__ == "__main__":
    
  # Gerando uma frase sem semente:
  print("\n----------\n[FRASE 1]:", pll.generate_phrase())

  # Gerando uma frase com semente:
  print("\n----------\n[FRASE 2]:", pll.generate_phrase(seed="Luke, eu sou seu pai!"))
```

Resultados:

```Text
----------
[FRASE 1]: Pensando mais a longo prazo, a consulta aos diversos militantes obstaculiza a apreciação da importância das condições inegavelmente apropriadas.

----------
[FRASE 2]: Podemos já vislumbrar o modo pelo qual o desafiador cenário globalizado exige a precisão e a definição do orçamento setorial.
```

As frases são geradas a partir de quatro listas de segmentos, onde um elemento de cada lista é concatenado ao outro seguindo o seguinte padrão:

```Text
"seg1 seg2 seg3 seg4"
```

Para que as frases geradas sejam minimamente coesas, as listas de segmentos estão organizadas da seguinte forma semântica:

```Text
SEGMENTO 1 DA FRASE:
  O [seg1] serve como um adjunto adverbial de início de frase ou conectivo.
  Ele estabelece a ligação lógica da frase com o que a precede, indicando uma
  relação de oposição ("No entanto"), tempo ("Pensando mais a longo prazo"),
  causa/consequência ("Por conseguinte") ou simplesmente introduzindo o
  assunto ("Caros amigos,").

SEGMENTO 2 DA FRASE:
  O [seg2] é o sujeito da oração. Geralmente, ele é composto por um
  substantivo ou uma expressão substantivada (como "a execução dos pontos do
  programa") que realiza a ação expressa pelo verbo. É o "quem" ou "o que"
  da frase.

SEGMENTO 3 DA FRASE:
  O [seg3] é o verbo da oração, acompanhado, na maioria dos casos, de um
  complemento verbal (como "nos obriga à análise"). Ele expressa a ação,
  estado ou fenômeno realizado pelo sujeito. É o coração da frase, que
  indica o que está acontecendo.

SEGMENTO 4 DA FRASE:
  O [seg4] funciona como o complemento do complemento verbal (adjunto
  adverbial ou complemento nominal) do seg3. Ele complementa o sentido do
  verbo e da expressão anterior, detalhando a ação, a análise,
  a formulação, etc. Geralmente, é introduzido por uma preposição
  (como "das condições", "do sistema") e especifica sobre o que a ação
  do verbo se refere.
```

# Gerando Parágrafos:

Você pode gerar parágrafos de forma aleatória ou de forma controlada, utilizando uma semente como parâmetro opcional através da função `generate_paragraph(density=3, seed=None)`. Adicionalmente, você pode definir o tamanho do seu parágrafo através do parâmetro de densidade (o padrão é 3). Quando omitido o parâmetro da semente, uma semente aleatória será gerada através de um `random.randint(0,99999)`.

```Python
from pylerolero import PyLeroLero

# Instancia a classe do PyLeroLero:
pll = PyLeroLero()

# Exemplo de uso:
if __name__ == "__main__":

  # Gerando um parágrafo de densidade 3 sem semente:
  print("\n----------\n[PARÁGRAFO 1]:", pll.generate_paragraph(density=3))
  
  # Gerando um parágrafo de densidade 3 com semente:
  print("\n----------\n[PARÁGRAFO 2]:", pll.generate_paragraph(density=3, seed="Luke, eu sou seu pai!"))
```

Resultados:

```Text
----------
[PARÁGRAFO 1]: Assim mesmo, o consenso sobre a necessidade de qualificação afeta positivamente a correta previsão das formas de ação. As experiências acumuladas demonstram que a mobilidade dos capitais internacionais deve passar por modificações independentemente das condições inegavelmente apropriadas. A certificação de metodologias que nos auxiliam a lidar com o julgamento imparcial das eventualidades estimula a padronização de alternativas às soluções ortodoxas.

----------
[PARÁGRAFO 2]: Não obstante, a revolução dos costumes não pode mais se dissociar dos relacionamentos verticais entre as hierarquias. Pensando mais a longo prazo, a determinação clara de objetivos acarreta um processo de reformulação e modernização das condições financeiras e administrativas exigidas. Todas estas questões, devidamente ponderadas, levantam dúvidas sobre se o novo modelo estrutural aqui preconizado apresenta tendências no sentido de aprovar a manutenção das posturas dos órgãos dirigentes com relação às suas atribuições.
```

# Gerando Textos:

Você pode gerar textos de forma aleatória ou de forma controlada, utilizando uma semente como parâmetro opcional através da função `generate_text(size=3, density=3, seed=None)`. Adicionalmente, você pode definir o tamanho do seu texto através do parâmetro de tamanho (o padrão é 3). Pode também definir a densidade dos parágrafos que compõe o texto através do parâmetro de densidade (o padrão é 3). Quando omitido o parâmetro da semente, uma semente aleatória será gerada através de um `random.randint(0,99999)`.

```Python
from pylerolero import PyLeroLero

# Instancia a classe do PyLeroLero:
pll = PyLeroLero()

# Exemplo de uso:
if __name__ == "__main__":

  # Gerando um texto de tamanho 3 sem semente:
  print("\n----------\n[TEXTO 1]:", pll.generate_text(size=3))
  
  # Gerando um texto de tamanho 3 com semente:
  print("\n----------\n[TEXTO 2]:", pll.generate_text(size=3, seed="Luke, eu sou seu pai!"))
```

Resultados:

```Text
----------
[TEXTO 1]: Por outro lado, o acompanhamento das preferências de consumo acarreta um processo de reformulação e modernização das novas proposições. O incentivo ao avanço tecnológico, assim como a determinação clara de objetivos pode nos levar a considerar a reestruturação do processo de comunicação como um todo. Por conseguinte, o início da atividade geral de formação de atitudes possibilita uma melhor visão global das formas de ação.

A certificação de metodologias que nos auxiliam a lidar com a expansão dos mercados mundiais estende o alcance e a importância das diversas correntes de pensamento. O cuidado em identificar pontos críticos no aumento do diálogo entre os diferentes setores produtivos assume importantes posições no estabelecimento dos relacionamentos verticais entre as hierarquias. O incentivo ao avanço tecnológico, assim como a percepção das dificuldades acarreta um processo de reformulação e modernização dos paradigmas corporativos.

No entanto, não podemos esquecer que a mobilidade dos capitais internacionais causa impacto indireto na reavaliação das posturas dos órgãos dirigentes com relação às suas atribuições. Evidentemente, a consolidação das estruturas acarreta um processo de reformulação e modernização das direções preferenciais no sentido do progresso. No mundo atual, a complexidade dos estudos efetuados faz parte de um processo de gerenciamento do remanejamento dos quadros funcionais.

----------
[TEXTO 2]: É importante questionar o quanto o acompanhamento das preferências de consumo desafia a capacidade de equalização de todos os recursos funcionais envolvidos. No mundo atual, o desafiador cenário globalizado aponta para a melhoria das condições financeiras e administrativas exigidas. Por conseguinte, a consolidação das estruturas apresenta tendências no sentido de aprovar a manutenção do investimento em reciclagem técnica.

Percebemos, cada vez mais, que a consulta aos diversos militantes possibilita uma melhor visão global dos paradigmas corporativos. Por outro lado, a estrutura atual da organização prepara-nos para enfrentar situações atípicas decorrentes das novas proposições. Nunca é demais lembrar o peso e o significado destes problemas, uma vez que a estrutura atual da organização faz parte de um processo de gerenciamento dos índices pretendidos.

O que temos que ter sempre em mente é que a consolidação das estruturas ainda não demonstrou convincentemente que vai participar na mudança do fluxo de informações. Por conseguinte, o desafiador cenário globalizado cumpre um papel essencial na formulação de todos os recursos funcionais envolvidos. Não obstante, o aumento do diálogo entre os diferentes setores produtivos talvez venha a ressaltar a relatividade das posturas dos órgãos dirigentes com relação às suas atribuições.
```

# Personalização

O pacote agora oferece também a capacidade de personalizar a geração de frases, parágrafos e textos através da injeção de novos segmentos na classe. Para isso, utilize a função de injeção passando por parâmetro um JSON com o modo de injeção e os novos termos em cada segmento:

```Python
'''
  Injetando novos segmentos para personalizar a geração de frases,
  parágrafos e textos.
  
  Args:
    injection (json): JSON contendo o modo desejado e as listas de
      termos para cada segmento.
      
  Returns:
    json: Retorna um JSON com o resultado final dos segmentos
      após a injeção.
'''
def inject(self, injection=None):
```

## Exemplo de JSON para Injeção:

Existem duas opções possíveis para o `mode`:
- "append": irá adicionar os novos segmentos aos segmentos já existentes;
- "replace": irá substituir todos os segmentos existentes pelos novos segmentos.

```JSON
{
  "mode": "append",
  "segments": {
    "adjuntos": [
      "Neste exemplo ",
      "No exemplo a seguir "
    ],
    "sujeitos": [
      "o sujeito um ",
      "o sujeito dois "
    ],
    "verbos": [
      "foi injetado ",
      "foi adicionado "
    ],
    "complementos": [
      "para personalizar a geração de frases.",
      "para adicionar novos segmentos."
    ]
  }
}
```
## Exemplo de Injeção:

Injetando o JSON exemplificado acima no modo "replace":

```Python
import json
from pylerolero import PyLeroLero

# Exemplo de uso:
if __name__ == "__main__":
    
  # Instancia a classe do PyLeroLero:
  pll = PyLeroLero()
  
  # Lendo um arquivo JSON para injetar novos segmentos no PyLeroLero:
  with open("inject.json", "r", encoding="utf-8") as f:
    injection = json.load(f)
    print(pll.inject(injection))
  
  # Gerando um texto de tamanho 3 sem semente:
  print("\n----------\n[TEXTO 1]:", pll.generate_text(size=3))
  
  # Gerando um texto de tamanho 3 com semente:
  print("\n----------\n[TEXTO 2]:", pll.generate_text(size=3, seed="Luke, eu sou seu pai!"))
```

Resultado obtido:

```Text
----------
[TEXTO 1]: Neste exemplo o sujeito dois foi injetado para adicionar novos segmentos. No exemplo a seguir o sujeito dois foi injetado para personalizar a geração de frases. Neste exemplo o sujeito dois foi adicionado para adicionar novos segmentos.

Neste exemplo o sujeito dois foi injetado para personalizar a geração de frases. Neste exemplo o sujeito um foi adicionado para adicionar novos segmentos. Neste exemplo o sujeito dois foi adicionado para personalizar a geração de frases.

No exemplo a seguir o sujeito dois foi injetado para adicionar novos segmentos. No exemplo a seguir o sujeito dois foi injetado para adicionar novos segmentos. Neste exemplo o sujeito um foi adicionado para personalizar a geração de frases.

----------
[TEXTO 2]: No exemplo a seguir o sujeito um foi injetado para personalizar a geração de frases. Neste exemplo o sujeito um foi injetado para adicionar novos segmentos. No exemplo a seguir o sujeito dois foi injetado para adicionar novos segmentos.

Neste exemplo o sujeito um foi injetado para personalizar a geração de frases. Neste exemplo o sujeito um foi injetado para personalizar a geração de frases. No exemplo a seguir o sujeito dois foi adicionado para adicionar novos segmentos.

Neste exemplo o sujeito dois foi adicionado para personalizar a geração de frases. No exemplo a seguir o sujeito dois foi adicionado para adicionar novos segmentos. No exemplo a seguir o sujeito um foi injetado para adicionar novos segmentos.
```

# Contribuições

Contribuições são sempre bem-vindas! Se você tiver mais palavras ou frases para adicionar, sinta-se à vontade para abrir uma pull request.

- Faça um Fork do projeto.
- Crie uma nova branch `git checkout -b feature/sua-feature`;
- Adicione suas alterações `git add .`;
- Faça um Commit `git commit -m 'Adiciona nova feature'`;
- Envie para o GitHub `git push origin feature/sua-feature`;
- Abra um Pull Request.