Apple, e-postalarda tarihleri, saatleri ve adresleri nasıl bulur?


128

İOS e-posta istemcisinde, bir e-posta bir tarih, saat veya konum içerdiğinde, metin bir köprü haline gelir ve yalnızca bağlantıya dokunarak bir randevu oluşturmak veya bir haritaya bakmak mümkündür. Yalnızca İngilizce e-postalar için değil, diğer dillerde de çalışır. Bu özelliği seviyorum ve bunu nasıl yaptıklarını anlamak istiyorum.

Bunu yapmanın saf yolu, birçok düzenli ifadeye sahip olmak ve hepsini çalıştırmak olacaktır. Bununla birlikte, bu çok iyi ölçeklenmeyecek ve yalnızca belirli bir dil veya tarih formatı vb. İçin işe yarayacaktır. Apple'ın varlıkları çıkarmak için bazı makine öğrenimi konseptlerini kullanması gerektiğini düşünüyorum (20:00, 20:00, 20:00, 0800, 20:00, 20h, 20h00, 2000 vb.)

Apple'ın e-posta istemcisinde varlıkları nasıl bu kadar hızlı çıkarabildiği hakkında bir fikriniz var mı? Böyle bir görevi yerine getirmek için hangi makine öğrenimi algoritmasını uygularsınız?


5
Bunu, özellikle de normal ifade numarasını da düşündüm. Üzerinde bir patenti olduğunu biliyorum, bu yüzden belki araştırmayı deneyebilirsiniz. Ancak ben de çok ilgilenirim. +1
Thomas Jungblut

15
Aslında regexp hilesi muhtemelen çok düşük hata oranına sahip vakaların% 99'unu yakalayacaktır. Ve normal ifadeleri iyi optimize ettiğinizde süper hızlıdır. Bu yüzden gerçekten sadece bir dizi düzenli ifade olsa şaşırmam.
ÇIKTI - Anony-Mousse

Yanıtlar:


153

Bunun için muhtemelen Bilgi Çıkarma tekniklerini kullanıyorlar .

Stanford'un SUTime aracının bir demosu:

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

Bir belgedeki n-gram (ardışık kelimeler) ile ilgili öznitelikleri çıkarırsınız:

  • numberOfLetters
  • numberOfSymbols
  • uzunluk
  • previousWord
  • NextWord
  • nextWordNumberOfSymbols
    ...

Ve sonra bir sınıflandırma algoritması kullanın ve onu olumlu ve olumsuz örneklerle besleyin:

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

Her birinden 50 örnek ile kurtulabilirsiniz, ancak daha fazla mutluluk. Ardından, algoritma bu örneklere dayanarak öğrenir ve daha önce görmediği gelecekteki örneklere uygulayabilir.

Gibi kuralları öğrenebilir

  • önceki kelime sadece karakterler ve belki dönemler ise ...
  • ve şu anki kelime "şubat", "mar.", "the" ...
  • ve sonraki kelime "onikinci", herhangi_sayı ...
  • o zaman tarih

İşte bir Google mühendisinin konuyla ilgili iyi bir videosu


4
İlginç! Asla böyle düşünmemiştim. Teşekkürler şef.
Martin

2
el şef, sizce bunun için en iyi model nasıl olur? Bayes?
Martin

5
Böyle bir yaklaşımın, diyelim ki yaklaşık f ölçüsünden daha iyi sonuç vermeyeceğinden oldukça eminim. 0.9. (Not, bu sadece bir duygu, yanılıyor olabilirim). Öte yandan, tüm yaygın formatları çok daha iyi performans gösterecek şekilde kodlama (muhtemelen en sık kullanılan formatların asla gözden kaçırılmayacağı düşünülürse 0.99+) ve çalışma zamanında + uygulamasının daha hızlı olması için naiive yaklaşımı hariç.
b.buchhold

@ b.buchhold, belki, ama o zaman bir sonraki dil ve bir sonraki dil için aynı miktarda çalışmanız gerekir, halbuki benim çözümüm geneldir.
Neil McGuigan

@Neil McGuigan, doğru. Ancak tüm bu formatlar / diller için çok sayıda eğitim verisi sağlamanız gerekir ki bu çok daha fazla çalışma anlamına gelir.
b.buchhold

110

Bu, Apple'ın aslında çok uzun zaman önce geliştirdiği bir teknoloji Apple Data Detectors. Bununla ilgili daha fazla bilgiyi buradan okuyabilirsiniz:

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

Esasen metni ayrıştırır ve belirli veri parçalarını temsil eden kalıpları tespit eder, ardından buna işletim sistemi bağlamsal eylemleri uygular. Harika.


24
Bu doğru cevap. Diğer cevaplar size bunu nasıl yapabileceğinizi söyleyebilir, ancak bu size Apple'ın bunu nasıl yaptığını anlatıyor .
LaC

2
yazarken biraz daha detay alabilir miyiz? tek bağlantı girişleri çok fazla
eklenmiyor

14
Ah, yani BU, web sitemdeki tüm hitlerin geldiği yer :) FWIW, ATG'nin olduğu günlerde Apple Veri Dedektörlerinde proje lideriydim; Buraya ekleyebileceğim şey, bunun yalnızca bir OS 8 ve 9 teknolojisiydi - asla OS X'e geçiş yapmadı. Açıkçası OS X ve IOS'ta bazı benzer şeyler oluyor ve artık Apple'da değilken ve bu yüzden gerçekten söyleyemem, mimari biraz farklı olursa şaşırmam. Yine de, bir tür gramer / ayrıştırıcı sisteminin hala onun kalbinde yer almasını bekliyorum. Bilgisayarlar bu günlerde hızlı ve basit gramerler oldukça ucuz.
Jim Miller


5

Bulmacanın bir parçası NSDataDetectorsınıf olabilir . Telefon numaraları gibi bazı standart türleri tanımak için kullanılır.


2
Görünüşe göre NSDataDetectorsınıf, Apple'ın bunu uygulamak için harcadığı çabanın bir sonucudur. Soru, sınıfın dahili olarak nasıl çalıştığıdır?
Ole Begemann

3
NSRegularExpression.h içindedir, bu nedenle, belirtildiği gibi, sadece bir dizi normal ifade olması oldukça olası görünüyor.
riffraff

2

Bunu yapmak için bir keresinde pyparsing kullanarak bir ayrıştırıcı yazmıştım. Gerçekten çok basit, sadece tüm farklı yolları doğru yapmanız gerekiyor, ama o kadar çok yok. Sadece birkaç saat sürdü ve oldukça hızlıydı.


Özü Miramontes "Böyle bir URL gibi bir atom yapı için bir tanıyıcı kodlamalısınız zor değildir, ancak büyük çalışma karmaşık yapıları oluşturma işlemini açan bir mimari zanaat için gereklidir."
Remy

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.