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?
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:
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
Voici une vidéo décente par un ingénieur Google sur le sujet
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.
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
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.
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.
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 =