Vai al contenuto

Come le app todo capiscono 'domani alle 9'

Un breve tour del riconoscimento delle date in linguaggio naturale, i trucchi regex dietro di esso, e perché l'AI on-device sta cambiando ciò che è possibile.

8 min di lettura

Digita “Scrivi a Marco domani alle 9” in una buona app todo e una di due cose dovrebbe succedere. O ottieni indietro l’attività come un oggetto pulito con il titolo “Scrivi a Marco” e una data di scadenza impostata alle 9:00 del giorno successivo, oppure l’app non fa nulla e devi compilare un selettore di date. La differenza tra questi due risultati è ciò che determina se usi davvero l’app.

Il riconoscimento delle date in linguaggio naturale esiste da decenni. Ha alimentato Quicksilver. Ha alimentato Fantastical. Oggi alimenta praticamente ogni app di produttività che vale la pena rilasciare. Ma il modo in cui funziona sotto il cofano è cambiato in modi interessanti negli ultimi due o tre anni, e il risultato è che il 2026 è il primo anno in cui questa tecnologia è genuinamente risolta per l’inglese nella maggior parte delle app e sta iniziando a funzionare bene in altre lingue.

Questo post è un tour di come funziona.

La forma di base del problema

Un utente digita una frase. L’app deve:

  1. Decidere se la frase contenga anche una data.
  2. In caso affermativo, trovare quale parte del testo si riferisce alla data.
  3. Risolvere quella parte in una data e ora assolute.
  4. Rimuovere la parte della data dalla frase così che il testo rimanente sia solo il titolo dell’attività.

Ognuno di questi passaggi ha le proprie modalità di fallimento. La maggior parte delle prime implementazioni erano fragili al passaggio uno, generando falsi positivi. “Prendi i 15 rapporti” non dovrebbe ricevere una data di scadenza del 15 del mese. “Compra 3 mele” non dovrebbe essere interpretato come qualcosa relativo al tre. “Scrivi a Marco all’IBM” probabilmente non sta fissando il tempo su “all’IBM.”

La strategia classica sono le espressioni regolari. Sono sorprendentemente buone in questo. Una manciata di pattern scritti con cura può riconoscere oltre il 90% delle frasi con date che le persone digitano davvero nelle app todo:

  • \bin\s+(a|an|\d+|some|several)\s+(min|minute|minutes|hour|hours|hr|hrs|day|days|week|weeks|month|months)\b
  • \b\d{1,2}(:\d{2})?\s*(am|pm)\b
  • \b(tomorrow|today|tonight|noon|midnight)\b
  • \b(monday|tuesday|wednesday|thursday|friday|saturday|sunday)\b

Combina quindici o venti di questi pattern e copri la coda lunga. Poi unisci le corrispondenze: una parola per il giorno più una parola per il tempo diventa un istante specifico. Un nome di giorno della settimana senza qualificatore significa “la prossima occorrenza di quel giorno della settimana”. Una parola dell’ora da sola senza giorno significa oggi.

Dove regex fallisce

Regex sbatte contro un muro a tre tipi di input:

  1. Frasi vaghe. “A un certo punto la prossima settimana” è una data ma non una specifica.
  2. Ambiguità. “Venerdì pomeriggio” potrebbe essere le 14 o le 16 a seconda della convenzione.
  3. Errori di ortografia e slang. “dmn alle 9m” è analizzabile da un essere umano ma non da una regex rigorosa senza molte varianti.

Per molto tempo, le app todo alzavano semplicemente le spalle di fronte a questi. Se digitavi “dmn alle 9m” non ottenevi nulla. Se digitavi “prima cosa domani” non ottenevi nulla. L’utente imparava a digitare la versione formale.

Lo sviluppo interessante dell’ultimo anno è che i modelli linguistici on-device possono ora gestire questi casi senza inviare nulla sulla rete. Il framework Foundation Models di Apple, disponibile da macOS 26, include un modello che gira localmente ed è abbastanza veloce da usare come fallback quando regex manca. Google ha un’offerta simile su Android. Il pattern risultante è così:

Two-stage parsing pipeline Diagram showing a sentence flowing through a fast regex stage. If regex matches, the result emits immediately. If not, the sentence is forwarded to an on-device language model fallback that emits a structured result. User input "in 30 minutes" Regex stage ~17 patterns, <1ms match Structured result due: 2:30 PM no match On-device model Foundation Models, ~50ms
Il pipeline a due stadi usato da TodoBar e app simili. Il percorso veloce gestisce il caso comune in meno di un millisecondo. Il modello gestisce la coda lunga.

Il percorso veloce copre il 90% dei casi. Il modello gestisce il resto. Nessuno dei due stadi invia il testo dell’utente sulla rete. Privacy e velocità sono entrambe preservate.

Perché “tra 2 ore” è più difficile di quanto sembra

La frase “tra 2 ore” sembra facile. Non lo è.

L’utente potrebbe intendere uno qualsiasi dei seguenti:

  • 2 ore da adesso, al minuto.
  • 2 ore da adesso, arrotondato ai 15 minuti più vicini per pulizia.
  • 2 ore da adesso, ma se cade durante le ore di sonno segnate dall’utente, la mattina successiva.
  • 2 ore dall’inizio dell’ora successiva (“tra 2 ore” detto alle 13:55 potrebbe significare le 16:00, non le 15:55).

La maggior parte delle app fa una scelta e la mantiene. La più comune è “2 ore da adesso, al minuto”, che scambia eleganza per prevedibilità. Un utente che ha digitato “tra 2 ore” alle 13:23 riceve una notifica alle 15:23. Impara a digitare numeri interi quando vuole orari puliti.

Perché “domani” predefinisce le 9:00

Quando digiti “domani” senza un orario, un’app deve scegliere un orario. La convenzione si è consolidata sulle 9:00 in quasi ogni app sul mercato. Perché?

Perché il costo di indovinare sbagliato è asimmetrico. Se l’app sceglie le 9 e volevi le 11, puoi aggiustarti velocemente quando te ne accorgi. Se l’app sceglie mezzanotte o qualche altra ora a caso, ricevi una notifica mentre stai dormendo o la perdi del tutto. Le 9 sono il predefinito sicuro per quasi ogni tipo di compito lavorativo.

Alcune app predefiniscono le 8. Alcune usano l’ora del giorno in cui hai digitato l’attività (“l’hai detto alle 14, quindi probabilmente intendi le 14 di domani”). Quest’ultimo è intelligente ma inaffidabile, perché la maggior parte delle persone che digita un’attività alle 14 lo fa durante la giornata lavorativa per compiti che vuole fare durante una futura giornata lavorativa, non esattamente alle 14 del giorno successivo.

Come appare dentro TodoBar

TodoBar usa il pattern a due stadi descritto sopra. Digita qualsiasi attività con una frase temporale e il livello regex si attiva per primo, in meno di un millisecondo. Se trova una data, l’attività appare nella tua lista con il giusto orario di scadenza allegato. Se il livello regex non riesce a risolvere la frase, il classificatore Foundation Models on-device ci prova, con una latenza tipica di circa 50 millisecondi. In ogni caso, nessun testo lascia il tuo Mac.

I pattern che il livello regex riconosce sono documentati nella pagina di supporto. Come riferimento rapido, tutti questi funzionano:

  • “in 30 minutes”
  • “in 2 hours”
  • “in a couple hours”
  • “tomorrow”
  • “tomorrow at 9am”
  • “tonight”
  • “tonight at 8”
  • “next Friday”
  • “Friday at 5pm”
  • “May 12”
  • “May 12 at 2pm”
  • “the 15th”
  • “in 3 days”
  • “1 week from now”
  • “first thing tomorrow”

Se digiti qualcosa che il parser non riesce a gestire, l’attività viene comunque aggiunta senza data di scadenza, e puoi allegarne una manualmente dal pulsante campanella della riga. La modalità di fallimento del parser è “nessuna data allegata”, non “attività persa”.

Dove va tutto questo

La prossima frontiera interessante è il riconoscimento multilingue. Le frasi in spagnolo come “mañana a las 9” dovrebbero funzionare bene quanto l’equivalente inglese, e sempre più lo fanno nelle app che prendono sul serio la localizzazione. Il modello on-device di Apple gestisce bene lo spagnolo nei nostri test interni. Lo stesso approccio funzionerà per il francese, il tedesco, il giapponese e probabilmente la maggior parte delle lingue principali entro il prossimo anno.

I pezzi sono tutti qui. Quello che una volta era un costoso round-trip nel cloud è ora una chiamata di funzione locale che richiede 50 millisecondi. Il fatto che un’app todo indie possa rilasciarla, gratuitamente, senza conto di inferenza per utente, è la vera storia.

TodoBar è una simpatica lista di cose da fare nella barra dei menu di macOS. Scadenze in italiano naturale, tasto rapido globale, sincronizzazione iCloud. Paghi una volta, è tuo per sempre.

Ottieni TodoBar sull'App Store