No cliente de email do iOS, quando um email contém uma data, hora ou local, o texto se torna um hiperlink e é possível criar um compromisso ou visualizar um mapa simplesmente tocando no link. Não funciona apenas para e-mails em inglês, mas também em outros idiomas. Eu amo esse recurso e gostaria de entender como eles fazem isso.
A maneira ingênua de fazer isso seria ter muitas expressões regulares e executá-las todas. No entanto, isso não vai escalar muito bem e funcionará apenas em um idioma ou formato de data específico etc. Acho que a Apple deve estar usando algum conceito de aprendizado de máquina para extrair entidades (20:00, 20:00, 20:00, 0800, 20:00, 20h, 20h00, 2000 etc.).
Alguma idéia de como a Apple é capaz de extrair entidades tão rapidamente em seu cliente de email? Qual algoritmo de aprendizado de máquina você aplicaria para realizar essa tarefa?
Respostas:
Eles provavelmente usam técnicas de extração de informações para isso.
Aqui está uma demonstração da ferramenta SUTime de Stanford:
http://nlp.stanford.edu:8080/sutime/process
Você extrairia atributos sobre n-gramas (palavras consecutivas) em um documento:
...
E, em seguida, use um algoritmo de classificação e alimente exemplos positivos e negativos:
Você pode se dar bem com 50 exemplos de cada um, mas quanto mais, melhor. Em seguida, o algoritmo aprende com base nesses exemplos e pode aplicar-se a exemplos futuros que não foram vistos antes.
Pode aprender regras como
Aqui está um vídeo decente de um engenheiro do Google sobre o assunto
fonte
Essa é uma tecnologia que a Apple realmente desenvolveu há muito tempo, chamada
Apple Data Detectors
. Você pode ler mais sobre isso aqui:http://www.miramontes.com/writing/add-cacm/
Essencialmente, ele analisa o texto e detecta padrões que representam partes específicas de dados e depois aplica ações contextuais do SO. Está arrumado.
fonte
Isso é chamado de expressão temporal identificação e análise de . Aqui estão algumas pesquisas no Google para você começar:
https://www.google.com/#hl=pt_BR&safe=off&sclient=psy-ab&q=timebank+timeml+timex
https://www.google.com/#hl=pt_BR&safe=off&sclient=psy-ab&q=temporal+expression+tagger
fonte
Uma parte do quebra-cabeça poderia ser a
NSDataDetector
classe. É usado para reconhecer alguns tipos padrão, como números de telefone.fonte
NSDataDetector
aula é o resultado do esforço que a Apple fez para implementar isso. A questão é como a classe trabalha internamente?Certa vez, escrevi um analisador para fazer isso, usando pyparsing. É realmente muito simples, você só precisa acertar todas as maneiras diferentes, mas não há muitas. Demorou apenas algumas horas e foi bem rápido.
fonte
A Apple possui uma patente sobre como eles fizeram isso Sistema e método para executar uma ação em uma estrutura em dados de computador , e aqui está uma história sobre esta patente maçãs-patente-sobre-nsdatadetector
fonte