Wie findet Apple Datum, Uhrzeit und Adresse in E-Mails?

128

Wenn eine E-Mail im iOS-E-Mail-Client ein Datum, eine Uhrzeit oder einen Ort enthält, wird der Text zu einem Hyperlink, und Sie können einen Termin erstellen oder eine Karte anzeigen, indem Sie einfach auf den Link tippen. Es funktioniert nicht nur für E-Mails in Englisch, sondern auch in anderen Sprachen. Ich liebe diese Funktion und würde gerne verstehen, wie sie es machen.

Der naive Weg, dies zu tun, wäre, viele reguläre Ausdrücke zu haben und sie alle auszuführen. Allerdings wird dies nicht sehr gut skaliert und funktioniert nur für eine bestimmte Sprache oder ein bestimmtes Datumsformat usw. Ich denke, dass Apple ein Konzept des maschinellen Lernens verwenden muss, um Entitäten zu extrahieren (20:00 Uhr, 20:00 Uhr, 20:00 Uhr, 0800, 20:00, 20h, 20h00, 2000 usw.).

Haben Sie eine Idee, wie Apple Entitäten in seinem E-Mail-Client so schnell extrahieren kann? Welchen Algorithmus für maschinelles Lernen würden Sie anwenden, um eine solche Aufgabe zu erfüllen?

Martin
quelle
5
Ich habe auch darüber nachgedacht, insbesondere über den Regex-Trick. Ich weiß, dass sie ein Patent darauf haben, also können Sie vielleicht versuchen, es zu durchsuchen. Es würde mich aber auch sehr interessieren. +1
Thomas Jungblut
15
Tatsächlich wird der Regexp-Trick wahrscheinlich 99% der Fälle mit einer sehr niedrigen Fehlerrate erfassen. Und ist super schnell, wenn Sie die regulären Ausdrücke gut optimieren. Es würde mich also nicht wundern, wenn es sich tatsächlich nur um eine Reihe regulärer Ausdrücke handelt.
Hat aufgehört - Anony-Mousse

Antworten:

153

Sie verwenden hierfür wahrscheinlich Informationsextraktionstechniken .

Hier ist eine Demo von Stanfords SUTime-Tool:

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

Sie würden Attribute über n-Gramm (aufeinanderfolgende Wörter) in einem Dokument extrahieren:

  • numberOfLetters
  • Anzahl der Symbole
  • Länge
  • vorherigesWort
  • nextWord
  • nextWordNumberOfSymbols
    ...

Verwenden Sie dann einen Klassifizierungsalgorithmus und geben Sie ihm positive und negative Beispiele:

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

Sie könnten mit jeweils 50 Beispielen davonkommen, aber je mehr desto besser. Dann lernt der Algorithmus anhand dieser Beispiele und kann auf zukünftige Beispiele angewendet werden, die er zuvor noch nicht gesehen hat.

Es könnte Regeln wie lernen

  • wenn das vorherige Wort nur aus Zeichen und möglicherweise Punkten besteht ...
  • und aktuelles Wort ist in "Februar", "März", "der" ...
  • und das nächste Wort ist in "zwölftes", any_number ...
  • dann ist Datum

Hier ist ein anständiges Video eines Google-Ingenieurs zu diesem Thema

Neil McGuigan
quelle
4
Interessant! Ich habe es noch nie so gesehen. Danke el Chef.
Martin
2
el Chief, was für ein Modell wäre Ihrer Meinung nach dafür am besten geeignet? Bayesian?
Martin
5
Ich bin mir ziemlich sicher, dass ein solcher Ansatz nicht besser abschneidet als beispielsweise ein f-Maß von ca. 0,9. (Beachten Sie, dies ist nur ein Gefühl, ich kann mich irren). Auf der anderen Seite würde ich den naiiven Ansatz außer Acht lassen, alle gängigen Formate zu codieren, um eine bessere Leistung zu erzielen (möglicherweise 0,99+, da die häufigsten Formate nie übersehen werden) und um + zur Laufzeit schneller zu implementieren.
b.buchhold
@ b.buchhold vielleicht, aber dann müsstest du die gleiche Menge Arbeit für die nächste Sprache und die nächste Sprache erledigen, während meine Lösung allgemein ist.
Neil McGuigan
@ Neil McGuigan, stimmt. Aber Sie müssten viele Trainingsdaten für all diese Formate / Sprachen bereitstellen, was viel mehr Arbeit bedeutet.
b.buchhold
110

Das ist eine Technologie, die Apple vor langer Zeit entwickelt hat Apple Data Detectors. Mehr dazu lesen Sie hier:

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

Im Wesentlichen analysiert es den Text und erkennt Muster, die bestimmte Daten darstellen, und wendet dann OS-kontextbezogene Aktionen darauf an. Es ist ordentlich.

Jeffehobbs
quelle
24
Dies ist die richtige Antwort. Andere Antworten können Ihnen sagen , wie Sie es tun könnten, aber diese sagen Ihnen , wie Apple tut es.
LaC
2
Könnten wir etwas mehr Details in dem Artikel haben? Single-Link-Einträge fügen nicht so viel hinzu
Shigeta
14
Ah, hierher kamen alle Hits auf meiner Website :) FWIW, ich war in den Tagen von ATG der Projektleiter für Apple Data Detectors. Was ich hier hinzufügen kann, ist, dass dies nur eine OS 8- und 9-Technologie war - es hat nie den Sprung zu OS X geschafft. Es gibt offensichtlich einige ähnliche Dinge in OS X und IOS, und während ich nicht mehr bei Apple bin und so kann ich nicht wirklich sagen, ich wäre nicht überrascht, wenn die Architektur ein bisschen anders wäre. Trotzdem erwarte ich, dass immer noch eine Art Grammatik- / Parser-System im Mittelpunkt steht. Computer sind heutzutage schnell und einfache Grammatiken sind ziemlich billig.
Jim Miller
5

Ein Teil des Puzzles könnte die NSDataDetectorKlasse sein. Es wird verwendet, um einige Standardtypen wie Telefonnummern zu erkennen.

hburde
quelle
2
Es scheint, dass die NSDataDetectorKlasse das Ergebnis der Bemühungen ist, die Apple unternommen hat, um dies umzusetzen. Die Frage ist, wie die Klasse intern arbeitet.
Ole Begemann
3
Es befindet sich in NSRegularExpression.h, daher scheint es durchaus möglich, dass es sich, wie bereits erwähnt, nur um eine Reihe regulärer Ausdrücke handelt.
Riffraff
2

Ich habe einmal einen Parser geschrieben, um dies mit Pyparsing zu tun. Es ist wirklich sehr einfach, man muss nur die verschiedenen Wege richtig machen, aber es gibt nicht so viele. Es dauerte nur ein paar Stunden und war ziemlich schnell.

Stavros Korokithakis
quelle
Auszug aus Miramontes "Es ist nicht schwierig, einen Erkenner für eine atomare Struktur wie eine URL fest zu codieren, aber es sind umfangreiche Arbeiten erforderlich, um eine Architektur zu erstellen, die den Prozess der Erstellung komplexer Strukturen eröffnet."
Remy