124

Nel client di posta elettronica iOS, quando un messaggio di posta elettronica contiene una data, ora o posizione, il testo diventa un collegamento ipertestuale ed è possibile creare un appuntamento o visualizzare una mappa semplicemente toccando il collegamento. Non funziona solo per le email in inglese, ma anche in altre lingue. Amo questa funzione e vorrei capire come lo fanno.In che modo Apple trova date, orari e indirizzi nelle e-mail?

Il modo ingenuo per fare questo sarebbe avere molte espressioni regolari e gestirle tutte. Tuttavia, questo non si ridimensionerà molto bene e funzionerà solo per un linguaggio specifico o un formato data, ecc. Penso che Apple debba utilizzare un concetto di machine learning per estrarre le entità (8:00 PM, 8PM, 8:00, 0800, 20:00, 20h, 20h00, 2000 ecc.).

Qualche idea su come Apple sia in grado di estrarre le entità così rapidamente nel suo client di posta elettronica? Quale algoritmo di apprendimento automatico vorresti applicare per svolgere tale compito?

+5

Ho anche pensato a questo, in particolare il trucco regex. So che hanno un brevetto su di esso, quindi forse puoi provare a cercarlo. Tuttavia, sarei molto interessato anche a questo. +1 –

+15

In realtà il trucco regex probabilmente catturerà il 99% dei casi con un tasso di errore molto basso. Ed è super veloce, quando ottimizzi bene le espressioni regolari. Quindi non sarei sorpreso se fosse davvero solo un insieme di espressioni regolari. –

risposta

148

che probabilmente usano Information Extraction tecniche per questo.

Ecco una demo di strumento SUTime di Stanford:

http://nlp.stanford.edu:8080/sutime/process

Si potrebbe estrarre gli attributi di circa n-grammi (parole consecutive) in un documento:

  • numberOfLetters
  • numberOfSymbols
  • lunghezza
  • prev iousWord
  • NextWord
  • nextWordNumberOfSymbols
    ...

e quindi utilizzare un algoritmo di classificazione, e inserirlo esempi positivi e negativi:

Observation nLetters nSymbols length prevWord nextWord isPartOfDate 
"Feb."  3   1   4  "Wed"  "29th" TRUE 
"DEC"  3   0   3  "company" "went" FALSE 
... 

Si potrebbe cavarsela con 50 esempi di ciascuno, ma più siamo meglio è. Quindi, l'algoritmo impara sulla base di questi esempi e può applicare a esempi futuri che non ha mai visto prima.

Potrebbe imparare le regole, come

  • se la parola precedente è solo caratteri e forse periodi ...
  • e la corrente parola è nel "febbraio", "Marzo", "la" ..
  • e la parola successiva è in "dodicesimo", qualsiasi numero ...
  • poi è data

Ecco una decent video da un ingegnere di Google sul tema

+4

Interessante! Non ho mai pensato così. Grazie capo. – Martin

+2

el chief, secondo te, che tipo di modello sarebbe meglio per quello? Bayesiano? – Martin

+5

Sono abbastanza sicuro che un simile approccio non funzionerà meglio di, diciamo, f-measure di ca. 0.9. (Nota, questa è solo una sensazione, potrei sbagliarmi). D'altra parte, salvo l'approccio naiivo di codificare tutti i formati più comuni per ottenere prestazioni migliori (possibilmente 0,99 + dato che i formati più frequenti non saranno mai persi) e per essere più veloce da implementare + in fase di esecuzione. –

5

Una parte del puzzle potrebbe essere la classe NSDataDetector. È usato per riconoscere alcuni tipi standard come i numeri di telefono.

+2

Sembra che la classe 'NSDataDetector' sia il risultato dello sforzo che Apple ha messo in atto. La domanda è: come funziona la classe internamente? –

+3

è in NSRegularExpression.h, quindi sembra del tutto possibile che sia, come indicato, solo un insieme di espressioni regolari. – riffraff

109

Questa è una tecnologia sviluppata da Apple molto tempo fa, denominata Apple Data Detectors. Si può leggere di più su di esso qui:

http://www.miramontes.com/writing/add-cacm/

Essenzialmente si analizza il testo e rileva i modelli che rappresentano pezzi di dati specifici, quindi applica le azioni OS-contestuali ad esso. È pulito

+24

Questa è la risposta corretta. Altre risposte potrebbero dirti come potresti farlo, ma questo ti dice come Apple * lo fa. – LaC

+2

potremmo avere un po 'più di dettaglio nel write up tho? le voci a collegamento singolo non aggiungono tanto – shigeta

+14

Ah, quindi QUESTO è il punto da cui provengono tutti gli accessi sul mio sito Web :) FWIW, ero il lead del progetto su Apple Data Detectors ai tempi di ATG; quello che posso aggiungere qui è che questa era solo una tecnologia OS 8 e 9 - non ha mai fatto il salto su OS X. Ci sono ovviamente cose simili che accadono in OS X e IOS e, mentre non sono più in Apple e quindi non posso davvero dire, non sarei sorpreso se l'architettura fosse un po 'diversa. Tuttavia, mi aspetto che una sorta di sistema di grammatica/parser sia ancora al centro di tutto. I computer sono veloci in questi giorni e le grammatiche semplici sono piuttosto economiche. –

2

Una volta ho scritto un parser per farlo, usando il pyparsing. È davvero molto semplice, devi solo avere tutti i modi giusti, ma non ce ne sono molti. Ci sono volute solo poche ore ed è stato abbastanza veloce.

+0

Estratto da [Miramontes] (http://www.miramontes.com/writing/add-cacm/) "Non è difficile codificare un identificatore per una struttura atomica come un URL, ma è necessario un lavoro sostanziale per creare un architettura che apre il processo di creazione di strutture complesse ". – Remy

Problemi correlati