AnyResearch is a MATLAB pipeline for keyword-based literature collection, research-trend review, and multi-institution benchmarking.
It uses OpenAlex and arXiv to fetch scholarly metadata and exports review-ready results to Excel.
Design philosophy: Convert publicly available scholarly metadata into structured, decision-ready material.
The user performs the final interpretation; AnyResearch focuses on delivering clean inputs for literature review and institutional comparison.
| Scenario | Question | What to use |
|---|---|---|
| Research theme selection | Which topics are growing fastest? | Layer 0: keyword search + Summary |
| Literature review | Collect review articles in a target field | Layer 0: filterType="review" |
| Competitive survey | What are rival institutions publishing? | Layer 1: institution batch |
| University IR / planning | Compare your institution against benchmark universities | Layer 1 + Layer 2 |
| Grant proposal support | Add quantitative trend evidence | Layer 2: analytics |
| EasyMolKit integration | Find reproducible cheminformatics papers systematically | Layer 0: cheminformatics queries |
AnyResearch is designed as four incremental layers. Layer 0 alone covers the primary use case.
| Layer | Additional requirements | What you get |
|---|---|---|
| Layer 0 (Core) | MATLAB + OpenAlex API Key | Keyword search, Excel workbook (4 sheets), JSONL / CSV output |
| Layer 1 (Batch) | institutions.csv |
Multi-institution processing and batch_comparison.xlsx |
| Layer 2 (Analytics) | none | Citation velocity, topic growth rate, and institution dominance integrated into outputs |
| Layer 3 (PDF) | Text Analytics Toolbox or Python | OA PDF download, text extraction, keyword evidence |
Standalone downstream examples built on search_results.jsonl are documented in docs/examples.md. They are optional and not part of the core product pipeline.
- Create a free account at openalex.org
- Copy your API Key from openalex.org/settings/api
- Create
config/settings.jsonbased onconfig/settings.example.json
{
"openalex": {
"api_key": "YOUR_API_KEY_HERE"
}
}Edit Section 0 of main_run_pipeline.m:
query = "renewable energy forecasting";
fromDate = "2023-01-01";
toDate = "2025-12-31";
sortBy = "cited_by_count:desc";
filterType = "";Search syntax:
- AND: separate with spaces
- OR: use
| - Phrase: wrap in quotes
Run Section 0 and then Section 1 with Run Section (Ctrl+Enter).
Outputs are saved under result/runs/<YYYYMMDD_HHMMSS>/.
result/runs/<YYYYMMDD_HHMMSS>/
search_results.xlsx
search_results.jsonl
search_results.csv
run_meta.json
| Sheet | Contents |
|---|---|
| Overview | Title, DOI, publication year, citation count, OA flag, journal, abstract |
| Detail | Authors, affiliations, PDF status, topics, and other detailed fields |
| Summary | Yearly paper counts, average citations, citation velocity, growth rate |
| Config | Search conditions and run metadata |
Process multiple universities or organizations in one run and generate cross-institution comparisons.
Step 1: Generate an institution candidate CSV
prepare_institutions_csv(["Example Research University", "Example Technical University", "Example Metropolitan University"], ...
countryFilter="JP", maxCandidates=3)
% -> Outputs reviewed-v2 candidates to data/list/institutions_candidate.csv
% -> Review include / role / note and use it as institutions.csv
lookup_institution_id("Example Research University")institutions_candidate.csv already uses the reviewed batch schema. No manual column renaming is required.
After reviewing include, save or reuse it as data/list/institutions.csv.
Step 2: Run the batch
main_run_batchIn main_run_batch.m:
- set
prepareList=trueto refresh the candidate CSV via Section 0.5 - set
dryRun=trueto preview filters and hit counts only - run normally to write outputs under
result/batch/<YYYYMMDD_HHMMSS>/
See also: Benchmark Institutions Workflow
Analytics are integrated automatically into Summary and batch_comparison.xlsx.
| Metric | Meaning |
|---|---|
avg_citation_velocity |
Average annual citation rate per paper |
growth_rate_pct |
Year-over-year paper-count growth |
institution_dominance |
Composite score based on paper share and citation share |
Candidate discovery can now be managed across runs instead of by one-off spreadsheet copies.
appendToCandidates=trueappends the final result table intoresult/candidates/candidates.jsonlcandidates.xlsxprovides a review view sorted for triagerepro_candidates.mdexports onlystatus="reviewed"rows for EasyMolKit registrationupdate_candidates_ledger(...)lets you mark rows asreviewed,rejected, orregistered_RPxx
Fetch preprints from arXiv in parallel with OpenAlex:
useArxiv = true;- Recorded as
source_dataset = "arxiv" - DOI duplicates are removed automatically
- arXiv preprints are excluded when
filterType="article"
| Feature | Parameter | Description |
|---|---|---|
| PDF download and extraction | enablePdfDownload |
Download OA PDFs and extract text |
| Keyword evidence | enableKeywordEvidence |
Extract keyword hit snippets from PDF text |
PDF extraction uses a two-stage engine:
- Engine 1:
extractFileText()(Text Analytics Toolbox) - Engine 2: Python pdfminer fallback
main_run_pipeline.m
main_run_batch.m
src/
openalex/
adapters/
export/
pipeline/
config/
util/
analytics/
pdf/
python/
config/
data/list/
result/
test/smoke/
docs/
| File | Contents |
|---|---|
| docs/quickstart.md | Detailed setup, execution guide, and FAQ |
| docs/workflows/benchmark_institutions.md | Candidate generation, manual review, and batch execution |
| docs/workflows/repro_discovery.md | Reproduction-candidate discovery and candidate-ledger workflow |
| docs/reference.md | Function and smoke-test reference |
| CHANGELOG.md | High-level release history |
Detailed internal project rules and phase-by-phase planning remain in the private development repository.
MIT License. See LICENSE for details.