web-dev-qa-db-fra.com

Comment Apple trouve-t-il les dates, heures et adresses dans les e-mails?

Dans le client de messagerie iOS, lorsqu'un e-mail contient une date, une heure ou un lieu, le texte devient un lien hypertexte et il est possible de créer un rendez-vous ou de consulter une carte en appuyant simplement sur le lien. Cela fonctionne non seulement pour les e-mails en anglais, mais dans d'autres langues également. J'adore cette fonctionnalité et j'aimerais comprendre comment ils le font.

La manière naïve de procéder serait d'avoir de nombreuses expressions régulières et de les exécuter toutes. Cependant, cela ne va pas très bien évoluer et ne fonctionnera que pour une langue ou un format de date spécifiques, etc. Je pense que Apple doit utiliser un concept d'apprentissage automatique pour extraire des entités (8 : 00PM, 8PM, 8:00, 0800, 20:00, 20h, 20h00, 2000 etc.).

Une idée comment Apple est capable d'extraire des entités si rapidement dans son client de messagerie? Quel algorithme d'apprentissage automatique appliqueriez-vous pour accomplir une telle tâche?

128
Martin

Ils utilisent probablement Extraction d'informations techniques pour cela.

Voici une démo de l'outil SUTime de Stanford:

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

Vous extrairez des attributs de n-grammes (mots consécutifs) dans un document:

  • numberOfLetters
  • numberOfSymbols
  • longueur
  • previousWord
  • nextWord
  • nextWordNumberOfSymbols
    ...

Et puis utilisez un algorithme de classification et alimentez-le en exemples positifs et négatifs:

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

Vous pourriez vous en tirer avec 50 exemples de chacun, mais plus vous serez joyeux. Ensuite, l'algorithme apprend sur la base de ces exemples et peut s'appliquer à de futurs exemples qu'il n'a jamais vus auparavant.

Il pourrait apprendre des règles telles que

  • si le mot précédent n'est que des caractères et peut-être des points ...
  • et le mot actuel est en "février", "mars", "le" ...
  • et le prochain mot est dans "douzième", any_number ...
  • alors c'est la date

Voici une vidéo décente par un ingénieur Google sur le sujet

152
Neil McGuigan

C'est une technologie Apple en fait développée il y a très longtemps appelée Apple Data Detectors. Vous pouvez en savoir plus à ce sujet ici:

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

Essentiellement, il analyse le texte et détecte les modèles qui représentent des éléments de données spécifiques, puis lui applique des actions contextuelles du système d'exploitation. C'est bien.

110
jeffehobbs

C'est ce qu'on appelle expression temporelle identification et analyse. Voici quelques recherches Google pour vous aider à démarrer:

https://www.google.com/#hl=en&safe=off&sclient=psy-ab&q=timebank+timeml+timex

https://www.google.com/#hl=en&safe=off&sclient=psy-ab&q=temporal+expression+tagger

18
Gregory Marton

Une partie du puzzle pourrait être la classe NSDataDetector. Son utilisé pour reconnaître certains types standard comme les numéros de téléphone.

5
hburde

J'ai écrit une fois un analyseur pour ce faire, en utilisant le pyparsing. C'est vraiment très simple, il vous suffit de bien comprendre toutes les façons, mais il n'y en a pas beaucoup. Cela n'a pris que quelques heures et a été assez rapide.

2
Stavros Korokithakis

Apple a un brevet sur la façon dont ils l'ont fait Système et méthode pour effectuer une action sur une structure dans les données informatiques , et voici une histoire sur ce brevet apples-patent-on-nsdatadetector =

1
Guibin