martin-ueding / geo-activity-playground

Data analysis and visualization based on GPS tracked outdoor activities.
https://martin-ueding.github.io/geo-activity-playground/
MIT License
35 stars 14 forks source link

Regex für die Standard-Benennung von OSMAnd-Tracks dokumentieren #165

Closed beautiful-orca closed 1 month ago

beautiful-orca commented 1 month ago

Hallo, ich brauche Hilfe bei der Formulierung des passenden Regex, das auf meine Tracknamen zutrifft.

Hier die Standard-Benennung von Tracks in OSMAnd in meiner Ordnerstruktur: /Ride/Trekkingrad Kalkhoff/2024-09-25_10-28_Wed.gpx

und so mit Beschreibung: /Ride/Trekkingrad/2024-09-25_10-28_Wed Zum Zahnarzt.gpx

Da das Datumsformat anders als im Beispiel der Dokumentation ist, ist mir nicht klar ob auch dieses andere Datumsformat problemlos eingelesen werden kann, also: 2024-03-03-17-42-10 vs 2024-09-25_10-28 oder 2024-09-25_10-28_Wed wobei der Wochentag im Dateinamen beim einlesen ignoriert werden kann.

martin-ueding commented 1 month ago

Man kann das so machen, dass alles vor dem ersten Leerzeichen ignoriert wird, dann ist auch der Wochentag weg. Allerdings hätte die Aktivität /Ride/Trekkingrad Kalkhoff/2024-09-25_10-28_Wed.gpx dann gar keinen Namen.

Was du nehmen könntest wäre dies:

(?P<kind>[^/]+)/(?P<equipment>[^/]+)/\S+ ?(?P<name>[^/\.]*)

Damit wäre alles vor dem ersten Leerzeichen ignoriert, der Name alles was dahinter kommt. Das klappt mit dem Beispiel:

❯ python
>>> import re
>>> re.search(r(?P<kind>[^/]+)/(?P<equipment>[^/]+)/\S+ ?(?P<name>[^/\.]*)', '/Ride/Trekkingrad/2024-09-25_10-28_Wed Zum Zahnarzt.gpx').groupdict()
{'kind': 'Ride', 'equipment': 'Trekkingrad', 'name': 'Zum Zahnarzt'}

Ist da aber kein Name, dann ist der Name der Aktivität leer:

>>> re.search(r'(?P<kind>[^/]+)/(?P<equipment>[^/]+)/\S+ ?(?P<name>[^/\.]*)', '/Ride/Trekkingrad/2024-09-25_10-28_Wed.gpx').groupdict()
{'kind': 'Ride', 'equipment': 'Trekkingrad', 'name': ''}

Ich weiß gerade nicht, ob das dann später ein Problem gibt.

Hilft dir das erstmal weiter?

beautiful-orca commented 1 month ago

Ah, danke. Ich habe nicht gecheckt, dass das Datum nicht relevant ist (da es der Track beinhaltet?). Also relevant ist nur der Name der eingelesen wird.

Dass bei (?P<kind>[^/]+)/(?P<equipment>[^/]+)/\S+ ?(?P<name>[^/\.]*) der Name leer bleiben könnte, finde ich doch nicht so gut, da würde ich lieber den Wochentag mit als name haben.

Habe Regex gebastelt, das das Datum (mit der konkreten Formatierung) matcht und danach den Part nach dem _ bis zum nächsten . als name einliest.

(?P<kind>[^/]+)/(?P<equipment>[^/]+)/\d{4}-\d{2}-\d{2}_\d{2}-\d{2}_(?P<name>[^/.]*)
{'kind': 'Ride', 'equipment': 'Trekkingrad', 'name': 'Wed Zum Zahnarzt'}

Das Regex aus der Dokumentation passt nicht, dafür funktioniert auch das, was im Webui geschrieben wird ( /settings/metadata-extraction ):

(?P<kind>[^/]+)/(?P<equipment>[^/]+)/[-\d_ .]+(?P<name>[^/\.]+)
{'kind': 'Ride', 'equipment': 'Trekkingrad', 'name': 'Wed Zum Zahnarzt'}
beautiful-orca commented 1 month ago

Soweit ich das sehen konnte ist die regex Einstellung über das webui persistent in /data/config.json, korrekt? Die Konfiguration könnt evtl. besser dokumentiert werden (auch für den Docker Container).

Auch interessant wäre wie man den Docker Container über docker compose inkl. build von Github startet. Dafür würde ich aber ein neues Issue öffnen, wie ich es gemacht habe.

martin-ueding commented 1 month ago

Die Tracks enthalten Zeitdaten, als Startzeitpunkt nehme ich den Zeitpunkt des ersten Punktes im Track. Damit funktioniert das auch mit Dateinamen, die kein Datum enthalten.

Alles, was man in der Oberfläche einstellen kann, landet in der config.json. Die Idee ist, dass man die nicht per Hand bearbeiten muss, aber könnte. Wenn man das upload_password setzt, muss man dieses Passwort eingeben um Änderungen vorzunehmen.

Reguläre Ausdrücke sind sehr komplex, das ist der Preis der Flexibilität. Was man machen könnte wäre einige Dinge als Standard anzubieten. Es gibt ja in einigen Projekten »Konvention über Konfiguration«. Das hatte ich am Anfang mit exakt dieser Ordnerstruktur. Das fanden einige Nutzer:innen doof, weil sie andere Systeme haben wollen. Also habe ich das ganz allgemein gemacht, was jetzt wieder andere Nutzer:innen vor Probleme stellt.

Bezüglich Dokumentation fehlt es mir schwer das zu machen, was dir für deinen Fall fehlt. Magst du vielleicht die Dokumentation schreiben? Kannst du auch gerne auf Deutsch machen und mit DeepL Translator übersetzen, falls das für dich einfacher ist.

beautiful-orca commented 1 month ago

Improvements are part of Version 0.29.2