Skip to content

Publication Timeline KG

Track the lifecycle of biomedical research from preprint to peer-reviewed publication. Identify which fields are accelerating, which journals are fastest to review, and which author networks drive rapid translation.

Motivation

A preprint posted on bioRxiv may take 3 months or 3 years to appear in a peer-reviewed journal — or never. This variation signals where the field is investing review effort:

  • Fast conversion (< 6 months) = active, well-funded areas with dedicated reviewer pools
  • Slow conversion (> 1 year) = niche topics, understaffed review pipelines, or paradigm-shifting work requiring extended scrutiny
  • No conversion = negative results, incremental work, or preprints that serve as the final record

By building a knowledge graph of this lifecycle, we can:

  1. Identify emerging research fronts (topics accelerating toward publication)
  2. Benchmark journal review speeds per topic area
  3. Map author collaboration networks and their publication velocity
  4. Prioritize data sources for the main KG (published = higher confidence)

Schema

flowchart LR
    PP[Preprint] -->|PUBLISHED_AS\ndays_to_publication| PUB[Publication]
    PP -->|AUTHORED_BY| A[Author]
    PUB -->|AUTHORED_BY| A
    PUB -->|PUBLISHED_IN| J[Journal]
    PP -->|TAGGED_WITH| T[Topic]
    PUB -->|TAGGED_WITH| T
    PP -->|CITES| PP2[Preprint/Publication]
    A -->|COLLABORATES_WITH| A2[Author]

Node Types

Node Key Properties
Preprint doi, title, posted_date, category, abstract, version
Publication doi, title, journal, published_date, pmid, pmcid
Author name, orcid, institution
Journal name, issn, sjr_score, sjr_quartile, h_index, subject_area
Topic name, category

Relationship Types

Relationship Properties Meaning
PUBLISHED_AS days_to_publication, days_to_acceptance Preprint became this journal article
AUTHORED_BY position (first/last/middle), is_corresponding Who wrote it
PUBLISHED_IN Which journal accepted it
TAGGED_WITH Topic/keyword assignment
CITES context Reference links between papers
COLLABORATES_WITH paper_count Co-authorship (2+ shared papers)

Data Sources

Source What it provides Access
Europe PMC Preprint search (indexes bioRxiv), metadata, keywords Free API, no auth
Crossref DOI resolution, publication dates, is-preprint-of relations Free API, no auth
bioRxiv API Preprint details, category, versions Free API, no auth
Scimago (SJR) Journal impact scores, quartiles, h-index Manual CSV download

Usage

Interactive (TUI)

uv run bioingest
# Select: ⑥ Publication Timeline
# Enter queries: EGFR, IL-6, TP53
# Or type: gary (loads 276 entities from eval golden dataset)
# Set max preprints per query: 20
# → Outputs JSON to data/extractions/pub_timeline/

Programmatic

from bioingest.pub_timeline.pipeline import build_pub_timeline_kg, save_kg
from pathlib import Path

kg = build_pub_timeline_kg(
    queries=["EGFR", "IL-6", "TP53", "BRCA1"],
    max_per_query=50,
    data_dir=Path("data"),
)

save_kg(kg, Path("data/extractions/pub_timeline/my_run.json"))

# Analyze
preprints = [n for n in kg["nodes"] if n["type"] == "Preprint"]
pub_rels = [r for r in kg["relationships"] if r["type"] == "PUBLISHED_AS"]
days = [r["days_to_publication"] for r in pub_rels if r.get("days_to_publication")]
print(f"Median time to publication: {sorted(days)[len(days)//2]} days")

Derived Metrics

Metric Definition Use Case
median_days_to_publication Median calendar days from preprint to journal, per topic Compare review speed across fields
acceleration_score Slope of days-to-publication over time (negative = speeding up) Identify emerging fields
preprint_conversion_rate Fraction of preprints eventually published Signal topic maturity
journal_review_speed Per-journal median days to publication Benchmark journal responsiveness
author_velocity Average days-to-publication for an author's papers Identify fast-publishing networks

Example Results

From a test run (EGFR + TP53, 10 preprints):

Metric Value
Preprints fetched 10
Published in journal 4 (40%)
Median days to publication 248
Range 194–305 days
Unique authors 93
Journals 4

Output Format

JSON file with:

{
  "nodes": [
    {"id": "preprint:10.1101/...", "type": "Preprint", "title": "...", "posted_date": "2023-01-15"},
    {"id": "publication:10.1038/...", "type": "Publication", "journal": "Nature", "published_date": "2023-08-20"},
    {"id": "author:jane_doe", "type": "Author", "name": "Jane Doe", "orcid": "0000-0001-..."},
    {"id": "journal:nature", "type": "Journal", "sjr_score": 14.2, "sjr_quartile": "Q1"},
    {"id": "topic:egfr", "type": "Topic", "name": "EGFR"}
  ],
  "relationships": [
    {"source": "preprint:10.1101/...", "target": "publication:10.1038/...", "type": "PUBLISHED_AS", "days_to_publication": 217}
  ],
  "metadata": {
    "total_preprints": 100,
    "total_publications": 42,
    "conversion_rate": 0.42,
    "generated_at": "2026-06-30T11:00:00"
  }
}

Roadmap

  • [x] Core pipeline: fetch preprints, resolve publications via Crossref, build KG JSON
  • [x] TUI integration with Gary's entity list
  • [x] SJR journal enrichment (optional)
  • [ ] CITES edges from reference extraction (OCR/VLM on full-text PDFs)
  • [ ] Run on full 276-entity list (large-scale analysis)
  • [ ] Compute acceleration_score per topic over time
  • [ ] Write to Neptune (from JSON output)
  • [ ] Visualization: time-to-publication heatmap by topic x year