...
Normalisierung basiert auf ISO 8601.
Ein Tagesdatum wird als Entität vom Typ
rico:SingleDate
modelliert.Alles andere wird mit einer Entität vom Typ
rico:DateRange
modelliert.Normalisierte Datumsangaben sind in
rico:normalizedDateValue
zu finden.Qualifizierender Text kann aus dem Datum entfernt und in einem von zwei zusätzlichen Feldern gespeichert werden:
rico:dateQualifier
: Text welcher auf eine Schätzung des Datums hindeutet (z.B.ca.
,um
,wohl um
,vermutlich
,nach
,frühestens
, etc.)rico:certainty
: Text welcher zusätzliche Informationen zum Datum enthält (z.B.Datiert nach Inschrift
,genaues Datum nicht eruierbar
,Estimée
, etc.)
Wenn die Normalisierung scheitert dann wird der Wert in
rico:expressedDate
gespeichert und als Entitätrico:DateRange
.
Prozess
Alle Entitäten mit dem Typ
rico:DateSet
werden ausgewählt.Überprüfe ob das Attribut
rico:expressedDate
definiert ist.Entität ohne werden ignoriert und ein Report generiert.
Entferne alle Leerzeichen am Anfang und am Ende des Wertes.
Versuche jeden SingleDate Matcher in Reihenfolge mit einem vollen Abgleich.
Abbruch bei Erfolg
Suche Text mit dem Qualifier Filter.
Gefundene Übereinstimmungen werden vom Wert entfernt und im Feld
rico:dateQualifier
angelegt.
Suche Text mit dem Certainty Filter.
Gefundene Übereinstimmungen werden vom Wert entfernt und im Feld
rico:certainty
angelegt.
Entferne alle Leerzeichen im Wert.
Versuche jeden DateRange Matcher in Reihenfolge mit einem vollen Abgleich.
Abbruch bei Erfolg
Konfiguration
Besteht aus vier Teilen. Jeder wird in einem separaten Schritt angewendet. Beim Erstellen muss unbedingt die Reihenfolge bedacht werden.
Auf stage im Bestand mav-101 liegt eine Excel-Datei datumswerte.xlsx
mit Beispielen, die bei Anpassungen an der Konfiguration zum Testen verwendet werden können.
SingleDate Matcher
File: single-date-matchers.txt
Beispiel: (?<year>\d{4})-(?<month>[0-2][0-9])-(?<day>[0-3][0-9])
Muss die Gruppen year
, month
und day
enthalten.
Erkannt werden Tagesdaten mit Trennzeichen .-
, mit ausgeschriebenen Monatsnamen. Daten können in eckigen Klammern stehen.
DateRange Matcher
File: date-range-matchers.txt
Beispiel: (?<singleYear>[0-2][0-9]{3})
Muss die Gruppe
singleYear
,fromYear
, oderuntilYear
enthalten.singleYear
kann optional mitsingleMonth
oderfromMonth
unduntilMonth
und optionalfromDay
unduntilDay
kombiniert werden.fromYear
unduntilYear
kann mitfromMonth
,fromDay
,untilMonth
unduntilDay
kombiniert werden.
Erkannt werden verschiedene Kombinationen von Zeiträumen, vgl. Beispiele. Daten können Monatsnamen enthalten und in eckigen Klammern stehen.
Certainty Filter
File: certainty.txt:
Beispiel: \(?(?<certainty>Datiert nach Inschrift)\)?
Jede Regex muss die Gruppe certainty
enthalten.
Die Texte können in eckigen oder runden Klammern und i.d.R. vor oder nach dem Datum stehen. Erkannt werden die folgenden Texte: Datiert *
, Datiert nach Inschrift
, Datiert nach Quelle
, genaues Datum nicht eurierbar
, unsichere Datierung
, Estimation de *
, Estimée *
Qualifier Filter
File: qualifier.txt
Beispiel: [\s+]\(?(?<qualifier>um)\)?[^a-zA-Z]
Jede Regex muss die Gruppe qualifier
enthalten.
Die Texte können in eckigen oder runden Klammern und i.d.R. vor oder nach dem Datum stehen. Erkannt werden die folgenden Texte: um
, wohl *
, zwischen
, wahrscheinlich
, ca
, ca.
, circa
, ou avant
, avant
, vor
, nach
, before
, after
, vermutlich
, vers
, env.
Namen von Monaten
Für die Normalisierung von Daten in Textform zu ISO 8601 werden aktuell die folgenden Namen verstanden und verarbeitet. Der Code kann mit zusätzlichen Varianten ergänzt werden. Diese werden angewendet wenn die Werte in den Gruppen month, fromMonth & untilMonth
nicht numerisch sind.
Dieser Vergleich macht aus allen Buchstaben auf beiden Seiten Kleinbuchstaben. Es werden also jeweils beide Varianten gefunden.
Januarjanuar, Janjan, janvier, janv., gennaio, gen
Februarfebruar, Febfeb, février, févr., febbraio, feb
Märzmärz, Märmär, mars, mars, marzo, mar
Aprilapril, Aprapr, avril, avr., aprile, apr
Maimai, Maimai, mai, mai, maggio, mag
Junijuni, Junjun, juin, juin, giugno, giu
Julijuli, Juljul, juillet, juil., luglio, lug
Augustaugust, Augaug, août, août, agosto, ago
Septemberseptember, sep, Sepsept, septembre, sept., settembre, set
Oktoberoktober, Oktokt, octobre, oct., ottobre, ott
Novembernovember, Novnov, novembre, nov., novembre, nov
Dezemberdezember, Dezdez, décembre, déc., dicembre, dic
Beispiele Single Dates
Input | Regex Group Names | Class | Normalized Value |
---|---|---|---|
02.10.1999 |
|
|
|
4 avril 1954 |
|
|
|
[28.5.1928] |
|
|
|
Beispiele Date Ranges
Input | Regex Group Names | Class | Normalized Value |
---|---|---|---|
1939 |
|
|
|
April 1939 |
|
|
|
April - |
September 1939 |
|
|
|
1.-8.10.1939 |
|
|
|
01.02.-08.10.1939 |
|
|
|
1987-1994 |
|
|
|
1917 bis 1924 |
|
|
|
April 1987 - Oktober 2001 |
|
|
|
01. April 1987 - 05. Oktober 2001 |
|
|
|
[Entre 1948 et 1949] |
|
|
|
Beispiele mit Qualifiers & Certainties
Input | Regex Group Names | Class | Normalized Value |
---|---|---|---|
ca. 1970 er - 1980 er |
|
| |
1961 ou avant |
|
| |
1941 (Um) |
|
| |
Estimation de l'âge 1943 |
|
| |
1930-1939, genaues Datum nicht eruierbar |
|
| |
1913 - 1919 (Datiert nach Inschrift) |
|
|
1941 (Um)
rico:DateRange
rico:normalizedDateValue
1941
rico:qualifier
Um
Estimation de l'âge 1943
rico:DateRange
rico:normalizedDateValue
1943
rico:certainty
Um