Skip to main content

The Citation Graph: How We Know What the Dictionaries Quote

The great Sanskrit dictionaries do not just define words — they prove them, by citing the classical texts where each sense occurs. In the Cologne digital sources those proofs are <ls> (literary source) tags: <ls>MBh. 3, 12965</ls> is Monier-Williams citing the Mahābhārata. Each dictionary, however, abbreviates in its own way — MBh., MBH, MAHĀBHĀRATA — so the citations of different dictionaries could not be compared until the sibling csl-atlas project resolved every dictionary's own abbreviations to shared canonical text nodes.

The result is the <ls> citation graph: 828,505 resolved citations linking 11 dictionaries to 912 canonical texts through 1,701 dictionary→text edges. This page explains what that graph is, how it was built, and how to query it yourself. (For the interactive per-dictionary profiles, see What Each Dictionary Quotes.)

What the graph is — and is not

It is a citation-frequency graph: each edge says dictionary D cites text T, n times. That makes citation habits comparable — you can see that Apte's favourite text is the Raghuvaṃśa while Böhtlingk & Roth lean on the epics and Pāṇini — and it makes the tradition's canon measurable: which texts every lexicographer reached for, and which only one ever quoted.

It is not a per-passage index. The locus (book/verse) inside each <ls> tag is discarded — counts are per source-text only. And it is not a completeness claim: citation frequency measures lexicographic habit, not a text's importance.

Who feeds the graph

Resolved <ls> citations per dictionary — 828,505 across the 11 covered dictionaries.

PWG536,172 · 64.7% · 475 texts
AP57,113 · 6.9% · 155 texts
PW50,701 · 6.1% · 243 texts
BEN49,003 · 5.9% · 96 texts
BHS40,875 · 4.9% · 136 texts
AP9037,993 · 4.6% · 149 texts
MW20,250 · 2.4% · 5 texts
LRV16,469 · 2.0% · 106 texts
SCH11,496 · 1.4% · 160 texts
PWKVN8,386 · 1.0% · 172 texts
MD47 · 0.0% · 4 texts
Data table
DictionaryResolved citationsShare of graphDistinct texts cited
PWG536,17264.7%475
AP57,1136.9%155
PW50,7016.1%243
BEN49,0035.9%96
BHS40,8754.9%136
AP9037,9934.6%149
MW20,2502.4%5
LRV16,4692.0%106
SCH11,4961.4%160
PWKVN8,3861.0%172
MD470.0%4

PWG (Böhtlingk & Roth's seven-volume Petersburger Wörterbuch) dominates — its citation apparatus was industrial in scale, and two-thirds of its raw <ls> tags resolve. At the other end, MD contributes 47 citations: real, but read it as a placeholder, not a profile.

The long tail of the canon

Breadth is as telling as volume. A handful of texts — the Mahābhārata, the Ṛgveda, the Rāmāyaṇa, the Manusmṛti — are quoted across nearly the whole tradition. But most of the canon is narrow:

Breadth of citation: of the 912 canonical texts, 608 appear in only one dictionary.

1 dictionary608 texts · 66.7%
2 dictionaries97 texts · 10.6%
3 dictionaries102 texts · 11.2%
4 dictionaries31 texts · 3.4%
5 dictionaries25 texts · 2.7%
6 dictionaries20 texts · 2.2%
7 dictionaries12 texts · 1.3%
8 dictionaries13 texts · 1.4%
9 dictionaries4 texts · 0.4%
Data table
Cited by exactly n dictionariesCanonical textsShare of texts
160866.7%
29710.6%
310211.2%
4313.4%
5252.7%
6202.2%
7121.3%
8131.4%
940.4%

Two-thirds of the texts in the graph are cited by a single dictionary — typically a specialist reaching where nobody else did: BHS citing Buddhist Sanskrit texts no other dictionary touches, or PW's Nachträge tradition quoting obscure śāstra editions. The widely-shared core is small: only 74 texts appear in five or more dictionaries.

How it was built

The full method lives in the csl-atlas citations README; in brief:

  1. Extract every <ls>…</ls> tag from the csl-orig digital sources (~1.5 million raw tags across the 11 covered dictionaries).
  2. Resolve each leading abbreviation against that dictionary's own abbreviation legend (this site's abbreviations dataset), by longest-prefix match.
  3. Filter non-citations. MW reuses <ls> for grammatical markers (A. = Active, ind.) and editorial tags (ibid., the L. = "lexicographers" convention) — 63,582 such markers are excluded auditably, not silently.
  4. Borrow keys where a dictionary has no legend of its own but a documented shared convention: AP borrows AP90's key (same Apte system); SCH and PWKVN borrow PWG's (the Petersburger tradition).
  5. Fold variants into one canonical node — diacritic- and case-insensitive merging (ṚGVEDAṚg-vedaṚgveda) plus a small hand-verified alias table (Mānavadharmaśāstra and Manu's GesetzbuchManusmṛti), every mapping a well-established identification, never a guess.

Overall, 57.8% of raw text-bearing <ls> tags resolve to a canonical text. The rest — unkeyed abbreviations, ambiguous scholar shorthands like AUFRECHT — stay in a public unresolved-keys worklist rather than being guessed.

Known limitations

  • Coverage is 11 of the 43 dictionaries — those whose abbreviation legends resolve. The Vedic concordances (VEI, PUI) carry no <ls> tags at all; GRA's Rigveda references are verse numbers, not abbreviations; IEG cites inscription corpora, a separate epigraphic universe deliberately left out.
  • MW's yield is genuinely low (~8% of its raw tags): after the grammatical-marker filter, most of what remains follows the untracked L. convention or unkeyed abbreviations, so MW currently resolves to only 5 coarse text nodes. Treat MW's edges as trustworthy but its profile as a placeholder.
  • Borrowed keys resolve partially — SCH at 37%, PWKVN at 48% (they share only part of the PWG abbreviation set).
  • Title-synonymy tail. The alias table folds the biggest variants; a text cited under a second, lesser-used title may still count as two nodes (MD's "Rigveda" is not yet folded into "Ṛgveda").
  • Refinements in flight. Per-locus resolution of Mahābhārata references and verification of the Indische Sprüche anthology citations are active work on the csl-atlas side; expect those regions of the graph to sharpen.

Query it yourself

The graph is three small public TSV files — no database needed:

FileColumns
ls_citation_edges.tsvdict · canonical_text · count — the graph itself
ls_citation_nodes.tsvcanonical_text · total_cites · n_dicts · variant_forms
ls_citation_unresolved_top.tsvthe QA worklist of unresolved abbreviations

A ten-line start, straight from the raw file:

import csv, urllib.request

URL = ('https://raw.githubusercontent.com/sanskrit-lexicon/csl-atlas/'
'main/data/citations/ls_citation_edges.tsv')
rows = list(csv.DictReader(
urllib.request.urlopen(URL).read().decode('utf-8').splitlines(),
delimiter='\t'))

# Which dictionaries cite the Kathāsaritsāgara, and how often?
for r in rows:
if r['canonical_text'] == 'Kathāsaritsāgara':
print(r['dict'], r['count'])

To rebuild the graph from scratch, run build_ls_citation_graph.py in a csl-atlas checkout with csl-orig and csl-guides as siblings (~1 minute). The data is CC BY-SA — cite csl-atlas and the Cologne Digital Sanskrit Dictionaries.

Trust block
  • Evidence: both figures above are computed at build time from the committed src/data/citation-sources.json feed, vendored by scripts/build-atlas-viz.mjs from the csl-atlas citation graph (edges + nodes TSVs above; method in its README): 828,505 resolved <ls> citations → 912 canonical texts × 11 dictionaries, 1,701 edges (graph v2, 06-07-2026; feed re-verified against the TSVs 12-07-2026).
  • Limitations: as listed above — 11 of 43 dictionaries; MW and MD are placeholders; resolution rate 57.8% of text-bearing tags; frequency ≠ importance.
  • Owner repo: csl-atlas (data) / this repo (rendering).

See also