Codebase for the analysis (see preprint in BioRxiv: https://doi.org/10.64898/2026.01.13.699306)
This repository contains a research pipeline for collecting, curating, cleaning, and visualizing publication metadata related to mathematical models in oncology. The current codebase is centered on main.py, with supporting modules in src/.
We used pipenv to manage the project dependencies. You can use the Pipfile shared with the repository to install the dependencies:
pip install --user pipenv
pipenv installOr, for any other dependency manager, we also provide the requirements.txt file.
Full code execution requires access to the following APIs:
- Scopus (publication metadata)
- OpenAlex (pdf fulltext for context generation)
- OpenAI (AI-assisted curation)
- Anthropic (AI-assisted curation)
- Gemini (AI-assisted curation)
A demo version to execute offline data processing automatically pulls preprocessed data from Zenodo. This allows to check code execution without having to set credentials for the services we use, and without using tokens.
If you prefer to test the full pipeline, make sure to have access to all the services required (see next section), and to have enough tokens to run the LLM-curation validation, and full dataset curation. Then, set ZENODO_PULL=False in the main.py file, and execute (see next sections).
This step is not required when running the pipeline in Demo / offline mode (see above).
Create config/config.json.
To setup access to Scopus, place your Scopus API key in the config file:
{
"apikey": "PASTE_SCOPUS_API_KEY_HERE",
"insttoken": ""
}If you have access to multiple API keys, the pipeline will automatically rotate through those:
{
"apikeys": [
"PASTE_FIRST_SCOPUS_API_KEY_HERE",
"PASTE_SECOND_SCOPUS_API_KEY_HERE",
...
],
"insttoken": ""
}To evaluate and run the LLM curation you need access to several LLM providers (Anthropic, OpenAI, Gemini). Paste your API Keys in the config.json following the provided format:
{
"apikey": "PASTE_SCOPUS_API_KEY_HERE",
"insttoken": "",
"openalex_apikey": "PASTE_OPENALEX_KEY_HERE",
"openai_apikey": "PASTE_OPENAI_KEY_HERE",
"anthropic_apikey": "PASTE_ANTHROPIC_KEY_HERE",
"gemini_apikey": "PASTE_GOOGLE_GEMINI_KEY_HERE"
}Activate the environment and run:
pipenv run python3 main.pyThe script writes logs to log/ and generated analysis products to output/ (or demo/output if using Zenodo).
Input data sit in data/:
data/evaluation_human/: independent evaluations from human expertsdata/evaluation_llm/evaluation_test_dataset.xlsx: sample of 200 publications to test LLM-curation (the same evaluated by human experts)data/geo/: geographic reference files for world and US-state mapsdata/queries/scopus_query_str.txt: Scopus query used by the API search stepdata/regex/: regex dictionaries for cancer types, modeling methods, therapies, scientific areas, and author-keyword patternsdata/twimo/missing_dois.txt: contains the DOIs of the reviews for which there was no PDF in OpenAlexdata/TWIMO_Scopus.csv: Publications featured in TWiMO incsvformat
The current pipeline writes to output/ (or demo/output if using Zenodo). Typical generated folders include:
output/scopus_search_results_row/andoutput/scopus_search_results_clean/: Scopus search result cachesoutput/scopus_abstracts_row/: raw abstract metadata and converted CSVsoutput/scopus_abstracts_row_scored/: LLM-scored publication CSVs.output/scopus_abstracts_cleaned_scored/: cleaned, enriched, and filtered scored datasetsoutput/scopus_affiliations/andoutput/scopus_journal/: Scopus-derived affiliation and journal metadataoutput/evaluation_human/,output/evaluation_llm/, andoutput/evaluation_llm_comparison/: evaluator agreement and model comparison outputsoutput/figures/: Matplotlib figures and manuscript/supplementary figure layoutsoutput/maps/: CSVs referenced by D3 world/US map pagesoutput/chordcharts/: CSVs referenced by D3 chord chart pagesoutput/vosviewer/: VOSviewer-style network outputs used by later visualization steps
The D3 map and network pages live in src/map/ and src/network/. They read configuration JSON files that point to generated CSVs under output/maps/ and output/chordcharts/.
To visualize them, serve the repository root:
python3 -m http.serverThen open:
http://localhost:8000/src/map/map.htmlhttp://localhost:8000/src/map/map_US.htmlhttp://localhost:8000/src/network/chords.htmlhttp://localhost:8000/src/network/coauthorship.html
These pages require the corresponding generated output/ files to exist locally.
Preprint:
@article {Pradelli2026.01.13.699306,
author = {Pradelli, Franco and Strobl, Maximilian and Marzban, Sadegh and de Kermenguy, Fran{\c c}ois and Barnett, Ari and Ganesan, Katyayni and Hormuth, David A. and Hamis, Sara and Bhaskar, Dhananjay and Lorenzo, Guillermo and Anderson, Alexander R. A. and West, Jeffrey},
title = {140 Years of mathematical modeling in oncology through AI-assisted curation},
elocation-id = {2026.01.13.699306},
year = {2026},
doi = {10.64898/2026.01.13.699306},
publisher = {Cold Spring Harbor Laboratory},
URL = {https://www.biorxiv.org/content/early/2026/06/16/2026.01.13.699306},
eprint = {https://www.biorxiv.org/content/early/2026/06/16/2026.01.13.699306.full.pdf},
journal = {bioRxiv}
}
This project is licensed under the MIT License.
Franco Pradelli (franco.pradelli94@gmail.com)