Abaixo está um projeto conceitual para o aplicativo Gerador de TCC (ABNT), cobrindo desde a arquitetura até possíveis implementações de cada parte do sistema. A ideia é oferecer um panorama de como desenvolver o app de ponta a ponta, integrando as funcionalidades solicitadas.
1. Visão Geral do Projeto
O Gerador de TCC (ABNT) será uma aplicação web (e futuramente mobile) capaz de:
- Receber o tema escolhido pelo usuário.
- Buscar automaticamente artigos em fontes científicas (Google Scholar e PubMed).
- Gerar um TCC completo em formato ABNT (capa, folha de rosto, sumário, introdução, revisão da literatura, metodologia, resultados, discussão e conclusão).
- Incluir citações e referências no padrão ABNT.
- Permitir edição do texto antes da exportação final.
- Exportar o trabalho em PDF e DOCX.
Principais Desafios
- Scraping/busca de artigos no Google Scholar (respeitando as limitações e políticas de uso).
- Integração com a PubMed API para obtenção de artigos científicos.
- Formatação automática em ABNT, especialmente de citações diretas, indiretas e referências bibliográficas.
- Geração automática de texto (estruturado) utilizando alguma API de NLP (por exemplo, OpenAI, HuggingFace ou uma API própria).
- Edição e customização de trechos antes da exportação.
2. Arquitetura de Software
A arquitetura proposta segue o modelo em camadas:
-
Frontend (React ou Vue.js)
- Responsável pela interface com o usuário (UI/UX).
- Formular a busca pelo tema, exibir resultados, editar texto, pré-visualizar e exportar.
-
Backend (Node.js + Express)
- Responsável pela lógica de negócio.
- Faz requisições a serviços externos (Google Scholar, PubMed, APIs de processamento de texto).
- Faz a formatação ABNT (pode ter um módulo específico para isso).
- Gera o documento final (PDF e DOCX).
-
Banco de Dados (Firebase Firestore ou PostgreSQL)
- Armazenar preferências do usuário, histórico de temas, textos pré-gerados, citações e referências.
-
Serviços externos (APIs)
- Google Scholar Scraper ou SerpAPI para buscar artigos acadêmicos (título, autor, resumo, etc.).
- PubMed API para buscas de artigos científicos.
- API de NLP / Geração de texto (pode ser uma API própria ou de terceiros).
Diagrama Simplificado
text
┌───────────────┐
│ Frontend │ (React/Vue)
└───────────────┘
│
▼
┌────────────────────┐
│ Backend (Node.js) │
│ + Express │
└────────────────────┘
│
▼
┌────────────────────┐
│ Serviços Externos │
│ - Google Scholar │
│ - PubMed API │
│ - API de NLP │
└────────────────────┘
│
▼
┌────────────────────┐
│ Banco de Dados │
│ (Firestore / PGSQL)│
└────────────────────┘
3. Fluxo de Funcionamento
- Input do tema: o usuário digita o tema do TCC.
- Busca de artigos:
- O backend recebe o tema e consulta:
- Google Scholar (via Scraper ou SerpAPI)
- PubMed (usando a API oficial)
- Retorna as referências encontradas (título, autor, resumo, etc.).
- Geração automática do texto:
- O backend, ao receber as referências, pode chamar uma API de NLP para criar o esboço dos capítulos (introdução, revisão da literatura, etc.).
- As citações (diretas/indiretas) são inseridas com formatação ABNT provisória (ex.: sobrenome, ano).
- Formatação ABNT:
- Um módulo específico no backend formata todo o documento no padrão ABNT, incluindo sumário e lista de referências.
- Edição no frontend:
- O usuário visualiza o texto pré-gerado e pode editar cada seção (introdução, objetivos, metodologia, etc.) em um editor WYSIWYG (por exemplo, Quill.js, Draft.js ou outro similar).
- Exportação:
- Após a finalização, o usuário solicita exportar o documento.
- O backend gera os arquivos PDF e/ou DOCX (por exemplo, usando bibliotecas como
pdfkit
, puppeteer
, docx
npm ou docxtemplater
).
- Os arquivos são enviados ao frontend para download ou salvos no próprio servidor/nuvem para compartilhamento.
4. Detalhamento das Principais Funcionalidades
4.1. Captura do Tema e Configurações Iniciais
- No frontend, o usuário informa:
- Tema (Ex.: “Impacto da Inteligência Artificial na Medicina”).
- Palavras-chave adicionais (opcional).
- Língua (português, inglês, etc. – se houver interesse).
- Esses dados são enviados ao backend via REST (endpoint
POST /api/tcc/buscar
por exemplo).
4.2. Módulo de Busca de Artigos
- No backend:
- SerpAPI ou Google Scholar Scraper:
- Realiza a pesquisa com o tema e palavras-chave.
- Retorna lista de resultados: título, autores, snippet (resumo), link, etc.
- PubMed API:
- Utiliza o endpoint de busca de artigos (
/pubmed
) para encontrar estudos relacionados.
- Retorna resultados semelhantes (PMID, título, autores, resumo, link do artigo).
- O backend consolida os resultados e filtra duplicatas.
4.3. Módulo de Geração de Texto (NLP)
- Recebendo os artigos relevantes e o tema, o sistema pode:
- Gerar um esboço de cada seção (introdução, revisão, metodologia, etc.).
- Inserir citações no corpo do texto, referenciando artigos (ex.: “Segundo Silva (2020), …”).
- Para isso, é possível usar:
- API OpenAI (ChatGPT) ou outra, como HuggingFace, Microsoft Azure Cognitive, etc.
- Modelo próprio rodando em um servidor local ou via container Docker (mais complexo).
4.4. Módulo de Formatação ABNT
- Após gerar o texto, há a necessidade de:
- Adequar fontes e espaçamentos (fonte Times New Roman ou Arial, espaçamento 1,5, parágrafos, recuo, etc.).
- Gerar capa, folha de rosto, sumário, lista de figuras (se houver).
- Citações no corpo do texto devem seguir o formato “(SOBRENOME, Ano)” ou “Sobrenome (Ano)”.
- Referências ao final, seguindo a NBR 6023.
- Modelo: SOBRENOME, Nome. Título do artigo. Nome do periódico, v. X, n. X, p. X-Y, Ano.
- Pode-se criar uma função utilitária de formatação ABNT que recebe dados do artigo (autor, título, etc.) e retorna a string formatada.
Exemplo de pseudocódigo para formatação de referências:
js
function formatReferenceABNT(article) {
// Exemplo de objeto article:
// {
// authors: ["JOHNSON, M. L.", "SILVA, A. J."],
// title: "Título do artigo",
// journal: "Revista Científica X",
// volume: "v.2",
// number: "n.4",
// pages: "p.34-45",
// year: "2024"
// }
// Montagem simplificada (o ideal é tratar regras de cada tipo de referência)
return `${article.authors.join('; ')}. ` +
`${article.title}. ` +
`${article.journal}, ` +
`${article.volume}, ` +
`${article.number}, ` +
`${article.pages}, ` +
`${article.year}.`;
}
4.5. Edição do Texto (Frontend)
- O usuário terá um editor WYSIWYG:
- Possibilidade de alterar, remover ou adicionar parágrafos.
- Reformatar citações se necessário.
- Mover seções, etc.
- Salvar as alterações no banco de dados (ou em cache local) para posterior exportação.
4.6. Exportação para PDF e DOCX
- Ao finalizar a edição, o usuário clica em “Exportar”.
- O frontend envia uma requisição
POST /api/tcc/exportar
, informando o ID do projeto ou o corpo final.
- No backend:
- Uma biblioteca de geração de PDF (ex.: pdfkit, puppeteer para conversão HTML → PDF, ou jspdf).
- Para DOCX:
- Pode-se usar o docxtemplater (preenchendo um template .docx).
- Ou a biblioteca docx (
npm install docx
) que gera arquivos Office programaticamente.
5. Banco de Dados
Estrutura de Dados (Exemplo em Firestore)
Estrutura de Dados (Exemplo em PostgreSQL)
- Tabela
users
: (id, name, email, password_hash, etc.)
- Tabela
projects
: (id, user_id, theme, status, created_at, updated_at)
- Tabela
sections
: (id, project_id, title, content)
- Tabela
references
: (id, project_id, authors, title, journal, year, ...)
6. Considerações sobre Responsividade e UX
- Utilizar componentes responsivos (ex.: Bootstrap, Tailwind, ou o grid flex do próprio React/Vue).
- Facilitar a leitura do texto gerado com trechos organizados (colapso/expansão de seções).
- Permitir edições rápidas (inline editing) e visualização em tempo real de como ficará a formatação (live preview).
- Disponibilizar templates ABNT para personalizar margens, capa e folha de rosto (para cada instituição, que pode ter regras particulares).
7. Possível Stack de Tecnologias
-
Frontend:
- React (CRA ou Next.js) ou Vue.js (Vue CLI ou Nuxt.js).
- Editor WYSIWYG: Draft.js, Quill.js ou CKEditor.
- Libs de UI: Material-UI, Bootstrap ou Vuetify (para Vue).
-
Backend:
- Node.js + Express.
- Criação de APIs REST para:
/api/tcc/buscar
: busca inicial de artigos
/api/tcc/gerar-texto
: chama o módulo de NLP
/api/tcc/exportar
: gera o PDF/DOCX
- Formatação ABNT como um módulo de utilidades JS.
-
Banco de Dados:
- Firebase Firestore (NoSQL) ou PostgreSQL.
- Se for Firestore, facilita a escalabilidade e integrações.
- PostgreSQL é robusto e compatível com diversas ferramentas de BI.
-
Integrações:
- Scraper do Google Scholar (cuidado com limites e termos de uso).
- PubMed API: é uma API bem documentada e confiável.
- API de NLP: ex. OpenAI (
text-davinci-003
ou gpt-3.5-turbo
) para esboços de texto, dependendo das necessidades e do orçamento.
-
Hospedagem:
- Frontend em Netlify, Vercel ou similar.
- Backend em Heroku, AWS (EC2, ECS ou Amplify), Railway, etc.
- Banco de Dados (Firestore → Google Cloud / PostgreSQL → Heroku, AWS RDS, ElephantSQL, etc.).
8. Exemplo de Rotas (Node.js + Express)
js
const express = require('express');
const router = express.Router();
// 1. Busca inicial de artigos
router.post('/buscar', async (req, res) => {
try {
const { theme } = req.body;
// Chamar função que acessa SerpAPI / Google Scholar / PubMed
const articles = await searchArticles(theme);
// Retorna artigos ao frontend
res.json({ articles });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// 2. Geração de texto com base nos artigos
router.post('/gerar-texto', async (req, res) => {
try {
const { theme, articles } = req.body;
// Chamar API de NLP, por ex., OpenAI
const generatedSections = await generateTCCText(theme, articles);
res.json({ sections: generatedSections });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// 3. Exportar PDF ou DOCX
router.post('/exportar', async (req, res) => {
try {
const { projectId, format } = req.body;
// Obter dados do projeto do DB
const project = await getProjectById(projectId);
// Chamar função de formatação ABNT e geração de arquivo
const fileBuffer = await generateDocument(project, format); // PDF ou DOCX
// Enviar arquivo para download
res.setHeader('Content-Disposition', `attachment; filename="tcc.${format}"`);
res.send(fileBuffer);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
module.exports = router;
9. Segurança e Ética
- Scraping Google Scholar: verificar termos de uso; há risco de bloqueios. Alternar com SerpAPI (paga, porém confiável e oficial).
- API de NLP: lidar com limites de tokens, custo e possíveis falhas. Sempre permitir que o usuário edite o texto gerado para evitar plágio e inconsistências.
- Formatação ABNT e citar fontes corretamente: fundamental fornecer as fontes originais e não infringir direitos autorais.
- Privacidade: se for armazenar dados de usuários (ou TCCs), seguir LGPD/GDPR.
10. Roadmap e Próximos Passos
- MVP
- Implementar busca de artigos (PubMed + SerpAPI).
- Gerar texto simples (talvez via templates) e formatação ABNT básica.
- Exportar PDF.
- Fase 2
- Integrar API de NLP para geração de texto mais sofisticada.
- Editor WYSIWYG avançado com citações em tempo real.
- Exportar DOCX.
- Fase 3
- Implementar autenticação de usuários.
- Armazenar múltiplos TCCs por usuário.
- Customização avançada de formatação ABNT (ex.: itens de sumário, apêndices, glossário).
- Fase 4
- Lançar versão mobile (React Native ou Vue Native) para, pelo menos, visualização e pequenas edições.
- Otimizar performance de scraping e adicionar outras bases (Scopus, Web of Science, etc.).
Conclusão
Com esse projeto, teremos um Gerador de TCC (ABNT) que:
- Usa Node.js no backend para orquestrar busca de artigos e formatação.
- React/Vue.js no frontend para oferecer uma interface intuitiva, responsiva e com editor de texto avançado.
- Integrações com APIs externas (PubMed, SerpAPI/Google Scholar) para obter o conteúdo científico.
- Formatação ABNT automatizada, mas sempre com a possibilidade de edição manual antes da exportação.
Dessa forma, o aplicativo permitirá que estudantes ou profissionais gerem rapidamente a estrutura básica de seus trabalhos, com referências e citações padronizadas, acelerando o processo de escrita, mas mantendo a possibilidade de personalização e revisão — essencial para garantir a qualidade acadêmica do material.