In che modo Apple trova le date, gli orari e gli indirizzi nelle e-mail?


128

Nel client di posta elettronica iOS, quando un'e-mail contiene una data, un'ora o una posizione, il testo diventa un collegamento ipertestuale ed è possibile creare un appuntamento o guardare una mappa semplicemente toccando il collegamento. Funziona non solo per le e-mail in inglese, ma anche in altre lingue. Adoro questa funzionalità e vorrei capire come lo fanno.

Il modo ingenuo per farlo sarebbe avere molte espressioni regolari ed eseguirle tutte. Tuttavia, questo non si ridimensionerà molto bene e funzionerà solo per una lingua o un formato data specifici, ecc. Penso che Apple debba utilizzare un concetto di apprendimento automatico per estrarre entità (20:00, 20:00, 20:00, 0800, 20:00, 20h, 20h00, 2000 ecc.).

Hai idea di come Apple sia in grado di estrarre entità così rapidamente nel suo client di posta elettronica? Quale algoritmo di apprendimento automatico dovresti applicare per realizzare questo compito?


5
Ci ho pensato anche, in particolare il trucco regex. So che hanno un brevetto, quindi forse puoi provare a cercarlo. Tuttavia, sarei molto interessato anche a questo. +1
Thomas Jungblut,

15
In realtà il trucco regexp 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.
Ha QUIT - Anony-Mousse il

Risposte:


153

Probabilmente usano tecniche di estrazione delle informazioni per questo.

Ecco una demo dello strumento SUTime di Stanford:

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

Estrarresti gli attributi su n-grammi (parole consecutive) in un documento:

  • numberOfLetters
  • numberOfSymbols
  • lunghezza
  • previousWord
  • NextWord
  • nextWordNumberOfSymbols
    ...

Quindi utilizza un algoritmo di classificazione e fornisci 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  
...

Potresti cavartela con 50 esempi di ciascuno, ma più è bello. Quindi, l'algoritmo apprende sulla base di quegli esempi e può applicarsi a esempi futuri che non ha mai visto prima.

Potrebbe imparare regole come

  • se la parola precedente è solo caratteri e forse punti ...
  • e la parola corrente è in "febbraio", "marzo", "il" ...
  • e la parola successiva è in "dodicesimo", any_number ...
  • allora è la data

Ecco un video decente di un ingegnere di Google sull'argomento


4
Interessante! Non ci ho mai pensato in quel modo. Grazie capo.
Martin,

2
el capo, secondo te, che tipo di modello sarebbe meglio per quello? Bayesiano?
Martin,

5
Sono abbastanza sicuro che un tale approccio non funzionerà meglio di, diciamo, misura f di ca. 0.9. (Nota, questa è solo una sensazione, potrei sbagliarmi). D'altro canto, escludo l'approccio naiive della codifica di tutti i formati comuni per ottenere prestazioni migliori (possibilmente 0,99+ dato che i formati più frequenti non mancheranno mai) e di essere più veloce da implementare + in fase di esecuzione.
b

@ b.buchhold, forse, ma allora dovresti fare la stessa quantità di lavoro per la lingua successiva e la lingua successiva, mentre la mia soluzione è generale.
Neil McGuigan,

@Neil McGuigan, vero. Ma dovresti fornire molti dati di formazione per tutti quei formati / lingue che richiedono molto più lavoro.
b

110

Questa è una tecnologia che Apple ha sviluppato molto tempo fa chiamato Apple Data Detectors. Puoi leggere di più qui:

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

Fondamentalmente analizza il testo e rileva modelli che rappresentano specifici pezzi di dati, quindi applica azioni contestuali del sistema operativo. È pulito.


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

2
potremmo avere un po 'più di dettaglio nella scrittura? le voci a collegamento singolo non aggiungono molto
shigeta,

14
Ah, quindi QUESTO è da dove provengono tutti i successi sul mio sito Web :) FWIW, ero il capo del progetto su Apple Data Detector 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. Ovviamente ci sono alcune cose simili in OS X e IOS e, mentre non sono più in Apple e quindi non posso davvero dire che non sarei sorpreso se l'architettura fosse un po 'diversa. Tuttavia, mi aspetto che una sorta di sistema grammaticale / parser sia ancora al centro di esso. I computer sono veloci in questi giorni e le grammatiche semplici sono piuttosto economiche.
Jim Miller,


5

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


2
Sembra che la NSDataDetectorclasse sia il risultato dello sforzo che Apple ha fatto per implementarlo. La domanda è: come funziona la classe internamente?
Ole Begemann,

3
è in NSRegularExpression.h, quindi sembra abbastanza possibile che sia, come sottolineato, solo un insieme di espressioni regolari.
riffraff,

2

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


Estratto da Miramontes "Non è difficile codificare un riconoscitore per una struttura atomica come un URL, ma è necessario un lavoro sostanziale per creare un'architettura che apra il processo di creazione di strutture complesse".
Remy,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.