Mova0.6 pre-release⌕
☰
home / docs / repo-docs / Data, libraries and licences

Data, libraries and licences

This page covers where Mova's data lives, the licence rules every source passes through, the open mathematics and science library and its fetch tool, the Wiktionary dumps and their tools, the paper cards and how a paper's ideas reach the code, the manual usage log, the evaluation lists in eval/, and the competitions Mova can enter.

Where data lives

The repository holds code, rules, seeds and small data. Everything large lives outside it, under $MOVA_DATA, and so do run results:

whatwhere
raw downloads (dumps, papers, books)<source>
catalogs and databasesdb (for example math.duckdb)
models (en.bin, gparse)models
run outputs and logs<run>

Every download is recorded in a manifest in the tools/sources format, one JSON line per item: size, md5, sha256, license, license_url, key, content_type, fetched, and for compacted sources also orig_size, orig_sha256, text_files, dropped_files. sources verify DIR MANIFEST checks size, md5 and signature. Raw catalog pages and XML are kept next to the data, so catalogs can be rebuilt without the network.

Licence rules

Data and model licences is the one inventory of source terms and release rules, and the saved-model training gate is en::license::commercial_gate. Only legal open sources are fetched: no shadow libraries, no lent books, no datasets taken down by DMCA.

Licence classes used by the fetch tools (raw::License for arXiv, books::BookLicense for textbooks):

classlicencestrainingredistribution
openCC BY 3.0/4.0, CC0 1.0, public domainyesyes, with attribution
open, copyleftCC BY-SA, GNU FDLlearned from and measured on; the trained model keeps the licencenot shipped
ncCC BY-NC-SA, CC BY-NC-NDno; reading and research onlyno
arxivthe standard arXiv licence, and pre-2008 papers with no licence fieldno; reading and research onlyno; only arXiv distributes

Negative controls in the tests: NC, ND, standard arXiv and unknown licences do not pass, and neither does the build gate.

Mathematics and science library

An open library of mathematics, statistics, physics and chemistry at university-student level, for the SLM's mathematical skills. Student-level textbooks come first, then papers that teach solving problems: olympiad and competition mathematics, math.HO, symbolic computation (cs.SC), student-level methods, number theory, combinatorics, algebra, inequalities, geometry and analysis. LaTeX and text are preferred; PDF is taken only where nothing else exists.

Sources

sourcewhat it givesaccess
arXiv OAI-PMH (https://oaipmh.arxiv.org/oai, arXivRaw)metadata of the 32 math.* subsets and cs.SC: licence, size per version, dates, categories, MSC, DOImetadata is CC0 and may be stored and shared
export.arxiv.org/src/<id>vNLaTeX sourcestargeted picks only; arXiv forbids bulk programmatic download there, and rate-limits it
Google Cloud mirror gs://arxiv-datasetone PDF per paper, up to dateanonymous, free; no LaTeX
AWS S3 requester-pays s3://arxivmonthly tars of PDF and sources, categories mixedneeds an AWS account; the only legal bulk route to LaTeX
AIM Open Textbook Initiative, Open Textbook Library, OpenStaxtextbook catalogslicence per book; the OpenStax API is authoritative over other catalogs
OAPEN REST APIopen books as PDF and ready text, licence from MARC/ONIXHTML pages are closed; use the API
Internet Archive, publisher sitesindividual open textbooks and their LaTeX sourcesper book

Adjacent arXiv categories need no separate harvest: arXiv aliases already place them in mathematics (math-ph ≡ math.MP, stat.TH ≡ math.ST, cs.IT ≡ math.IT, cs.NA ≡ math.NA). cs.DM and cs.LO without a mathematics cross-listing are not harvested; --set cs:cs:DM adds one.

Selection rules

tools/mathlib

B=target/release/mathlib; M=$MOVA_DATA/raw/math; DB=$MOVA_DATA/db/math.duckdb
# 1. metadata, subset by subset (state in state.tsv; a rerun resumes; a STOP file pauses)
$B oai $M/arxiv-oai/math-AG --set math:math:AG        # likewise for every math.* subset and cs:cs:SC; --from DATE for updates
# 2. catalog: arXivRaw -> TSV -> DuckDB; textbooks
$B parse $M/arxiv.tsv $M/arxiv-oai/math-?? $M/arxiv-oai/cs-SC
$B books-fetch $M/textbooks/catalog                    # or otl:<subject> (physics, chemistry ...)
$B books $M/textbooks/catalog $M/books.tsv && $B books-pdf $M/textbooks/catalog $M/books.tsv
$B sql $DB tools/mathlib/sql/load.sql arxiv=$M/arxiv.tsv books=$M/books.tsv "files=$M/*/manifest*.tsv"
$B sql $DB tools/mathlib/sql/stats.sql --mode markdown
# 3. download: list -> polite fetch -> manifest -> verification
$B sql $DB tools/mathlib/sql/books-pick.sql out=$M/books-list.tsv
$B fetch $M/books-list.tsv $M/textbooks $M/textbooks/manifest.jsonl --delay-ms 2000 --max-bytes 2000000000 --expect-pdf --kind textbook
$B sql $DB tools/mathlib/sql/extend.sql out=$M/arxiv-src/list.tsv gcs_out=$M/arxiv-pdf/list.tsv
$B fetch $M/arxiv-src/list.tsv $M/arxiv-src $M/arxiv-src/manifest.jsonl --delay-ms 3500 --compact-src
target/release/sources verify $M/textbooks $M/textbooks/manifest.jsonl

How it behaves:

Papers and books never go into git; only the code and this page do.

Not collected

Wiktionary

Wiktionary is Mova's first open dictionary source: all languages, English and Ukrainian first. Everything is built from the raw dumps; ready-made parses (Kaikki, wiktextract) are not used.

Data. <run> mirrors the dumps.wikimedia.org layout, one snapshot run for all editions; provenance, sha1 and reproduction commands are in SOURCES.md beside it. The format is pages-articles-multistream with an offset:page_id:title index. It holds articles, templates (ns 10) and Lua modules (ns 828): everything needed to expand templates ourselves. Streams hold 100 pages, so a single page can be fetched by title and the dump can be parsed in parallel. Large editions are split into parts, each with its own index. Processing is streaming only; decompressed XML is never written to disk. The licence is CC BY-SA 4.0 plus GFDL, so derived data falls under the CC BY-SA rule above.

Tools.

toolwhat it does
tools/wikt-page DIR TITLE...prints the raw wikitext of exact titles (with namespace prefix) under a header === title | ns id rev | file; unknown titles go to stderr with exit code 1. Output matches index.php?oldid=<rev>&action=raw byte for byte
tools/wikt-countstreaming statistics over a dump read from stdin
tools/wikt-idiomsextracts idioms, proverbs, phrases, phrasal and multiword verbs, and register- or region-labelled words from an English dump; feeds the expressions base (Pragmatics: frames — who did what to whom, why, and what came next)
tools/wikt-extractthe English entries of the English edition as the add-on dictionary module wiktionary-en (below; README): page DIR TITLE… prints rows, build DIR OUT makes the module, check OUT verifies it, cover LAYER WORDS reports a word list's coverage

Article structure. Grammar is recorded in template parameters, not in the text, so a parser must read template calls with their parameters and, for inflection, reproduce the logic of templates and Lua modules rather than parse the generated tables.

The two editions encode the same grammar differently, so cross-checking them is a ready quality control.

The English module. wikt-extract reads the English entries of the English edition from the raw dump and writes the add-on module wiktionary-en (Add-on modules): a dictionary layer in the school layers' six columns plus labels, synonyms, antonyms, forms, form-of links, template gaps and provenance (page id, revision id, dump file, stream offset), the list of templates it had no handler for, a report and module.json. Each dump stream is decoded on its own from the index's offsets, on a fixed number of threads; the rows are sorted, so the layer does not depend on the thread count. Templates are emulated, not executed: a template with no handler leaves its text out and is counted in the row and in gaps.tsv, never dropped silently. The module is CC BY-SA 4.0 and GFDL like its source; it lives in <version>, is distributed apart from Mova, and the tool refuses to write it inside a Git work tree.

wikt-extract check validates a built module and cover reports how much of a word list it covers; extraction counts, resource use and template-gap reports stay with the run. The layer is sorted, so it does not depend on the thread count. A dictionary entry or an acronym match does not establish that its sense fits the document at hand. What the module changes in the pupil: building the dictionary.

Other editions. The stream reader, the template parser and the row format serve every edition; what differs is the section and template vocabulary, so each edition needs its own entry reader and template handlers.

Paper cards

Every paper, book or manual Mova reads gets a short card, so that what the literature says reaches the grammar (languages/<code>/) and the code. The cards live in the Research library (its cards/ folder) and are published on research.elamur.ai; this repo keeps only the lists of the works Mova uses: Papers Mova uses (the main list, each row linked to its card there) and papers/measured.tsv (what came of each measured work), with papers/aliases.tsv for merged duplicate cards.

Where. Cards Mova already uses in code are at the top of the cards folder. Other cards are in <code>/<slug>.md, one folder per language or group: en (English and Germanic), hbo (Ancient Hebrew), he (Modern Hebrew), arc (Aramaic, Syriac, Neo-Aramaic), sem (general Semitic and Arabic morphology), and the topic folder mtrans (machine translation). The slug is the library's: <venue-or-lang>-<year>-<first author>-<title words>.

Format.

# <Title>

**Authors:** ... · **Year:** ... · **Venue:** ...
**Link:** <open URL or library path> · **Licence:** <CC BY 4.0 / public domain / copyrighted — summary only>

## What it is about
Three to six sentences in our own words: the question, the data, the method, the result.

## Ideas
- I1. <one idea: what could be done, and where>
- I2. ...

## For Mova
Where the ideas would apply: a chapter of `languages/<code>/`, a crate or tool, a measure to run.

Rules.

How ideas reach the code. Where code applies a paper's idea, a comment cites the card and idea, for example (ning-2020 I3). The main list names each work's role for Mova (implements, measured, rules, background).

Hubs. Pages per concept, per author and per cited card are generated from the library's metadata, citations and cards, never stored in this repo: research.elamur.ai publishes them, and an internal tool can write them as Markdown into a build output. Two runs on the same inputs give the same bytes.

The usage log

usage.tsv is the manual log of where papers and books are applied. It holds only what the repository text does not show as a reference: a work mentioned only by title or by author and year, a method without a reference, reading that influenced a decision. References already in the text (ACL ids, papers/... and books/... paths, aliases from tools/papers/aliases.tsv, "author year" with a work in the library) are collected automatically and do not belong there.

Columns, tab-separated: date (YYYY-MM-DD), work (ACL id, library folder, or "outside the library: author year title"), where (repo file, optionally #section), how (rule source, knowledge source, bar or metric, method, data, format, precedent, review, mention), who, note. A bad row (unknown id, folder, file or section; bad date, how or who) stops the collector before any output is written. The log feeds back-citations, the bibliography and system papers.

Evaluation lists

eval/ holds small lists that qualify an evaluation, such as stepgame-excluded.tsv: StepGame test questions whose story contains a statement contradictory in the training data, so a clean score can leave them out. The benchmark files themselves stay outside the repository under their own licences.

Competitions

Mova enters linguistic shared tasks where possible. Candidates, each with papers in the library:

competitionwhat it measureswhere Mova fits
CRAC (CorefUD)multilingual coreference, with an LLM trackcontext and pronouns, the story layer; SLM plus a large model
UniDivemorphosyntactic parsing without the notion of "word"the metadialect, converters (The Mova dialect: a UD metadialect, treebanks and converters)
PARSEME 2.0multiword expressions over UDexpressions in seeds and domain snapshots
DISRPTdiscourse units and relationsthe story layer, pragmatics
SemEvalnew tasks each year (sarcasm, abductive events ...)pragmatics of what was meant
BabyLMa small model on limited data, including Gricean pragmaticsthe SLM learner

Rules that concern Mova:

This page in Markdown → https://md.mova.elamur.ai/free/en/docs/repo-docs/data/