Esta ferramenta converte requisitos textuais em linguagem natural para diagramas de classes de domínio, gerando automaticamente XML compatível com draw.io. Utiliza diferentes métodos de processamento de linguagem natural e modelos de linguagem grande (LLM) para identificar entidades, atributos e relacionamentos nos requisitos.
-
Múltiplos métodos de processamento:
- LLM Local (Llama) via Ollama
- LLMs Externos via OpenRouter (ChatGPT, Claude, etc.)
- Processamento NLP baseado em spaCy e textacy
- Processamento NLP avançado baseado em Stanza (otimizado para português de Portugal)
- Modo Híbrido (combinação de NLP e LLM)
-
Interface web intuitiva
-
Reconhecimento de requisitos no formato "RF[número]. [texto do requisito]"
-
Exportação em formato XML para draw.io
-
Visualização instantânea do diagrama gerado
- Python 3.8+
- Node.js 14+
- npm 6+
- Git
Após clonar o repositório, utilize o script de inicialização automática:
git clone https://github.com/seu-utilizador/req2dom.git
cd req2dom
chmod +x start_req2dom.sh
./start_req2dom.shO script irá:
- Verificar e instalar todas as dependências
- Criar o ambiente virtual Python
- Instalar os modelos necessários (spaCy e Stanza)
- Iniciar o backend e o frontend
A aplicação estará disponível em:
- Frontend: http://localhost:5173
- API: http://localhost:8000/api
cd req2dom/backend
# Criar e ativar ambiente virtual
python3 -m venv venv
source venv/bin/activate
# Instalar dependências
pip install -r requirements.txt
# Instalar modelos para spaCy
python -m spacy download pt_core_news_lg
python -m spacy download en_core_web_lg
# Instalar e configurar Stanza (recomendado para português)
./install_stanza.sh
# ou manualmente:
# pip install stanza
# python -c "import stanza; stanza.download('pt')"
# Configurar variáveis de ambiente (opcional)
cp .env.example .env
# Edite o ficheiro .env com as suas chaves API, se necessário
# Iniciar o servidor
uvicorn src.app:app --host 0.0.0.0 --port 8000 --reloadcd req2dom/frontend
# Instalar dependências
npm install
# Iniciar servidor de desenvolvimento
npm run dev- Aceda à interface web em http://localhost:5173
- Insira os requisitos na área de texto
- Selecione o método de processamento desejado
- Clique em "Processar Requisitos"
- Visualize o diagrama gerado e descarregue o XML para uso no draw.io
- LLM Local: Utiliza o modelo Llama 3.1 via Ollama para análise semântica completa
- LLM Externo: Utilize modelos como ChatGPT, Claude, Gemini através do OpenRouter
- spaCy+textacy: Processamento NLP tradicional com análise sintática e semântica
- Stanza: Processamento NLP avançado com melhor suporte para português de Portugal
- Híbrido: Combina NLP (Stanza por padrão) com LLM para resultados mais precisos
req2dom/
├── backend/
│ ├── src/
│ │ ├── api/ # Rotas da API FastAPI
│ │ ├── model/ # Processadores e geradores
│ │ └── app.py # Aplicação principal
│ ├── install_stanza.sh # Script de instalação do Stanza
│ ├── requirements.txt # Dependências Python
│ └── test_*.py # Testes e benchmarks
├── frontend/
│ ├── src/
│ │ ├── components/ # Componentes Vue
│ │ ├── assets/ # Recursos estáticos
│ │ └── App.vue # Componente principal
│ ├── index.html
│ └── package.json
└── start_req2dom.sh # Script de inicialização
Utiliza APIs externas de LLM. Este método:
- Proporciona processamento de alta qualidade através de modelos de ponta
- Suporta múltiplos fornecedores:
- OpenAI (GPT-3.5, GPT-4)
- Deepseek
- Qwen
- Google Gemini Pro
- Requer uma chave de API válida do fornecedor escolhido
- Oferece resultados consistentes e precisos
### 3. NLP Avançado
#### Stanza (Recomendado para português)
- Processador avançado otimizado para português de Portugal
- Melhor compreensão morfológica e sintática
- Extração mais precisa de entidades e relacionamentos
- Não necessita de API externa
#### spaCy + textacy
- Oferece extração avançada de entidades e relacionamentos
- Usa modelos de linguagem treinados para maior precisão
- Ideal para textos complexos que requerem uma compreensão mais sutil
### 4. Híbrido (NLP + LLM)
# Criar o ambiente virtual
python3 -m venv venv
# Ativar o ambiente virtual
source venv/bin/activate # No Linux/Mac
# ou
# venv\Scripts\activate # No Windows
cd backend
pip install -r requirements.txt# Verificar modelos disponíveis
ollama list
# Se o modelo llama3.1:8b não estiver instalado, instale-o
# (Isto pode demorar alguns minutos dependendo da sua conexão)
ollama pull llama3.1:8bNum terminal:
ollama run llama3.1:8bNoutro terminal:
# Ativar o ambiente virtual (se ainda não estiver ativado)
cd req2dom
source venv/bin/activate # No Linux/Mac
# ou
# venv\Scripts\activate # No Windows
# Iniciar o servidor backend
cd backend
uvicorn src.app:app --reloadO servidor estará disponível em http://localhost:8000.
Agora aceder á aplicação em http://localhost:8000.
- Na interface do utilizador, introduza os requisitos do sistema na área de texto à esquerda.
- Clique no botão "Processar".
- Aguarde enquanto o sistema processa os requisitos (isto pode demorar alguns segundos).
- O XML das classes de domínio gerado será exibido na área de texto à direita.
- Pode copiar o XML para a área de transferência ou guardá-lo como ficheiro.
- Importe o ficheiro XML para o DrawIO ou outra ferramenta de modelagem compatível.
O sistema de biblioteca deve permitir que os utilizadores requisitem livros.
Cada livro tem um título, autor e código ISBN.
Os utilizadores devem ser registados no sistema com nome, email e endereço.
Um utilizador pode ter várias requisições ativas.
RF01: O cliente deve poder registar-se no sistema fornecendo nome, email e telefone.
RF02: O cliente pode adicionar produtos ao carrinho de compras.
RF03: Os produtos têm nome, descrição, preço e quantidade em stock.
RF04: O sistema deve permitir que o cliente finalize a compra gerando uma encomenda.
RF05: Cada encomenda tem um código único, data, estado e valor total.
Para testar o processador Stanza:
cd backend
python test_stanza.pyPara comparar o desempenho entre Stanza e spaCy:
cd backend
python test_benchmark.pyO projeto inclui vários scripts de teste para validar o funcionamento dos processadores:
cd backend
# Testar o processador Stanza
python test_stanza.py
# Comparar performance entre Stanza e spaCy
python test_benchmark.py
# Testes gerais
python test_generic.pyPara configurar chaves de API externa ou ajustar configurações, edite o ficheiro .env no diretório backend:
# API Key para OpenRouter (necessária para LLM externo)
OPENROUTER_API_KEY=sua_chave_aqui
# Configuração do idioma para processamento NLP
LANGUAGE_MODEL=pt_core_news_lg
# Configuração do modelo Llama local
DEFAULT_LLAMA_MODEL=llama3.1:8b
Contribuições são bem-vindas! Por favor, envie pull requests para melhorias ou correções.
Este projeto está licenciado sob a licença MIT.