bibliodash 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. bibliodash-1.0.0/MANIFEST.in +9 -0
  2. bibliodash-1.0.0/PKG-INFO +349 -0
  3. bibliodash-1.0.0/README.md +303 -0
  4. bibliodash-1.0.0/bibliodash.egg-info/PKG-INFO +349 -0
  5. bibliodash-1.0.0/bibliodash.egg-info/SOURCES.txt +157 -0
  6. bibliodash-1.0.0/bibliodash.egg-info/dependency_links.txt +1 -0
  7. bibliodash-1.0.0/bibliodash.egg-info/entry_points.txt +2 -0
  8. bibliodash-1.0.0/bibliodash.egg-info/requires.txt +30 -0
  9. bibliodash-1.0.0/bibliodash.egg-info/top_level.txt +1 -0
  10. bibliodash-1.0.0/biblioflow/__init__.py +6 -0
  11. bibliodash-1.0.0/biblioflow/_server/Public/BiblioFlow-LOGO.png +0 -0
  12. bibliodash-1.0.0/biblioflow/_server/Public/BiblioFlow_Workflow.png +0 -0
  13. bibliodash-1.0.0/biblioflow/_server/Public/BiblioFlow_logo.png +0 -0
  14. bibliodash-1.0.0/biblioflow/_server/__init__.py +0 -0
  15. bibliodash-1.0.0/biblioflow/_server/app.py +164 -0
  16. bibliodash-1.0.0/biblioflow/_server/assets/biblioflow_logo.png +0 -0
  17. bibliodash-1.0.0/biblioflow/_server/assets/style.css +529 -0
  18. bibliodash-1.0.0/biblioflow/_server/components.py +388 -0
  19. bibliodash-1.0.0/biblioflow/_server/config.py +43 -0
  20. bibliodash-1.0.0/biblioflow/_server/data_loader.py +77 -0
  21. bibliodash-1.0.0/biblioflow/_server/database/__init__.py +0 -0
  22. bibliodash-1.0.0/biblioflow/_server/database/connection.py +40 -0
  23. bibliodash-1.0.0/biblioflow/_server/database/schema.sql +173 -0
  24. bibliodash-1.0.0/biblioflow/_server/db.py +61 -0
  25. bibliodash-1.0.0/biblioflow/_server/engine/__init__.py +27 -0
  26. bibliodash-1.0.0/biblioflow/_server/engine/ai_summary.py +168 -0
  27. bibliodash-1.0.0/biblioflow/_server/engine/authors.py +253 -0
  28. bibliodash-1.0.0/biblioflow/_server/engine/citations.py +57 -0
  29. bibliodash-1.0.0/biblioflow/_server/engine/claim_extraction.py +136 -0
  30. bibliodash-1.0.0/biblioflow/_server/engine/clustering.py +133 -0
  31. bibliodash-1.0.0/biblioflow/_server/engine/countries.py +45 -0
  32. bibliodash-1.0.0/biblioflow/_server/engine/dataset.py +398 -0
  33. bibliodash-1.0.0/biblioflow/_server/engine/documents.py +71 -0
  34. bibliodash-1.0.0/biblioflow/_server/engine/duplicates.py +94 -0
  35. bibliodash-1.0.0/biblioflow/_server/engine/evidence.py +252 -0
  36. bibliodash-1.0.0/biblioflow/_server/engine/funding.py +134 -0
  37. bibliodash-1.0.0/biblioflow/_server/engine/gap_detection.py +104 -0
  38. bibliodash-1.0.0/biblioflow/_server/engine/institutions.py +197 -0
  39. bibliodash-1.0.0/biblioflow/_server/engine/intellectual_structure.py +68 -0
  40. bibliodash-1.0.0/biblioflow/_server/engine/journals.py +178 -0
  41. bibliodash-1.0.0/biblioflow/_server/engine/keywords.py +22 -0
  42. bibliodash-1.0.0/biblioflow/_server/engine/languages.py +78 -0
  43. bibliodash-1.0.0/biblioflow/_server/engine/llm.py +74 -0
  44. bibliodash-1.0.0/biblioflow/_server/engine/network_utils.py +102 -0
  45. bibliodash-1.0.0/biblioflow/_server/engine/publications.py +230 -0
  46. bibliodash-1.0.0/biblioflow/_server/engine/publishers.py +96 -0
  47. bibliodash-1.0.0/biblioflow/_server/engine/references.py +22 -0
  48. bibliodash-1.0.0/biblioflow/_server/engine/semantic_search.py +202 -0
  49. bibliodash-1.0.0/biblioflow/_server/engine/social_networks.py +74 -0
  50. bibliodash-1.0.0/biblioflow/_server/engine/thematic.py +108 -0
  51. bibliodash-1.0.0/biblioflow/_server/export/__init__.py +0 -0
  52. bibliodash-1.0.0/biblioflow/_server/export/bibliometrix.py +54 -0
  53. bibliodash-1.0.0/biblioflow/_server/export/bibtex_export.py +32 -0
  54. bibliodash-1.0.0/biblioflow/_server/export/csv_export.py +40 -0
  55. bibliodash-1.0.0/biblioflow/_server/export/json_export.py +9 -0
  56. bibliodash-1.0.0/biblioflow/_server/extract/__init__.py +0 -0
  57. bibliodash-1.0.0/biblioflow/_server/extract/checksum.py +10 -0
  58. bibliodash-1.0.0/biblioflow/_server/extract/docling_extract.py +96 -0
  59. bibliodash-1.0.0/biblioflow/_server/extract/doi.py +93 -0
  60. bibliodash-1.0.0/biblioflow/_server/extract/pdf_extract.py +48 -0
  61. bibliodash-1.0.0/biblioflow/_server/extract/text_patterns.py +74 -0
  62. bibliodash-1.0.0/biblioflow/_server/extract/title.py +51 -0
  63. bibliodash-1.0.0/biblioflow/_server/import_scopus_csv.py +154 -0
  64. bibliodash-1.0.0/biblioflow/_server/migrate_legacy.py +27 -0
  65. bibliodash-1.0.0/biblioflow/_server/models.py +93 -0
  66. bibliodash-1.0.0/biblioflow/_server/pages/ai.py +559 -0
  67. bibliodash-1.0.0/biblioflow/_server/pages/analysis_shared.py +69 -0
  68. bibliodash-1.0.0/biblioflow/_server/pages/api_page.py +31 -0
  69. bibliodash-1.0.0/biblioflow/_server/pages/authors_page.py +317 -0
  70. bibliodash-1.0.0/biblioflow/_server/pages/clustering.py +120 -0
  71. bibliodash-1.0.0/biblioflow/_server/pages/conceptual_structure.py +185 -0
  72. bibliodash-1.0.0/biblioflow/_server/pages/content_analysis_page.py +23 -0
  73. bibliodash-1.0.0/biblioflow/_server/pages/dashboard.py +274 -0
  74. bibliodash-1.0.0/biblioflow/_server/pages/data_page.py +31 -0
  75. bibliodash-1.0.0/biblioflow/_server/pages/documents_page.py +192 -0
  76. bibliodash-1.0.0/biblioflow/_server/pages/evidence.py +408 -0
  77. bibliodash-1.0.0/biblioflow/_server/pages/filters_page.py +33 -0
  78. bibliodash-1.0.0/biblioflow/_server/pages/gaps.py +246 -0
  79. bibliodash-1.0.0/biblioflow/_server/pages/import_page.py +107 -0
  80. bibliodash-1.0.0/biblioflow/_server/pages/info_page.py +25 -0
  81. bibliodash-1.0.0/biblioflow/_server/pages/library.py +85 -0
  82. bibliodash-1.0.0/biblioflow/_server/pages/networks.py +55 -0
  83. bibliodash-1.0.0/biblioflow/_server/pages/overview.py +244 -0
  84. bibliodash-1.0.0/biblioflow/_server/pages/paper_details.py +86 -0
  85. bibliodash-1.0.0/biblioflow/_server/pages/prisma_page.py +21 -0
  86. bibliodash-1.0.0/biblioflow/_server/pages/projects.py +133 -0
  87. bibliodash-1.0.0/biblioflow/_server/pages/report_page.py +35 -0
  88. bibliodash-1.0.0/biblioflow/_server/pages/semantic_search.py +221 -0
  89. bibliodash-1.0.0/biblioflow/_server/pages/settings.py +44 -0
  90. bibliodash-1.0.0/biblioflow/_server/pages/social_structure.py +147 -0
  91. bibliodash-1.0.0/biblioflow/_server/pages/sources.py +300 -0
  92. bibliodash-1.0.0/biblioflow/_server/pages/tall_export_page.py +21 -0
  93. bibliodash-1.0.0/biblioflow/_server/pages/timeline.py +187 -0
  94. bibliodash-1.0.0/biblioflow/_server/pipeline.py +131 -0
  95. bibliodash-1.0.0/biblioflow/_server/providers/__init__.py +0 -0
  96. bibliodash-1.0.0/biblioflow/_server/providers/base.py +12 -0
  97. bibliodash-1.0.0/biblioflow/_server/providers/crossref.py +14 -0
  98. bibliodash-1.0.0/biblioflow/_server/providers/openalex.py +81 -0
  99. bibliodash-1.0.0/biblioflow/_server/providers/orcid.py +34 -0
  100. bibliodash-1.0.0/biblioflow/_server/providers/pubmed.py +49 -0
  101. bibliodash-1.0.0/biblioflow/_server/providers/ror.py +31 -0
  102. bibliodash-1.0.0/biblioflow/_server/providers/scopus.py +15 -0
  103. bibliodash-1.0.0/biblioflow/_server/providers/semantic_scholar.py +72 -0
  104. bibliodash-1.0.0/biblioflow/_server/providers/unpaywall.py +35 -0
  105. bibliodash-1.0.0/biblioflow/_server/repository/__init__.py +0 -0
  106. bibliodash-1.0.0/biblioflow/_server/repository/event_repository.py +33 -0
  107. bibliodash-1.0.0/biblioflow/_server/repository/job_repository.py +32 -0
  108. bibliodash-1.0.0/biblioflow/_server/repository/lookup_repository.py +36 -0
  109. bibliodash-1.0.0/biblioflow/_server/repository/paper_repository.py +318 -0
  110. bibliodash-1.0.0/biblioflow/_server/repository/project_repository.py +57 -0
  111. bibliodash-1.0.0/biblioflow/_server/repository/provenance_repository.py +33 -0
  112. bibliodash-1.0.0/biblioflow/_server/scopus/__init__.py +0 -0
  113. bibliodash-1.0.0/biblioflow/_server/scopus/cache.py +24 -0
  114. bibliodash-1.0.0/biblioflow/_server/scopus/fetch.py +36 -0
  115. bibliodash-1.0.0/biblioflow/_server/scopus/parser.py +36 -0
  116. bibliodash-1.0.0/biblioflow/_server/services/__init__.py +0 -0
  117. bibliodash-1.0.0/biblioflow/_server/services/enrichment_service.py +194 -0
  118. bibliodash-1.0.0/biblioflow/_server/services/event_service.py +13 -0
  119. bibliodash-1.0.0/biblioflow/_server/services/import_service.py +96 -0
  120. bibliodash-1.0.0/biblioflow/_server/services/paper_export_service.py +41 -0
  121. bibliodash-1.0.0/biblioflow/_server/services/project_service.py +25 -0
  122. bibliodash-1.0.0/biblioflow/_server/utils/__init__.py +0 -0
  123. bibliodash-1.0.0/biblioflow/_server/utils/export_cache.py +15 -0
  124. bibliodash-1.0.0/biblioflow/_server/utils/export_utils.py +23 -0
  125. bibliodash-1.0.0/biblioflow/_server/verify/__init__.py +0 -0
  126. bibliodash-1.0.0/biblioflow/_server/verify/crossref.py +27 -0
  127. bibliodash-1.0.0/biblioflow/_server/verify/fuzzy.py +7 -0
  128. bibliodash-1.0.0/biblioflow/_server/verify/validation.py +41 -0
  129. bibliodash-1.0.0/biblioflow/_server/visualizations/__init__.py +0 -0
  130. bibliodash-1.0.0/biblioflow/_server/visualizations/area.py +20 -0
  131. bibliodash-1.0.0/biblioflow/_server/visualizations/boxplot.py +12 -0
  132. bibliodash-1.0.0/biblioflow/_server/visualizations/bradford.py +49 -0
  133. bibliodash-1.0.0/biblioflow/_server/visualizations/bubble.py +27 -0
  134. bibliodash-1.0.0/biblioflow/_server/visualizations/calendar.py +13 -0
  135. bibliodash-1.0.0/biblioflow/_server/visualizations/donut.py +25 -0
  136. bibliodash-1.0.0/biblioflow/_server/visualizations/gauge.py +27 -0
  137. bibliodash-1.0.0/biblioflow/_server/visualizations/geo_utils.py +47 -0
  138. bibliodash-1.0.0/biblioflow/_server/visualizations/heatmap.py +8 -0
  139. bibliodash-1.0.0/biblioflow/_server/visualizations/histogram.py +8 -0
  140. bibliodash-1.0.0/biblioflow/_server/visualizations/line.py +14 -0
  141. bibliodash-1.0.0/biblioflow/_server/visualizations/lollipop.py +45 -0
  142. bibliodash-1.0.0/biblioflow/_server/visualizations/network.py +132 -0
  143. bibliodash-1.0.0/biblioflow/_server/visualizations/radar.py +21 -0
  144. bibliodash-1.0.0/biblioflow/_server/visualizations/sankey.py +15 -0
  145. bibliodash-1.0.0/biblioflow/_server/visualizations/scatter.py +17 -0
  146. bibliodash-1.0.0/biblioflow/_server/visualizations/sunburst.py +16 -0
  147. bibliodash-1.0.0/biblioflow/_server/visualizations/theme.py +68 -0
  148. bibliodash-1.0.0/biblioflow/_server/visualizations/timeline.py +20 -0
  149. bibliodash-1.0.0/biblioflow/_server/visualizations/treemap.py +16 -0
  150. bibliodash-1.0.0/biblioflow/_server/visualizations/violin.py +10 -0
  151. bibliodash-1.0.0/biblioflow/_server/visualizations/wordcloud.py +42 -0
  152. bibliodash-1.0.0/biblioflow/_server/visualizations/worldmap.py +91 -0
  153. bibliodash-1.0.0/biblioflow/cli.py +290 -0
  154. bibliodash-1.0.0/biblioflow/config.py +115 -0
  155. bibliodash-1.0.0/biblioflow/hardware.py +175 -0
  156. bibliodash-1.0.0/biblioflow/wizard.py +272 -0
  157. bibliodash-1.0.0/biblioflow/workspace.py +65 -0
  158. bibliodash-1.0.0/pyproject.toml +83 -0
  159. bibliodash-1.0.0/setup.cfg +4 -0
@@ -0,0 +1,9 @@
1
+ include README.md
2
+ include LICENSE
3
+ include pyproject.toml
4
+
5
+ recursive-include biblioflow *.py *.css *.png *.jpg *.toml *.sql
6
+ recursive-exclude biblioflow/_server/cache *
7
+ recursive-exclude biblioflow/_server/logs *
8
+ recursive-exclude **/__pycache__ *
9
+ recursive-exclude * *.pyc *.pyo
@@ -0,0 +1,349 @@
1
+ Metadata-Version: 2.4
2
+ Name: bibliodash
3
+ Version: 1.0.0
4
+ Summary: Local-first bibliometric analysis platform — Research Intelligence, Flowing Insights
5
+ Author-email: Robin Tomar <itsrobintomar@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/imrobintomar/BiblioFlow
8
+ Project-URL: Repository, https://github.com/imrobintomar/BiblioFlow
9
+ Project-URL: Issues, https://github.com/imrobintomar/BiblioFlow/issues
10
+ Keywords: bibliometrics,research,literature review,systematic review,PDF,dash
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Topic :: Scientific/Engineering :: Information Analysis
18
+ Requires-Python: >=3.11
19
+ Description-Content-Type: text/markdown
20
+ Requires-Dist: dash>=2.14
21
+ Requires-Dist: dash-bootstrap-components>=1.5
22
+ Requires-Dist: dash-ag-grid>=31
23
+ Requires-Dist: plotly>=5.18
24
+ Requires-Dist: networkx>=3.0
25
+ Requires-Dist: rapidfuzz>=3.0
26
+ Requires-Dist: pydantic>=2.0
27
+ Requires-Dist: requests>=2.28
28
+ Requires-Dist: openpyxl>=3.1
29
+ Requires-Dist: pycountry>=23
30
+ Requires-Dist: geonamescache>=1.6
31
+ Requires-Dist: psutil>=5.9
32
+ Requires-Dist: rich>=13.0
33
+ Requires-Dist: python-dotenv>=1.0
34
+ Provides-Extra: pdf
35
+ Requires-Dist: pymupdf>=1.23; extra == "pdf"
36
+ Requires-Dist: pdfplumber>=0.10; extra == "pdf"
37
+ Requires-Dist: docling>=2.0; extra == "pdf"
38
+ Provides-Extra: semantic
39
+ Requires-Dist: sentence-transformers>=2.6; extra == "semantic"
40
+ Requires-Dist: faiss-cpu>=1.7; extra == "semantic"
41
+ Requires-Dist: scikit-learn>=1.4; extra == "semantic"
42
+ Provides-Extra: ai
43
+ Requires-Dist: ollama>=0.2; extra == "ai"
44
+ Provides-Extra: all
45
+ Requires-Dist: bibliodash[ai,pdf,semantic]; extra == "all"
46
+
47
+ <div align="center">
48
+ <img src="src/Public/BiblioFlow_logo.png" alt="BiblioFlow" width="420" />
49
+
50
+ <h3>Research Intelligence. Flowing Insights.</h3>
51
+
52
+ <p>
53
+ A local-first platform that extracts structured bibliometric data from research PDFs<br/>
54
+ and delivers deep scholarly analysis through an interactive, publication-quality dashboard.
55
+ </p>
56
+
57
+ <p>
58
+ <img src="https://img.shields.io/badge/Python-3.13+-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python 3.13+"/>
59
+ <img src="https://img.shields.io/badge/Dash-2.x-008DE4?style=flat-square&logo=plotly&logoColor=white" alt="Dash"/>
60
+ <img src="https://img.shields.io/badge/Plotly-5.x-3F4F75?style=flat-square&logo=plotly&logoColor=white" alt="Plotly"/>
61
+ <img src="https://img.shields.io/badge/NetworkX-3.x-orange?style=flat-square" alt="NetworkX"/>
62
+ <img src="https://img.shields.io/badge/SQLite-local--first-003B57?style=flat-square&logo=sqlite&logoColor=white" alt="SQLite"/>
63
+ <img src="https://img.shields.io/badge/Ollama-local%20AI-black?style=flat-square" alt="Ollama"/>
64
+ <img src="https://img.shields.io/badge/status-active-brightgreen?style=flat-square" alt="Status"/>
65
+ </p>
66
+ </div>
67
+
68
+ ---
69
+
70
+ ## What is BiblioFlow?
71
+
72
+ **BiblioFlow** is a self-hosted bibliometric analysis tool built for researchers. You bring a collection of research PDFs — BiblioFlow does the rest.
73
+
74
+ It reads every PDF, pulls out the key scholarly metadata (title, DOI, authors, abstract, keywords, funding, citations), automatically enriches each record from open academic databases, and then presents the entire corpus through a rich, interactive analysis dashboard — all running locally on your machine with no data sent to any external service.
75
+
76
+ **The core workflow is simple:**
77
+
78
+ ```
79
+ Upload PDFs → BiblioFlow extracts & enriches metadata → Explore bibliometric analysis
80
+ ```
81
+
82
+ Everything — from publication trends to author networks, keyword co-occurrence to AI-generated research summaries — is derived from the data inside your own PDF collection.
83
+
84
+ ---
85
+
86
+ ## Analysis Modules
87
+
88
+ BiblioFlow provides fourteen dedicated analysis modules across four capability tiers.
89
+
90
+ ### 📊 Overview
91
+ Annual, monthly, quarterly, and decade-level publication production. Growth rates (CAGR), cumulative output, moving averages, publication heatmaps, and forecasting — broken down by document type, country, institution, and journal.
92
+
93
+ ### 📚 Sources
94
+ Identifies the most productive journals and publishers in your corpus. Applies Bradford's Law to reveal the core zone of journals. Shows journal H-index, citation impact, open-access distribution, and publication timelines.
95
+
96
+ ### ✍️ Authors
97
+ Ranks authors by productivity and citation impact. Computes H-index, G-index, M-index, i10-index, citation velocity, and career trajectory for every author. Maps co-author collaboration networks with community detection.
98
+
99
+ ### 📄 Documents
100
+ Lists the most-cited papers in your corpus. Analyses reference lists to find the most frequently co-cited works. Full funding intelligence: funder lollipop chart, category breakdown (Government / Industry / Other), year-on-year funding trends, and multi-funded paper table.
101
+
102
+ ### 🔑 Conceptual Structure
103
+ Identifies the most frequent keywords and concepts. Builds a **Thematic Map** — plotting keyword clusters by Callon centrality versus density — to reveal motor, niche, emerging, and declining themes. Tracks how keyword sets shift over time.
104
+
105
+ ### 🌐 Social Structure
106
+ Maps collaboration at three levels — **Author**, **Institution**, and **Country** — as interactive network graphs with Louvain community detection. Renders a choropleth world map of collaboration arcs. Shows a collaboration timeline across years.
107
+
108
+ ### 🧠 Intellectual Structure
109
+ Uncovers the citation backbone of your field. Identifies the most co-cited reference pairs. Builds a citation historiography showing how foundational works influenced one another over time.
110
+
111
+ ### 🔗 Clustering
112
+ Detects research communities using four network types — co-authorship, keyword co-occurrence, bibliographic coupling, and citation networks — each analysed for degree, betweenness, closeness, eigenvector, and PageRank centrality.
113
+
114
+ ### 🏅 Evidence Quality
115
+ Per-paper **Evidence Score** (0–100) and **Reproducibility Score** (0–100) computed from nine quality signals: trial registration, ethics approval, informed consent, funding declaration, PubMed indexing, open access, figures, tables, and data availability. Signal coverage bar charts, score distribution histograms, and ranked paper tables for both scores.
116
+
117
+ ### 🔍 Duplicate Detection
118
+ Detects duplicate papers by exact DOI match and fuzzy title similarity (≥ 90% token-sort ratio via rapidfuzz). Reports cluster count, duplicate rate, and a full table of suspect pairs grouped by cluster.
119
+
120
+ ### 🗄️ Provenance Explorer
121
+ Field-level data provenance heatmap showing which enrichment source (CrossRef, OpenAlex, PubMed, etc.) filled each metadata field. Average confidence score per source and per field.
122
+
123
+ ### 📅 Research Timeline
124
+ Interactive bubble scatter plot of publications over time — bubble size proportional to citation count, colour-coded by document type. Complementary year × document-type heatmap to spot activity patterns.
125
+
126
+ ### 🔎 Semantic Search
127
+ Meaning-based full-text search over all paper titles and abstracts using `sentence-transformers` (`all-MiniLM-L6-v2`) and a FAISS cosine-similarity index. Finds topically relevant papers even without exact keyword matches. Index built once per project (~15 s) and cached to disk.
128
+
129
+ **Sub-features:**
130
+ - **Paper Novelty Scores** — novelty = 1 − mean cosine similarity to 5 nearest semantic neighbours. Identifies unique papers and redundant ones.
131
+ - **Paper Similarity** — find papers most similar to any paper in the corpus.
132
+
133
+ ### 🗺️ Research Gap Detection
134
+ Clusters all paper abstracts with KMeans + FAISS embeddings, names each cluster with TF-IDF keywords, and scores it for research gap potential using an age–size formula. Renders an interactive bubble chart (gap level = colour) and a ranked gap card list. Typical first-run ~30 s, subsequent runs instant (cached index).
135
+
136
+ ### 🤖 AI Features *(local — no API key needed)*
137
+ Three AI-powered views, all running via local **Ollama** (`llama3.1:8b`) with zero data leaving your machine:
138
+
139
+ | View | What it does |
140
+ |---|---|
141
+ | **AI Summary** | Corpus-level synthesis from your 50 most-cited abstracts → structured JSON: overall summary, main themes, emerging trends, research gaps, common methods, future directions, clinical implications. Cached per project. |
142
+ | **Research Chat** | Multi-turn RAG chat — retrieves 8 semantically relevant papers per question, injects them as grounded context into the LLM, returns cited answers with paper title references. Conversation history maintained per session. |
143
+ | **Claim Extraction** | Per-paper structured extraction for your top-50 cited papers: main finding, study design, sample size, key limitation, future work, evidence level. Each result cached individually. |
144
+
145
+ ### 🗂️ Library & Projects
146
+ A full searchable, sortable table of every paper in your corpus with per-record pipeline status and detail view. Supports **multiple independent projects** — keep different research corpora separate and switch between them from the top bar.
147
+
148
+ ---
149
+
150
+ ## How the Data Extraction Works
151
+
152
+ BiblioFlow reads your PDFs using **Docling** — a layout-aware parser that understands document structure without OCR. From each PDF, it extracts:
153
+
154
+ - Title, DOI, abstract, authors, publication year
155
+ - Keywords, trial IDs (NCT-pattern), ORCID identifiers
156
+ - Funding acknowledgement text and grant IDs
157
+ - Section structure, table and figure counts
158
+ - Reference list entries
159
+
160
+ Each extracted record then passes through an **enrichment waterfall** — a chain of open academic APIs where each source fills in only the fields the previous one left empty:
161
+
162
+ ```
163
+ CrossRef → OpenAlex → Semantic Scholar → PubMed → Unpaywall → ROR
164
+ ```
165
+
166
+ - **CrossRef:** verifies the DOI, fills publisher, document type, journal, page range
167
+ - **OpenAlex:** adds institutions with ROR IDs, country affiliations, full reference list, concepts, open-access status, and grants
168
+ - **Semantic Scholar:** adds abstract backfill, references, and fields of study
169
+ - **PubMed:** adds MeSH terms and grant IDs (when a PMID is resolvable)
170
+ - **Unpaywall:** adds open-access URL and licence information
171
+ - **ROR:** resolves institution names to countries where other sources missed them
172
+
173
+ Every field fill is recorded with its source, method, and confidence score in a `field_provenance` table — so you always know where each piece of data came from.
174
+
175
+ ---
176
+
177
+ ## Architecture
178
+
179
+ <div align="center">
180
+ <img src="src/Public/BiblioFlow_Workflow.png" alt="BiblioFlow Architecture" width="100%" />
181
+ </div>
182
+
183
+ ---
184
+
185
+ ## Installation
186
+
187
+ BiblioFlow uses **Docling** for PDF extraction, which includes large ML dependencies. A dedicated virtual environment is strongly recommended.
188
+
189
+ ```bash
190
+ # 1. Clone the repository
191
+ git clone https://github.com/imrobintomar/BiblioFlow.git
192
+ cd BiblioFlow
193
+
194
+ # 2. Create and activate a virtual environment
195
+ python3 -m venv .venv
196
+ source .venv/bin/activate # Windows: .venv\Scripts\activate
197
+
198
+ # 3. Install core dependencies
199
+ pip install -r requirements.txt
200
+
201
+ # 4. (Optional) Semantic search, novelty, gaps, similarity
202
+ pip install sentence-transformers faiss-cpu scikit-learn
203
+
204
+ # 5. (Optional) AI features — install Ollama then pull a model
205
+ # https://ollama.com
206
+ ollama pull llama3.1:8b
207
+ ```
208
+
209
+ ---
210
+
211
+ ## Usage
212
+
213
+ ### Launch the Dashboard
214
+
215
+ ```bash
216
+ cd src
217
+ ../.venv/bin/python3 app.py
218
+ ```
219
+
220
+ Open **http://127.0.0.1:8050** — then use **Import** in the sidebar to point BiblioFlow at a folder of PDFs. The pipeline runs as a background job with live progress updates.
221
+
222
+ ### Import from a Scopus CSV Export
223
+
224
+ If you already have a Scopus export CSV, import it directly without running the PDF pipeline:
225
+
226
+ ```bash
227
+ cd src
228
+ ../.venv/bin/python3 import_scopus_csv.py path/to/scopus_export.csv
229
+ ```
230
+
231
+ ### Run the Pipeline from the Command Line
232
+
233
+ ```bash
234
+ ../.venv/bin/python3 src/pipeline.py --input PDF/ --output out/
235
+ ```
236
+
237
+ | Flag | Effect |
238
+ |---|---|
239
+ | `--no-scopus` | Skip the Scopus enrichment stage |
240
+ | `--force` | Reprocess all PDFs, including unchanged ones |
241
+
242
+ ### Rebuild the Warehouse
243
+
244
+ The warehouse database (`src/biblioflow.sqlite`) is fully derived from the pipeline output — safe to delete and recreate at any time:
245
+
246
+ ```bash
247
+ cd src
248
+ ../.venv/bin/python3 migrate_legacy.py
249
+ ```
250
+
251
+ ---
252
+
253
+ ## Tech Stack
254
+
255
+ | Component | Technology |
256
+ |---|---|
257
+ | **Dashboard** | [Dash](https://dash.plotly.com/) 2.x + [Plotly](https://plotly.com/) 5.x |
258
+ | **PDF extraction** | [Docling](https://github.com/DS4SD/docling) · PyMuPDF · pdfplumber |
259
+ | **Metadata enrichment** | CrossRef · OpenAlex · Semantic Scholar · PubMed · Unpaywall · ROR |
260
+ | **Network analysis** | [NetworkX](https://networkx.org/) 3.x — Louvain · centrality · spring layout |
261
+ | **Semantic search** | sentence-transformers (`all-MiniLM-L6-v2`) + FAISS (`IndexFlatIP`) |
262
+ | **Gap detection** | scikit-learn KMeans + TF-IDF + PCA |
263
+ | **Duplicate detection** | rapidfuzz `token_sort_ratio` |
264
+ | **AI features** | [Ollama](https://ollama.com) local LLM (`llama3.1:8b`) |
265
+ | **Storage** | SQLite — normalised warehouse + checksum cache |
266
+ | **Data tables** | dash-ag-grid · dash-table |
267
+ | **Geocoding** | geonamescache · pycountry |
268
+ | **Language** | Python 3.13+ |
269
+
270
+ ---
271
+
272
+ ## Project Structure
273
+
274
+ ```
275
+ BiblioFlow/
276
+ ├── src/
277
+ │ ├── app.py # Dashboard entry point
278
+ │ ├── components.py # Topbar, sidebar, shared panel components
279
+ │ ├── import_scopus_csv.py # Standalone Scopus CSV importer
280
+ │ ├── pages/ # One module per analysis section
281
+ │ │ ├── dashboard.py # KPI cards, trends, donut, gauge
282
+ │ │ ├── overview.py # Publication production analysis
283
+ │ │ ├── sources.py # Journals, Bradford's Law, publishers
284
+ │ │ ├── authors_page.py # Author metrics and co-author networks
285
+ │ │ ├── documents_page.py # Citations, references, funding intelligence
286
+ │ │ ├── conceptual_structure.py # Keywords and thematic map
287
+ │ │ ├── social_structure.py # Collaboration networks and world map
288
+ │ │ ├── clustering.py # Network clustering analysis
289
+ │ │ ├── networks.py # Intellectual structure / historiograph
290
+ │ │ ├── evidence.py # Evidence scores, reproducibility, duplicates,
291
+ │ │ │ # provenance, novelty
292
+ │ │ ├── timeline.py # Research timeline bubble + heatmap
293
+ │ │ ├── semantic_search.py # Semantic search with example chips
294
+ │ │ ├── gaps.py # Research gap detection bubble map
295
+ │ │ ├── ai.py # AI Summary · Research Chat · Claim Extraction
296
+ │ │ └── library.py # Full paper corpus table
297
+ │ ├── engine/ # Analysis engines
298
+ │ │ ├── evidence.py # Evidence & reproducibility scoring
299
+ │ │ ├── duplicates.py # Fuzzy + DOI duplicate detection
300
+ │ │ ├── funding.py # Funder categorisation and trends
301
+ │ │ ├── semantic_search.py # FAISS index · search · novelty · similarity
302
+ │ │ ├── gap_detection.py # KMeans gap scoring
303
+ │ │ ├── llm.py # Ollama client wrapper
304
+ │ │ ├── ai_summary.py # Corpus-level AI summary
305
+ │ │ └── claim_extraction.py # Per-paper claim extraction
306
+ │ ├── repository/ # Data access layer
307
+ │ ├── services/ # Import, enrichment, export services
308
+ │ ├── providers/ # CrossRef, OpenAlex, PubMed, … clients
309
+ │ ├── database/ # SQLite schema and connection helpers
310
+ │ ├── visualizations/ # Plotly chart builders and theme
311
+ │ │ ├── theme.py # Dark palette, apply_theme()
312
+ │ │ ├── lollipop.py # Horizontal lollipop chart
313
+ │ │ ├── donut.py # Donut / pie chart
314
+ │ │ ├── gauge.py # Completeness gauge
315
+ │ │ └── worldmap.py # Choropleth collaboration map
316
+ │ ├── extract/ # PDF extraction pipeline
317
+ │ ├── cache/ # FAISS index, AI summary, claim caches
318
+ │ └── assets/ # CSS and static files
319
+ ├── requirements.txt
320
+ └── README.md
321
+ ```
322
+
323
+ ---
324
+
325
+ ## Current Limitations
326
+
327
+ | Area | Status |
328
+ |---|---|
329
+ | Author–institution attribution | Paper-level only — cannot isolate a specific co-author's affiliation |
330
+ | Citation Half-Life | Not computable — APIs return cumulative citation counts, not per-year breakdowns |
331
+ | Author/Journal co-citation | Not implemented — requires resolving individual reference metadata per paper |
332
+ | Bibliographic coupling | Accuracy bounded by DOI resolution in reference lists |
333
+ | Entity deduplication | Institution and country name variants across providers are not yet merged |
334
+ | Evidence signals (PDF) | Trial IDs, ethics statements, figure counts require PDF extraction to be populated; Scopus CSV imports will show 0 for these fields |
335
+ | AI chat streaming | Responses appear after full generation — streaming output not yet implemented |
336
+ | Report export (PDF/Word/PPT) | Planned — marked "Soon" in the UI |
337
+
338
+ ---
339
+
340
+ ## Author
341
+
342
+ **Robin Tomar** — [itsrobintomar@gmail.com](mailto:itsrobintomar@gmail.com)
343
+ **Dr Prabudh Goel's Lab, AIIMS New Delhi**
344
+
345
+ ---
346
+
347
+ <div align="center">
348
+ <sub>BiblioFlow © 2026 · Built for researchers, by researchers · Made with ♥ in India</sub>
349
+ </div>
@@ -0,0 +1,303 @@
1
+ <div align="center">
2
+ <img src="src/Public/BiblioFlow_logo.png" alt="BiblioFlow" width="420" />
3
+
4
+ <h3>Research Intelligence. Flowing Insights.</h3>
5
+
6
+ <p>
7
+ A local-first platform that extracts structured bibliometric data from research PDFs<br/>
8
+ and delivers deep scholarly analysis through an interactive, publication-quality dashboard.
9
+ </p>
10
+
11
+ <p>
12
+ <img src="https://img.shields.io/badge/Python-3.13+-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python 3.13+"/>
13
+ <img src="https://img.shields.io/badge/Dash-2.x-008DE4?style=flat-square&logo=plotly&logoColor=white" alt="Dash"/>
14
+ <img src="https://img.shields.io/badge/Plotly-5.x-3F4F75?style=flat-square&logo=plotly&logoColor=white" alt="Plotly"/>
15
+ <img src="https://img.shields.io/badge/NetworkX-3.x-orange?style=flat-square" alt="NetworkX"/>
16
+ <img src="https://img.shields.io/badge/SQLite-local--first-003B57?style=flat-square&logo=sqlite&logoColor=white" alt="SQLite"/>
17
+ <img src="https://img.shields.io/badge/Ollama-local%20AI-black?style=flat-square" alt="Ollama"/>
18
+ <img src="https://img.shields.io/badge/status-active-brightgreen?style=flat-square" alt="Status"/>
19
+ </p>
20
+ </div>
21
+
22
+ ---
23
+
24
+ ## What is BiblioFlow?
25
+
26
+ **BiblioFlow** is a self-hosted bibliometric analysis tool built for researchers. You bring a collection of research PDFs — BiblioFlow does the rest.
27
+
28
+ It reads every PDF, pulls out the key scholarly metadata (title, DOI, authors, abstract, keywords, funding, citations), automatically enriches each record from open academic databases, and then presents the entire corpus through a rich, interactive analysis dashboard — all running locally on your machine with no data sent to any external service.
29
+
30
+ **The core workflow is simple:**
31
+
32
+ ```
33
+ Upload PDFs → BiblioFlow extracts & enriches metadata → Explore bibliometric analysis
34
+ ```
35
+
36
+ Everything — from publication trends to author networks, keyword co-occurrence to AI-generated research summaries — is derived from the data inside your own PDF collection.
37
+
38
+ ---
39
+
40
+ ## Analysis Modules
41
+
42
+ BiblioFlow provides fourteen dedicated analysis modules across four capability tiers.
43
+
44
+ ### 📊 Overview
45
+ Annual, monthly, quarterly, and decade-level publication production. Growth rates (CAGR), cumulative output, moving averages, publication heatmaps, and forecasting — broken down by document type, country, institution, and journal.
46
+
47
+ ### 📚 Sources
48
+ Identifies the most productive journals and publishers in your corpus. Applies Bradford's Law to reveal the core zone of journals. Shows journal H-index, citation impact, open-access distribution, and publication timelines.
49
+
50
+ ### ✍️ Authors
51
+ Ranks authors by productivity and citation impact. Computes H-index, G-index, M-index, i10-index, citation velocity, and career trajectory for every author. Maps co-author collaboration networks with community detection.
52
+
53
+ ### 📄 Documents
54
+ Lists the most-cited papers in your corpus. Analyses reference lists to find the most frequently co-cited works. Full funding intelligence: funder lollipop chart, category breakdown (Government / Industry / Other), year-on-year funding trends, and multi-funded paper table.
55
+
56
+ ### 🔑 Conceptual Structure
57
+ Identifies the most frequent keywords and concepts. Builds a **Thematic Map** — plotting keyword clusters by Callon centrality versus density — to reveal motor, niche, emerging, and declining themes. Tracks how keyword sets shift over time.
58
+
59
+ ### 🌐 Social Structure
60
+ Maps collaboration at three levels — **Author**, **Institution**, and **Country** — as interactive network graphs with Louvain community detection. Renders a choropleth world map of collaboration arcs. Shows a collaboration timeline across years.
61
+
62
+ ### 🧠 Intellectual Structure
63
+ Uncovers the citation backbone of your field. Identifies the most co-cited reference pairs. Builds a citation historiography showing how foundational works influenced one another over time.
64
+
65
+ ### 🔗 Clustering
66
+ Detects research communities using four network types — co-authorship, keyword co-occurrence, bibliographic coupling, and citation networks — each analysed for degree, betweenness, closeness, eigenvector, and PageRank centrality.
67
+
68
+ ### 🏅 Evidence Quality
69
+ Per-paper **Evidence Score** (0–100) and **Reproducibility Score** (0–100) computed from nine quality signals: trial registration, ethics approval, informed consent, funding declaration, PubMed indexing, open access, figures, tables, and data availability. Signal coverage bar charts, score distribution histograms, and ranked paper tables for both scores.
70
+
71
+ ### 🔍 Duplicate Detection
72
+ Detects duplicate papers by exact DOI match and fuzzy title similarity (≥ 90% token-sort ratio via rapidfuzz). Reports cluster count, duplicate rate, and a full table of suspect pairs grouped by cluster.
73
+
74
+ ### 🗄️ Provenance Explorer
75
+ Field-level data provenance heatmap showing which enrichment source (CrossRef, OpenAlex, PubMed, etc.) filled each metadata field. Average confidence score per source and per field.
76
+
77
+ ### 📅 Research Timeline
78
+ Interactive bubble scatter plot of publications over time — bubble size proportional to citation count, colour-coded by document type. Complementary year × document-type heatmap to spot activity patterns.
79
+
80
+ ### 🔎 Semantic Search
81
+ Meaning-based full-text search over all paper titles and abstracts using `sentence-transformers` (`all-MiniLM-L6-v2`) and a FAISS cosine-similarity index. Finds topically relevant papers even without exact keyword matches. Index built once per project (~15 s) and cached to disk.
82
+
83
+ **Sub-features:**
84
+ - **Paper Novelty Scores** — novelty = 1 − mean cosine similarity to 5 nearest semantic neighbours. Identifies unique papers and redundant ones.
85
+ - **Paper Similarity** — find papers most similar to any paper in the corpus.
86
+
87
+ ### 🗺️ Research Gap Detection
88
+ Clusters all paper abstracts with KMeans + FAISS embeddings, names each cluster with TF-IDF keywords, and scores it for research gap potential using an age–size formula. Renders an interactive bubble chart (gap level = colour) and a ranked gap card list. Typical first-run ~30 s, subsequent runs instant (cached index).
89
+
90
+ ### 🤖 AI Features *(local — no API key needed)*
91
+ Three AI-powered views, all running via local **Ollama** (`llama3.1:8b`) with zero data leaving your machine:
92
+
93
+ | View | What it does |
94
+ |---|---|
95
+ | **AI Summary** | Corpus-level synthesis from your 50 most-cited abstracts → structured JSON: overall summary, main themes, emerging trends, research gaps, common methods, future directions, clinical implications. Cached per project. |
96
+ | **Research Chat** | Multi-turn RAG chat — retrieves 8 semantically relevant papers per question, injects them as grounded context into the LLM, returns cited answers with paper title references. Conversation history maintained per session. |
97
+ | **Claim Extraction** | Per-paper structured extraction for your top-50 cited papers: main finding, study design, sample size, key limitation, future work, evidence level. Each result cached individually. |
98
+
99
+ ### 🗂️ Library & Projects
100
+ A full searchable, sortable table of every paper in your corpus with per-record pipeline status and detail view. Supports **multiple independent projects** — keep different research corpora separate and switch between them from the top bar.
101
+
102
+ ---
103
+
104
+ ## How the Data Extraction Works
105
+
106
+ BiblioFlow reads your PDFs using **Docling** — a layout-aware parser that understands document structure without OCR. From each PDF, it extracts:
107
+
108
+ - Title, DOI, abstract, authors, publication year
109
+ - Keywords, trial IDs (NCT-pattern), ORCID identifiers
110
+ - Funding acknowledgement text and grant IDs
111
+ - Section structure, table and figure counts
112
+ - Reference list entries
113
+
114
+ Each extracted record then passes through an **enrichment waterfall** — a chain of open academic APIs where each source fills in only the fields the previous one left empty:
115
+
116
+ ```
117
+ CrossRef → OpenAlex → Semantic Scholar → PubMed → Unpaywall → ROR
118
+ ```
119
+
120
+ - **CrossRef:** verifies the DOI, fills publisher, document type, journal, page range
121
+ - **OpenAlex:** adds institutions with ROR IDs, country affiliations, full reference list, concepts, open-access status, and grants
122
+ - **Semantic Scholar:** adds abstract backfill, references, and fields of study
123
+ - **PubMed:** adds MeSH terms and grant IDs (when a PMID is resolvable)
124
+ - **Unpaywall:** adds open-access URL and licence information
125
+ - **ROR:** resolves institution names to countries where other sources missed them
126
+
127
+ Every field fill is recorded with its source, method, and confidence score in a `field_provenance` table — so you always know where each piece of data came from.
128
+
129
+ ---
130
+
131
+ ## Architecture
132
+
133
+ <div align="center">
134
+ <img src="src/Public/BiblioFlow_Workflow.png" alt="BiblioFlow Architecture" width="100%" />
135
+ </div>
136
+
137
+ ---
138
+
139
+ ## Installation
140
+
141
+ BiblioFlow uses **Docling** for PDF extraction, which includes large ML dependencies. A dedicated virtual environment is strongly recommended.
142
+
143
+ ```bash
144
+ # 1. Clone the repository
145
+ git clone https://github.com/imrobintomar/BiblioFlow.git
146
+ cd BiblioFlow
147
+
148
+ # 2. Create and activate a virtual environment
149
+ python3 -m venv .venv
150
+ source .venv/bin/activate # Windows: .venv\Scripts\activate
151
+
152
+ # 3. Install core dependencies
153
+ pip install -r requirements.txt
154
+
155
+ # 4. (Optional) Semantic search, novelty, gaps, similarity
156
+ pip install sentence-transformers faiss-cpu scikit-learn
157
+
158
+ # 5. (Optional) AI features — install Ollama then pull a model
159
+ # https://ollama.com
160
+ ollama pull llama3.1:8b
161
+ ```
162
+
163
+ ---
164
+
165
+ ## Usage
166
+
167
+ ### Launch the Dashboard
168
+
169
+ ```bash
170
+ cd src
171
+ ../.venv/bin/python3 app.py
172
+ ```
173
+
174
+ Open **http://127.0.0.1:8050** — then use **Import** in the sidebar to point BiblioFlow at a folder of PDFs. The pipeline runs as a background job with live progress updates.
175
+
176
+ ### Import from a Scopus CSV Export
177
+
178
+ If you already have a Scopus export CSV, import it directly without running the PDF pipeline:
179
+
180
+ ```bash
181
+ cd src
182
+ ../.venv/bin/python3 import_scopus_csv.py path/to/scopus_export.csv
183
+ ```
184
+
185
+ ### Run the Pipeline from the Command Line
186
+
187
+ ```bash
188
+ ../.venv/bin/python3 src/pipeline.py --input PDF/ --output out/
189
+ ```
190
+
191
+ | Flag | Effect |
192
+ |---|---|
193
+ | `--no-scopus` | Skip the Scopus enrichment stage |
194
+ | `--force` | Reprocess all PDFs, including unchanged ones |
195
+
196
+ ### Rebuild the Warehouse
197
+
198
+ The warehouse database (`src/biblioflow.sqlite`) is fully derived from the pipeline output — safe to delete and recreate at any time:
199
+
200
+ ```bash
201
+ cd src
202
+ ../.venv/bin/python3 migrate_legacy.py
203
+ ```
204
+
205
+ ---
206
+
207
+ ## Tech Stack
208
+
209
+ | Component | Technology |
210
+ |---|---|
211
+ | **Dashboard** | [Dash](https://dash.plotly.com/) 2.x + [Plotly](https://plotly.com/) 5.x |
212
+ | **PDF extraction** | [Docling](https://github.com/DS4SD/docling) · PyMuPDF · pdfplumber |
213
+ | **Metadata enrichment** | CrossRef · OpenAlex · Semantic Scholar · PubMed · Unpaywall · ROR |
214
+ | **Network analysis** | [NetworkX](https://networkx.org/) 3.x — Louvain · centrality · spring layout |
215
+ | **Semantic search** | sentence-transformers (`all-MiniLM-L6-v2`) + FAISS (`IndexFlatIP`) |
216
+ | **Gap detection** | scikit-learn KMeans + TF-IDF + PCA |
217
+ | **Duplicate detection** | rapidfuzz `token_sort_ratio` |
218
+ | **AI features** | [Ollama](https://ollama.com) local LLM (`llama3.1:8b`) |
219
+ | **Storage** | SQLite — normalised warehouse + checksum cache |
220
+ | **Data tables** | dash-ag-grid · dash-table |
221
+ | **Geocoding** | geonamescache · pycountry |
222
+ | **Language** | Python 3.13+ |
223
+
224
+ ---
225
+
226
+ ## Project Structure
227
+
228
+ ```
229
+ BiblioFlow/
230
+ ├── src/
231
+ │ ├── app.py # Dashboard entry point
232
+ │ ├── components.py # Topbar, sidebar, shared panel components
233
+ │ ├── import_scopus_csv.py # Standalone Scopus CSV importer
234
+ │ ├── pages/ # One module per analysis section
235
+ │ │ ├── dashboard.py # KPI cards, trends, donut, gauge
236
+ │ │ ├── overview.py # Publication production analysis
237
+ │ │ ├── sources.py # Journals, Bradford's Law, publishers
238
+ │ │ ├── authors_page.py # Author metrics and co-author networks
239
+ │ │ ├── documents_page.py # Citations, references, funding intelligence
240
+ │ │ ├── conceptual_structure.py # Keywords and thematic map
241
+ │ │ ├── social_structure.py # Collaboration networks and world map
242
+ │ │ ├── clustering.py # Network clustering analysis
243
+ │ │ ├── networks.py # Intellectual structure / historiograph
244
+ │ │ ├── evidence.py # Evidence scores, reproducibility, duplicates,
245
+ │ │ │ # provenance, novelty
246
+ │ │ ├── timeline.py # Research timeline bubble + heatmap
247
+ │ │ ├── semantic_search.py # Semantic search with example chips
248
+ │ │ ├── gaps.py # Research gap detection bubble map
249
+ │ │ ├── ai.py # AI Summary · Research Chat · Claim Extraction
250
+ │ │ └── library.py # Full paper corpus table
251
+ │ ├── engine/ # Analysis engines
252
+ │ │ ├── evidence.py # Evidence & reproducibility scoring
253
+ │ │ ├── duplicates.py # Fuzzy + DOI duplicate detection
254
+ │ │ ├── funding.py # Funder categorisation and trends
255
+ │ │ ├── semantic_search.py # FAISS index · search · novelty · similarity
256
+ │ │ ├── gap_detection.py # KMeans gap scoring
257
+ │ │ ├── llm.py # Ollama client wrapper
258
+ │ │ ├── ai_summary.py # Corpus-level AI summary
259
+ │ │ └── claim_extraction.py # Per-paper claim extraction
260
+ │ ├── repository/ # Data access layer
261
+ │ ├── services/ # Import, enrichment, export services
262
+ │ ├── providers/ # CrossRef, OpenAlex, PubMed, … clients
263
+ │ ├── database/ # SQLite schema and connection helpers
264
+ │ ├── visualizations/ # Plotly chart builders and theme
265
+ │ │ ├── theme.py # Dark palette, apply_theme()
266
+ │ │ ├── lollipop.py # Horizontal lollipop chart
267
+ │ │ ├── donut.py # Donut / pie chart
268
+ │ │ ├── gauge.py # Completeness gauge
269
+ │ │ └── worldmap.py # Choropleth collaboration map
270
+ │ ├── extract/ # PDF extraction pipeline
271
+ │ ├── cache/ # FAISS index, AI summary, claim caches
272
+ │ └── assets/ # CSS and static files
273
+ ├── requirements.txt
274
+ └── README.md
275
+ ```
276
+
277
+ ---
278
+
279
+ ## Current Limitations
280
+
281
+ | Area | Status |
282
+ |---|---|
283
+ | Author–institution attribution | Paper-level only — cannot isolate a specific co-author's affiliation |
284
+ | Citation Half-Life | Not computable — APIs return cumulative citation counts, not per-year breakdowns |
285
+ | Author/Journal co-citation | Not implemented — requires resolving individual reference metadata per paper |
286
+ | Bibliographic coupling | Accuracy bounded by DOI resolution in reference lists |
287
+ | Entity deduplication | Institution and country name variants across providers are not yet merged |
288
+ | Evidence signals (PDF) | Trial IDs, ethics statements, figure counts require PDF extraction to be populated; Scopus CSV imports will show 0 for these fields |
289
+ | AI chat streaming | Responses appear after full generation — streaming output not yet implemented |
290
+ | Report export (PDF/Word/PPT) | Planned — marked "Soon" in the UI |
291
+
292
+ ---
293
+
294
+ ## Author
295
+
296
+ **Robin Tomar** — [itsrobintomar@gmail.com](mailto:itsrobintomar@gmail.com)
297
+ **Dr Prabudh Goel's Lab, AIIMS New Delhi**
298
+
299
+ ---
300
+
301
+ <div align="center">
302
+ <sub>BiblioFlow © 2026 · Built for researchers, by researchers · Made with ♥ in India</sub>
303
+ </div>