CoolFace
Datasetpublic

ashtok897/european-hplt-v1

European HPLT v1 A multilingual pretraining corpus of 45,031,396 documents (~50.9B estimated tokens, ~190 GB raw JSONL) across 41 European languages, built from HPLT Monolingual v3 high-quality web crawl data. The corpus spans Germanic, Romance, Slavic, Celtic, Baltic, Finno-Ugric, Greek, and other European language families. Every document has an HPLT WDS quality score of 10 or higher (the top of the quality distribution). Quick Start from datasets import… See the full description on the dataset page: https://huggingface.co/datasets/ashtok897/european-hplt-v1.

sourceHugging Facecc0-1.0updated 4mo agoView on Hugging Face
3likes471downloads
Dataset Card

European HPLT v1

A multilingual pretraining corpus of 45,031,396 documents (~50.9B estimated tokens, ~190 GB raw JSONL) across 41 European languages, built from HPLT Monolingual v3 high-quality web crawl data.

The corpus spans Germanic, Romance, Slavic, Celtic, Baltic, Finno-Ugric, Greek, and other European language families. Every document has an HPLT WDS quality score of 10 or higher (the top of the quality distribution).

Quick Start

python
from datasets import load_dataset

# Streaming (recommended — corpus is ~190 GB)
ds = load_dataset("ashtok897/european-hplt-v1", split="train", streaming=True)
for row in ds.take(3):
    print(row["lang"], row["text"][:100])

# Filter by language
de_ds = ds.filter(lambda x: x["lang"] == "de")

# Full training split (requires disk space)
ds = load_dataset("ashtok897/european-hplt-v1", split="train")

Language Distribution

LanguageBCP-47Documents%Est. TokensAvg Words/Doc
Englishen3,080,4346.84%~4.44B955
Frenchfr2,726,7176.06%~4.56B1,073
Germande2,723,0896.05%~5.23B1,051
Spanishes2,463,1585.47%~2.91B768
Portuguesept2,171,2854.82%~2.46B728
Italianit2,168,0074.81%~2.88B820
Dutchnl1,902,0304.22%~1.64B538
Polishpl1,891,3584.20%~1.98B591
Czechcs1,600,7883.55%~1.34B516
Ukrainianuk1,577,0303.50%~1.08B381
Swedishsv1,362,1293.02%~1.58B721
Romanianro1,329,4182.95%~1.29B617
Hungarianhu1,328,0262.95%~1.36B555
Greekel1,322,9342.94%~1.41B639
Danishda1,085,9792.41%~1.16B668
Norwegian Bokmålnb1,081,3492.40%~0.99B586
Slovaksk1,063,2352.36%~0.72B413
Finnishfi1,062,2982.36%~1.64B751
Bulgarianbg1,060,2252.35%~0.73B434
Russianru1,046,5332.32%~3.62B1,847
Catalanca792,7691.76%~0.60B499
Lithuanianlt792,6141.76%~0.52B352
Latvianlv784,0331.74%~0.55B391
Sloveniansl783,9871.74%~0.57B449
Croatianhr771,6891.71%~0.56B448
Serbiansr759,8321.69%~0.54B440
Macedonianmk648,0381.44%~0.34B333
Bosnianbs642,0251.43%~0.44B427
Belarusianbe639,9821.42%~0.38B337
Galiciangl639,3271.42%~0.42B424
Basqueeu636,4411.41%~0.36B294
Norwegian Nynorsknn535,0721.19%~0.36B437
Icelandicis432,8020.96%~0.82B1,073
Welshcy431,2460.96%~0.25B390
Maltesemt326,7360.73%~0.21B358
Luxembourgishlb324,9140.72%~0.22B417
Irishga321,8420.71%~0.21B431
Asturianast215,9420.48%~0.19B555
Faroesefo209,9250.47%~0.10B292
Scottish Gaelicgd197,6040.44%~0.15B502
Occitanoc98,5540.22%~0.08B530
Total45,031,396100%~50.88B681
Token estimates use chars÷4. Actual count varies by tokenizer.

Notable observations

  • —Russian has the highest average doc length (1,847 words) — Russian web articles in HPLT v3 tend to be substantially longer than other languages.
  • —Icelandic has unusually long average doc length (1,073 words) for its size tier, similar to Tier 1 languages.
  • —German has the highest total token share among Latin-script languages (~5.23B) despite ranking 3rd by doc count.
  • —Estonian (et / est_Latn) was targeted but is not present in HPLT v3 sorted collection and was excluded.

Dataset Fields

FieldTypeDescription
textstringDocument text
langstringBCP-47 language code
urlstringSource URL
scorefloatHPLT WDS quality score (raw integer, higher = better; all docs ≥ 10)
collectionstringSource MIME type (e.g. text/html)
web-registerstringDocument register/genre code (see Web Registers section)
probfloatLanguage detection confidence
char_countintCharacter count
word_countintWhitespace-split word count
doc_idstringUnique per-language ID, e.g. de_0000001

Data Splits

Split ratios are 98% / 1% / 1% over Parquet shards (250,000 rows per shard, ~180 shards total).

SplitDocumentsShards
train~44.13M~176
validation~450K~2
test~450K~2

Note on Data Completeness

One shard (train-00107-of-00181.parquet) was removed from the published train split because Hugging Face's ClamAV scanner flagged a false-positive malware signature (Email.Trojan.Trojan-939) on email-like text within the crawled web content. Parquet files contain only data and cannot execute code — the flag was a byte-pattern match against text in the text column, not executable malware. As a result, the train split contains 176 shards (~44.0M documents) rather than

  1. 1.Remaining file names keep their original of-00181 suffix for consistency; the datasets loader globs all available shards, so this does not affect loading.

How It Was Built

Source: HPLT v3 sorted shards (https://data.hplt-project.org/three/sorted), which order documents by WDS quality score descending — every document in this corpus has a WDS score of 10 or higher.

Quality filtering (applied inline during download):

  • —50–100,000 characters per document
  • —Max 50% non-alphabetic characters (Unicode-aware)
  • —Min average word length 2.0 characters

Deduplication:

  • —Exact SHA-256 hash dedup on all languages
  • —MinHash near-duplicate removal disabled for this release — HPLT v3 already applies global near-deduplication, so re-running MinHash on Indo-European languages adds significant compute for marginal gain. May be re-enabled in a future release.

Merge: Languages are interleaved according to configured fractions targeting a balanced multilingual corpus. The merge.py step uses an adaptive quota algorithm that:

  • —Caps each language at its available document count
  • —Auto-excludes languages with less than 10% of their target quota (none were excluded in this release except Estonian, which had 0 data)
  • —Redistributes excluded quota across the remaining languages
  • —Shuffles the final output (deterministic, seed=42)

Pipeline code: github.com/ashtok/build-multilingual-corpus

Web Register Distribution

HPLT v3 labels documents with a register/genre code:

RegisterCount%Meaning
IP14,245,00031.6%Informational persuasion
NA10,847,57424.1%Narrative
IN8,232,73218.3%Informational description
MT3,810,8508.5%Machine-translated
ID1,926,9084.3%Interactive discussion
OP1,823,7914.1%Opinion
HI1,220,2842.7%How-to / instructional
unknown1,176,0712.6%Unclassified
LY233,7240.5%Lyrical
To exclude machine-translated content, filter on web-register != "MT" (drops ~8.5%).

Source Collection Types

CollectionCount
text/html44,927,249
application/atom+xml46,512
application/xml22,690
(empty)16,567
application/xhtml+xml6,492
application/vnd.oasis.opendocument.text2,708
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet2,643
text/plain1,771
application/rss+xml1,700
application/epub+zip1,407

99.8% of documents are HTML.

Corpus Statistics Summary

MetricValue
Total documents45,031,396
Total characters203.5B
Total words30.7B
Estimated tokens~50.9B
Avg doc length (words)681
Median doc length (words)264
Min doc length (words)6
Max doc length (words)26,373

Limitations

  • —Web text only — no books, Wikipedia, or structured data
  • —~8.5% machine-translated content — identifiable via web-register: MT
  • —No Estonian — language unavailable in HPLT v3 sorted collection at corpus build time
  • —No MinHash near-dedup — exact dedup only (HPLT v3 already applies global near-dedup)
  • —Tier-6 languages are data-limited — Occitan, Scottish Gaelic, Faroese, Asturian have <250K docs each
  • —Russian has only 1.05M docs — substantially less than other Tier-1 languages because HPLT v3 sorted shards exhausted at this quality level
  • —No PII filtering beyond HPLT defaults
  • —Language proportions are partially balanced, not natural — high-resource languages are slightly down-weighted versus their raw web share to give more space to mid/low-resource languages

Comparison with Related Corpora

CorpusDocsLanguagesQuality barSource
European HPLT v145.0M41WDS ≥ 10HPLT v3
HPLT v3 (raw)~21B191NoneHPLT v3
CulturaX6.3T tokens167HeuristicmC4 + OSCAR
RedPajama-v230T tokens5Quality signalsCommon Crawl
OSCAR 23.01~9.8B151NoneCommon Crawl

This corpus trades scale for quality: every document is pre-filtered to the top WDS tier and the language mix is tilted to include lower-resource European languages that are underrepresented in other multilingual corpora.

Citation

bibtex
@dataset{europeanHPLTv1_2026,
  author    = {Mahajan, Ashutosh},
  title     = {European {HPLT} v1: A 45M-document Multilingual Corpus for 41 European Languages},
  year      = {2026},
  publisher = {Hugging Face},
  url       = {https://huggingface.co/datasets/ashtok897/european-hplt-v1}
}

@article{oepen2025hplt,
  title   = {{HPLT} 3.0: Very Large-Scale Multilingual Resources for {LLM} and {MT}},
  author  = {Oepen, Stephan and others},
  journal = {arXiv preprint arXiv:2511.01066},
  year    = {2025}
}

License

CC0 1.0 Universal — inherited from HPLT v3.