Omnigraph
Graph engine for context assembly. Object-storage native. Agents work with graph data the way engineers work with code: branched, typed, reviewed, merged, audited, and governed.
Perform snowball searches on the OpenAlex citation graph using openalexPro's on-disk processing pipeline and store results in Parquet.
DataR · ShellGitHub @openalexProOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Loading comments.
Checking sign-in status.
Snowball functionality for openalexPro Ecosyste,
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Citation snowball searches on the OpenAlex graph, processed on disk.
Starting from a set of seed papers (keypapers), a snowball search follows citation links outward: the works that cite the seeds, and the works the seeds cite. openalexSnowball retrieves that neighbourhood and writes it as partitioned Apache Parquet, so the result is bounded by disk rather than by memory and can be queried without loading it.
Two backends produce the same on-disk construct:
# stable, from r-universe
install.packages(
"openalexSnowball",
repos = c("https://openalexpro.r-universe.dev", "https://cloud.r-project.org")
)
# development
remotes::install_github("openalexPro/openalexSnowball", ref = "dev")
library(openalexSnowball)
out <- pro_snowball(
identifier = c("W2741809807", "W2755950973"),
output = "./snowball"
)
sb <- read_snowball(out, return_data = TRUE, shorten_ids = TRUE)
sb$nodes
sb$edges
Keypapers may be given as identifier (OpenAlex ids) or doi.
id is a key: every work appears exactly once. Because a work can hold more
than one role in the same search — a keypaper that cites another keypaper is
both — the roles are three independent flags:
| column | meaning |
|---|---|
is_keypaper | one of the supplied keypapers |
is_citing | cites at least one keypaper |
is_cited | is cited by at least one keypaper |
Any combination can be TRUE. relation is also present and is the hive
partition key, but it records only the highest-precedence role
(keypaper > citing > cited), so it is lossy — filter on the booleans.
Three mutually exclusive types: core (at least one endpoint is a
keypaper, both endpoints in the dataset), extended (both endpoints in the
dataset, neither a keypaper), and outside (an endpoint is external).
Selecting several is a union of disjoint sets.
pro_snowball(
identifier = keypapers,
snapshot = "/path/to/openalex/parquet",
select = c("id", "doi", "title", "publication_year"),
output = "./snowball_offline"
)
Needs the indexes built by openalexSnapshot::build_corpus_index() and
build_citation_index(), plus build_doi_index() for DOI keypapers.
select=. Record retrieval is ~92% of an
offline run.options(openalexSnowball.duckdb_config = list(concurrency = 4)).resume = TRUE continues an interrupted run. The default output is a
temporary directory that does not survive the session, so pass a persistent
output = if you want that.See vignette("Snowball") and ?pro_snowball for the full argument set.
| package | role |
|---|---|
| openalexPro | OpenAlex API access and JSON→Parquet conversion |
| openalexSnapshot | local snapshot indexing and offline lookup |
| openalexConvert | export to CSL-JSON, BibTeX, Zotero |
Code and documentation in this project have been generated with the assistance of LLM tools. All content is based on conceptualisation by the authors and has been reviewed and edited by humans afterwards.