Seite 1 von 1

Immer noch: datum parsen problematisch/schlägt fehl

Verfasst: Dienstag 14. Mai 2024, 11:32
von drnicolas
Ich muss aus einem text Datumsnagaben extrahieren.
Das ist mit allen probierten Methoden immer irgendwie problematisch

Ich wähnte mich am ziel als ich einen vermeinlich universellen regex-Ausdruck fand, der mir hilft alle möglichen Datumsformate zu entschlüsseln

mit diesem Codefragment wnalde ich alle gefundenen Daten in datetime um:

Code: Alles auswählen

re.MULTILINE
    for r in DATE_REGEX:
        for m in re.finditer(r, text):
            try:
                xx=parser.parse(m.group(0))
                if xx.year>2026:
                    xx=xx-relativedelta(years=100)
Jetzt schlägt das imperium anscheinend zurück:
Die Datumsangabe "10.3.88" (März) wird zu "3.10.1988" im datetime-Objekt geparst - der rest schlögt dann natürlich fehl

Ich kriege in den zu durchsuchenden texten leider alle möglichen Angaben. Da es deutsche texte sind, überiwegen zumindest die deutschen varianten - so auch hier.
Ausnahme ist eine neue Arthroskopie-Einheit die das Datum jeweils im ISO-Format angibt YYYY-MM-DD, aber auch YYYY/MM/DD

Gibt es da eine bessere Variante?

Re: Immer noch: datum parsen problematisch/schlägt fehl

Verfasst: Dienstag 14. Mai 2024, 11:38
von sparrow
Bevor ich so etwas selber bauen würde, würde ich immer zuerst einen Blick auf dateparser werfen.
Das ist dir ja auch in einem anderen Thread schon einmal empfohlen worden.

Und nein, es gibt keine einfache Möglichkeit.
Auch das wurde in einem anderen Thread bereits gesagt.

Re: Immer noch: datum parsen problematisch/schlägt fehl

Verfasst: Mittwoch 15. Mai 2024, 08:23
von DeaD_EyE
Einen Studenten für 400€ beschäftigen, der die Daten manuell überprüft.

Das ist keine dankbare Aufgabe und wenn man meint, man hätte alle Eventualitäten abgedeckt, stößt man auf das nächste Problem, verursacht durch einen falschen Treffer.

Re: Immer noch: datum parsen problematisch/schlägt fehl

Verfasst: Mittwoch 15. Mai 2024, 15:46
von Kebap
Warum muss man dafür studieren?

Das ISO-Format ist zumindest eindeutig, ganz im Gegensatz zu "10/03/17", usw. dass alles mögliche bedeuten kann.

Re: Immer noch: datum parsen problematisch/schlägt fehl

Verfasst: Mittwoch 15. Mai 2024, 18:33
von __blackjack__
@Kebap: Da weiss man wenigstens das derjenige formal zu einem Hochschulstudium befähigt ist, aber trotzdem 400€-Jobs annimmt. Kannst natürlich für 400€ auch irgendwen anstellen. 🙂

Re: Immer noch: datum parsen problematisch/schlägt fehl

Verfasst: Mittwoch 15. Mai 2024, 18:54
von DeaD_EyE
Kebap hat geschrieben: Mittwoch 15. Mai 2024, 15:46 Warum muss man dafür studieren?
Meine Güte, seid ihr weltfremd. Wir haben ständig Studenten bei uns in der Firma. Manche waren als Hilfskraft angestellt (400€), andere haben ihren Bachelor oder Master bei uns gemacht.

Studenten sind billige Arbeitskräfte. Darum ging es. Der Computer kann nicht den Kontext der Daten interpretieren, der Student aber vielleicht schon. Es ist ein Unterschied, ob man sich nur ein Datum ansieht oder neben dem Datum noch andere verwertbare Daten zur Verfügung hat.

Ich würde ich zuerst alle Daten auslesen, die einen ISO8601 Zeitstempel haben.
Dann die restlichen Daten kategorisieren z.B. in Datum mit "/" als Trenner oder mit "." als Trenner.

Re: Immer noch: datum parsen problematisch/schlägt fehl

Verfasst: Freitag 17. Mai 2024, 20:56
von oldboyJR
Könnte es simpel ein Sprachenparser sein der das Datum in das Gewünschte übersetzt? Beispiel Russisch zu Deutsch ? Herkunftsabhängiges Datumsformat? Mal so in die Diskussion geworfen :oops: :oops:

Re: Immer noch: datum parsen problematisch/schlägt fehl

Verfasst: Sonntag 19. Mai 2024, 10:13
von oldboyJR
Bin gerade mit dem Thema: Formatierung von Strings und Platzhalter Listen beschäftigt und frage mich wie würde das aussehen wenn man alle Datumsangaben YYYY MM DD mit den verschiedenen Trennern verschiedenen erst in eine absolute Zahl umwandelt und dann mit hilfe von Liste und Platzhalter in das gewünschte Format überträgt.

Code: Alles auswählen

Datum_neu = "{dd}Tag, {mm}Monat, {yyyy}Jahr, .format(?, ?, ?, ?)

Re: Immer noch: datum parsen problematisch/schlägt fehl

Verfasst: Sonntag 19. Mai 2024, 10:47
von Sirius3
@oldboyJR: lies Dir am Besten die Dokumentation zum datetime-Modul durch. Dort wird erklärt, wie man Datumsangaben parst und auch wieder in Strings umwandelt.

Re: Immer noch: datum parsen problematisch/schlägt fehl

Verfasst: Mittwoch 22. Mai 2024, 10:55
von oldboyJR
Tja KI ist doch schlauer. Die Antwort hat mich schon erstaunt: Die Lösung: Im json modul gibt es ein modul datefinder der Datumsangaben aus Texten extrahiert. ( conda install -c conda-forge datefinder) und alle in datetime überführt. Verschiedene trenner werden umgewandelt.

Code: Alles auswählen

import datefinder

string_with_dates = """
Heute ist der 21. Mai 2024 und morgen ist der 22. Mai.
Nächstes Jahr am 2024-05-21 werden wir wieder feiern.
dieses ist mein zweiter Geburtstag 1956/03/10.
"""

matches = datefinder.find_dates(string_with_dates)
for match in matches:
    print(match)

Re: Immer noch: datum parsen problematisch/schlägt fehl

Verfasst: Mittwoch 22. Mai 2024, 11:49
von __blackjack__
@oldboyJR: Also wenn die KI gesagt hat „Im json modul gibt es ein modul datefinder […]“ dann ist das nicht besonders schlau, weil offensichtlich falsch.

Und das Modul ist schlechter als das bereits vorgeschlagene `dateparser`. Es kann beispielsweise keine deutschsprachigen Monatsnamen.