eeuz prd Phonetic Pronunciation Data - krcenov/RNS510-Map-Viewer GitHub Wiki
Status: β
Cracked Β· 279 MB compressed / 572 MB decompressed Β·
FLAT_COMPRESSED (see container format) Β·
Record format and all 3 per-record fields validated at full file
scale β the last 2 fields cracked in a later session via eeu.mod's
own schema.
A phonetic pronunciation catalog for road names β presumably feeding the
same text-to-speech engine eeuz.pca's
phoneme catalog serves for voice guidance. This file's content had never
been examined before the session that cracked the record framing β only
its FLAT_COMPRESSED container was known.
94-byte header, then self-delimiting variable-length records back-to-back:
uint8 name_len
bytes name -- name_len bytes, ASCII
uint8 phon_len
bytes phon -- phon_len bytes, ASCII
uint32 LE roadID -- eeu.rd record index (CRACKED, see below)
uint32 LE minNumber -- CRACKED (later session, see below)
uint32 LE maxNumber -- CRACKED (later session, see below)
Validated at FULL scale, not a sample: parsing the entire 572MB decompressed body this way consumes every byte with zero leftover bytes at EOF, producing exactly 11,960,527 well-formed records. A wrong record-format guess would almost certainly drift and crash or leave a large remainder well before reaching that much real data β about as strong a structural confirmation as a variable-length format can get without an explicit spec.
The full human-readable name, type word first, natural spoken order
β e.g. "VIA LIDO AZZURRO". Unlike
eeuz.prl's ;-demoted sort-key form
(type word moved after the core name for alphabetical search), this is
exactly how you'd want it spoken.
A custom, X-SAMPA-like phonetic alphabet: | separates syllables, "
marks primary stress on the following syllable, % marks secondary
stress. Confirmed genuinely linguistically correct across unrelated
language families β strong evidence this is real phonetic data, not
structured-looking noise:
| Name | Phonetic | Why it's right |
|---|---|---|
CONTRADA GUITGIA (Italian) |
kon|"tra|da "gwit|dZa |
dZ = the correct voiced postalveolar affricate for Italian soft "gi" |
VIA MASSIMO D'AZEGLIO (Italian) |
"vi|a "mas|si|mo dad|"dzEL|Lo |
dz for the "z", E for the open-e, doubled L for the palatal "gli" /Κ/ |
E75 (Norwegian) |
"e: s2|ti|"fem |
literally "E syttifem" ("E seventy-five") β genuine number-to-speech, not digit-by-digit playback |
341 (Norwegian) |
"tre: ""h}n|dr@ %O f2|ti|"e:n |
"tre hundre og fΓΈrtiΓ©n" ("three hundred and forty-one") |
A direct eeu.rd record index. Validated on
a 5,000-record random sample spanning the whole file: 100% are valid
indices, and 100% of those have eeu.rd's own (type-word-free) name
as an exact substring/suffix of this record's own name field.
Coverage: 5,981,409 / 8,809,081 (67.9%) of eeu.rd records have at
least one .prd entry. Multiplicity: most roads get 1β3 entries (2 is
the single most common count, 2,721,836 roads), tailing off sharply after
that (max observed: 9, on 2 roads).
eeu.mod's own schema names this table
phRoad with exactly these 2 field names right after roadID β
immediately explaining why the two hypotheses tried in the original
session (nearby-road index; same-name count) both failed: neither field
was ever a pointer or a count.
Validated EXHAUSTIVELY, not sampled: minNumber <= maxNumber holds
on every single one of the 11,960,527 records in the file, zero
exceptions β about as strong a confirmation as a real min/max range
invariant can get. 3,171,255 records (26.5%, matching the original
session's own "f2==0 for 26.5% of records" finding exactly) have
minNumber==maxNumber==0 β no house-number data for that road (plausible
for piazzas, footpaths, and other non-addressed ways). Real, plausible
examples: "VIA LIDO AZZURRO" β 47-49 (a short street, small range);
"VIA DEPOSITI" β 1-95 (a longer street, wider range).
This also explains the original session's own "observed, not yet
explained" finding that both fields are identical across every one of
a road's own multiple .prd entries β a house-number range is a
property of the road segment itself, not of any one phonetic-name
variant.
A genuine cross-file curiosity, not a contradiction:
eeuz.rl independently declares its
own minNumber/maxNumber pair (packed, gated by a hasHouseNumbers
flag), but that copy is ALWAYS ZERO on this disc β while eeuz.prd's
own copy here IS populated with real data. Two different tables, sharing
the schema's naming convention, populated independently and
inconsistently at build time β not investigated further (would need a
different region/market disc to check whether eeuz.rl's own range is
ever populated there).
Where a road has multiple .prd entries, a common (not universal)
pattern is one bare-name entry plus one "<name>, <containing place>"
entry β the same <place>, <parent place> convention
eeu.cty uses. E.g. eeu.rd record 8
("CRISTOFORO COLOMBO") has entries for plain "VIA CRISTOFORO COLOMBO"
and for "VIA CRISTOFORO COLOMBO, LAMPEDUSA E LINOSA" β plausibly for
disambiguating a common street name by speaking the containing city too
(unconfirmed on hardware).
research/prd_reader.py β iter_prd_records() (streams records from an
already-decompressed buffer), rd_name_and_lonlat(). Full methodology
and every validation number are in its module docstring.