A full-stack AI research paper intelligence platform for semantic search, analysis, and recommendations using machine learning. Built with React, FastAPI, and Jupyter notebooks.
- Semantic Search: Find relevant papers using Sentence Transformers and FAISS vector similarity
- Keyword Extraction: Automatically extract important keywords from papers
- Technical Entity Extraction: Identify models, datasets, metrics, and frameworks
- PDF Analyzer: Upload and analyze research PDFs
- Paper Q&A: Ask questions about paper content
- Recommendations: Find similar papers based on vector embeddings
- Demo Mode: Works out-of-box with sample data (full dataset optional)
- Python 3.8+ (tested with Python 3.14)
- Node.js 16+ and npm/yarn
- Git for version control
- Optional: Google Colab for running notebooks with GPU
ML development lives in Jupyter notebooks (.ipynb files only), not in production code. The backend connects the UI with processed outputs from notebooks.
After running notebooks, copy these files to backend/data/:
cleaned_arxiv_papers.csv— Processed paper metadata (title, abstract, etc.)arxiv_embeddings.npy— Vector embeddings from Sentence Transformersfaiss_index.index— FAISS index for fast similarity search
Note: Without these files, the app runs in demo mode using 6 sample papers.
Dataset: CShorten/ML-ArXiv-Papers from Hugging Face
Amount used in the final notebooks: 50,000 research papers
Main fields used:
titleabstractpaper_text = title + abstract
AI_Research_Paper_Intelligence_System/
├── backend/ # FastAPI backend
│ ├── main.py # App entry point
│ ├── schemas.py # Request/response models
│ ├── requirements.txt # Python dependencies
│ ├── routes/ # API route handlers
│ │ ├── search.py
│ │ ├── keywords.py
│ │ ├── entities.py
│ │ ├── recommend.py
│ │ ├── summarize.py
│ │ ├── pdf_analyzer.py
│ │ └── qa.py
│ ├── services/ # Business logic
│ │ ├── search_service.py
│ │ ├── keyword_service.py
│ │ ├── entities_service.py
│ │ ├── recommendation_service.py
│ │ ├── summarizer_service.py
│ │ ├── pdf_service.py
│ │ └── qa_service.py
│ ├── utils/ # Utilities
│ │ ├── config.py
│ │ └── __init__.py
│ ├── data/ # Generated dataset files (gitignored)
│ └── README.md
│
├── frontend/ # React + Vite frontend
│ ├── src/
│ │ ├── App.jsx # Main app component
│ │ ├── main.jsx # Entry point
│ │ ├── components/ # Reusable components
│ │ │ ├── Navbar.jsx
│ │ │ └── ResultCard.jsx
│ │ ├── pages/ # Page components
│ │ │ ├── Home.jsx
│ │ │ ├── SearchPapers.jsx
│ │ │ ├── PdfAnalyzer.jsx
│ │ │ ├── PaperQA.jsx
│ │ │ └── Dashboard.jsx
│ │ ├── services/ # API client
│ │ │ └── api.js
│ │ └── styles/
│ │ └── global.css
│ ├── index.html
│ ├── package.json
│ └── README.md
│
├── notebooks/ # Jupyter notebooks (ML development)
│ ├── 01_eda_and_embeddings.ipynb # Data processing & embeddings
│ ├── 02_search_engine.ipynb # FAISS index creation
│ ├── 03_pdf_paper_analyzer.ipynb # PDF parsing
│ └── 04_recommendation_system.ipynb # Recommendation logic
│
├── docs/ # Documentation
│ └── PROJECT_NOTES.md
│
├── verify_project.py # Project validation script
├── .gitignore # Git ignore rules
└── README.md # This file
Start immediately with 6 sample papers:
# Terminal 1: Start backend
cd backend
pip install -r requirements.txt
uvicorn main:app --reload --app-dir . --port 8000
# Terminal 2: Start frontend
cd frontend
npm install
npm run devOpen http://localhost:5173 in your browser.
Run notebooks in sequence in Google Colab or local Jupyter:
# Local setup
pip install jupyter pandas numpy torch transformers sentence-transformers faiss-cpu scikit-learn
jupyter notebook notebooks/Run notebooks in order:
-
01_eda_and_embeddings.ipynb
- Loads
CShorten/ML-ArXiv-Papersdataset - Outputs:
cleaned_arxiv_papers.csv,arxiv_embeddings.npy
- Loads
-
02_search_engine.ipynb
- Creates FAISS index for fast search
- Outputs:
faiss_index.index
-
03_pdf_paper_analyzer.ipynb
- PDF extraction and processing
-
04_recommendation_system.ipynb
- Similarity-based recommendations
# Copy outputs from notebooks to backend
cp cleaned_arxiv_papers.csv backend/data/
cp arxiv_embeddings.npy backend/data/
cp faiss_index.index backend/data/# Terminal 1: Backend
cd backend
pip install -r requirements.txt
uvicorn main:app --reload --app-dir . --port 8000
# Terminal 2: Frontend
cd frontend
npm install
npm run devEndpoints:
- Frontend: http://localhost:5173 (or http://localhost:5174, etc.)
- Backend API: http://127.0.0.1:8000
- API Docs: http://127.0.0.1:8000/docs
GET /— Project infoGET /health— Health check
-
POST /api/search— Semantic search by query- Body:
{query: string, top_k: int, include_summary: bool} - Returns: Array of matching papers with scores
- Body:
-
POST /api/recommend— Find similar papers- Body:
{paper_index: int, top_k: int} - Returns: Recommended papers with similarity scores
- Body:
-
POST /api/keywords— Extract keywords- Body:
{text: string} - Returns:
{keywords: []}
- Body:
-
POST /api/entities— Extract technical entities- Body:
{text: string} - Returns:
{models: [], datasets: [], metrics: [], frameworks: []}
- Body:
-
POST /api/summarize— Summarize text- Body:
{text: string} - Returns:
{summary: string}
- Body:
-
POST /api/ask-paper— Q&A on paper text- Body:
{question: string, paper_text: string, top_k: int} - Returns:
{answers: [string]}
- Body:
POST /api/upload-pdf— Upload and analyze PDF- Body: multipart form with
file(PDF) - Returns: Extracted text, sections, keywords, entities
- Body: multipart form with
Interactive API docs: http://127.0.0.1:8000/docs
Source: CShorten/ML-ArXiv-Papers (Hugging Face Hub)
Size: 50,000 research papers (optional for full deployment)
Fields Used:
title— Paper titleabstract— Paper abstractpaper_text— Combined title + abstract for embedding
Issue: Could not import module "main"
Solution: Ensure you're in the project root, then:
uvicorn main:app --reload --app-dir backend --port 8000Issue: "React is not defined" error in console
Solution: React import is missing in components. Ensure all components import React:
import React from 'react';Solution: Change port:
uvicorn main:app --port 8001 # Backend
npm run dev -- --port 5175 # FrontendBackend:
cd backend
pip install -r requirements.txtFrontend:
cd frontend
npm install
# or clear cache: npm cache clean --forceIf notebooks output files >100MB, add them to .gitignore (already done for:
backend/data/*.csvbackend/data/*.npybackend/data/*.index)
The backend includes 6 sample papers and runs without external dataset files:
SAMPLE_PAPERS = [
{"title": "Attention Based Neural Machine Translation", ...},
{"title": "Convolutional Neural Networks for Medical Image Analysis", ...},
# ... 4 more
]Use this for quick testing without running notebooks.
This is a demo/educational project. Future enhancements:
- User authentication & multi-user DB
- Real-time arXiv crawling
- Model fine-tuning
- Production deployment (Docker, load balancing)
- Citation graph analysis
- Advanced filtering & faceted search
the backend uses a small built-in demo dataset and TF-IDF fallback search. This is only for testing the app flow. For the actual ML system, run the notebooks and copy the generated files into backend/data/.