Indovina se un orario è AM o PM

7

Attualmente sto scrivendo un parser per data umana. Per data umana, intendo che dovrebbe essere in grado di interpretare le stringhe come "domani a 2" e restituire una data valida in base all'ora corrente.

Il problema che sto affrontando è il rilevamento automatico del token AM / PM mancante. Ad esempio, se ricevo un'email che dice "Diamo appuntamento domani alle 2", so che probabilmente è il 2, infatti, alle 14:00. D'altra parte, se l'e-mail dicesse "Ci incontriamo domani alle 11", 11 è più probabile che siano le 11:00.

Credo che la maggior parte delle volte, un semplice confronto dovrebbe fare il trucco. Se il numero è maggiore di un certo limite n , possiamo supporre che l'ora sia AM. Se il numero è più piccolo, probabilmente è PM. Nell'esempio sopra, 2 era più probabile che fosse PM, e 11 era AM.

So che una giornata di lavoro comune è di circa 9 AM-6PM, quindi i numeri inferiori a 6 o superiori o superiori a 9 vanno bene. Possiamo facilmente indovinare per quelli. Ma cosa faccio con 7 e 8?

Quindi la domanda esatta che ho è, dove metto questo limite esatto? Quando i numeri si avvicinano a 7 ~ 8, il limite diventa più ambiguo. Ho provato a cercare la documentazione precedente su questo problema ma non sono riuscito a trovarne. C'è qualche tipo di convenzione su questo? Inoltre, a mio parere, le impostazioni internazionali e / o il fuso orario potrebbero influenzare questo limite.

A proposito, non sono interessato a risposte non definitive come "Secondo me, 7 is afternoon" o "For me, 8 is morning". Sono davvero interessato alla documentazione che potrebbe aiutarmi a tracciare una linea definitiva.

Spero che la descrizione del problema sia abbastanza comprensibile.

    
posta Vivien Barousse 13.09.2011 - 20:10
fonte

2 risposte

4

Molto complicato. Non riuscirai a impostare un limite rigido. Alcuni pensieri:

  1. Prendi in considerazione il tempo sveglio . La maggior parte è sveglia ovunque dalle 6 alle 12 del mattino. I tempi al di fuori di questo sono improbabili.

  2. Dovrai usare il contesto. Se l'evento è una riunione a 6, 6p è più probabile di 6a a meno che il contesto sia "colazione", "sveglia", ecc.

  3. Dovresti idealmente costruire il sistema per imparare cosa è più probabile, consentendo agli utenti di correggere i tempi, se sbagliati, e fare analizzare al sistema le condizioni e il contesto in cui sono state eseguite le correzioni.

Come ho detto, è molto complicato. I calendari di Google fanno un po 'di questo. Esaminare questa soluzione per gli esempi.

MODIFICA con pensieri aggiuntivi:

Raccogliere un gruppo di parole chiave, associarle a AM / PM, cercare nella frase di contesto e utilizzarle per determinare l'ora esatta del giorno:

PM: pomeriggio, "dopo lavoro / scuola", "da lavoro / scuola", cena, cena, sera, stanotte, notte, fine, mezzogiorno, "prime time", ecc.

AM: mattina, "prima del lavoro / scuola", "al lavoro / scuola", colazione, inizio, veglia, mezzanotte, ecc.

Per qualcosa come "pranzo", devi avere una regola come, se il tempo è 12 o meno di 6 è pm, altrimenti è.

    
risposta data 13.09.2011 - 20:18
fonte
0

Oltre alla risposta di Jonathan (fondamentalmente un'estensione di 2) potresti creare un senso di contesto. Prova a cercare frasi "prima di pranzo", "dopo pranzo" e restringi i tempi probabili. Potresti modificare qui l'euristica per renderla più precisa. Penso che la soluzione migliore sia renderla sensibile al contesto.

Come è stato affermato, l'analisi del linguaggio naturale è un problema difficile da decifrare.

    
risposta data 13.09.2011 - 20:29
fonte

Leggi altre domande sui tag