Jak Apple wyszukuje daty, godziny i adresy w wiadomościach e-mail?

W kliencie poczty e-mail iOS, gdy wiadomość e-mail zawiera datę, godzinę lub lokalizację, tekst staje się hiperłączem i można utworzyć spotkanie lub spojrzeć na mapę po prostu dotykając łącza. Działa nie tylko w przypadku wiadomości e-mail w języku Angielskim, ale także w innych językach. Uwielbiam tę funkcję i chciałbym zrozumieć, jak to robią.

Naiwnym sposobem na to jest posiadanie wielu wyrażeń regularnych i uruchamianie ich wszystkich. Jednak to nie będzie skalować bardzo dobrze i będzie działać dla tylko określony język lub format daty itp. Myślę, że Apple musi używać jakiejś koncepcji uczenia maszynowego do wyodrębniania Bytów (20:00, 20: 00), 8:00, 0800, 20:00, 20h, 20h00, 2000 itp.).

Jakiś pomysł, jak Apple jest w stanie tak szybko wyodrębnić podmioty w swoim kliencie poczty e-mail? Jaki algorytm uczenia maszynowego zastosowałbyś w realizacji takiego zadania?

Author: Martin, 2012-02-15

6 answers

Prawdopodobnie używają do tego Technik ekstrakcji informacji.

Oto demo narzędzia SUTime Stanforda:

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

Wyodrębniłbyś atrybuty O n-gramach (kolejnych wyrazach) w dokumencie:

  • numerofletters
  • numerofsymbols
  • długość
  • poprzedni
  • nextWord
  • nextWordNumberOfSymbols
    ...

A następnie użyj algorytm klasyfikacji, i podawaj mu pozytywne i negatywne przykłady:

Observation  nLetters  nSymbols  length  prevWord  nextWord isPartOfDate  
"Feb."       3         1         4       "Wed"     "29th"   TRUE  
"DEC"        3         0         3       "company" "went"   FALSE  
...
Możesz ujść na sucho z 50 przykładami, ale im więcej, tym weselej. Następnie algorytm uczy się na podstawie tych przykładów i może zastosować do przyszłych przykładów, których wcześniej nie widział.

Może nauczyć się takich zasad jak

  • jeśli poprzednie słowo to tylko znaki, a może kropki...
  • a obecne słowo to "Luty", " Marzec.", "the"...
  • a następne słowo jest w " dwunastym", any_number ...
  • wtedy jest data

Oto porządny film autorstwa inżyniera Google na ten temat

 152
Author: Neil McGuigan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-08 19:56:51

To technologia opracowana przez Apple bardzo dawno temu o nazwie Apple Data Detectors. Możesz przeczytać więcej na ten temat tutaj:

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

Zasadniczo analizuje tekst i wykrywa wzorce, które reprezentują określone fragmenty danych, a następnie stosuje do niego działania kontekstowe systemu operacyjnego. Jest schludny.

 110
Author: jeffehobbs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-02 12:51:10
 18
Author: Gregory Marton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-31 21:41:03

Jedną z części układanki może być klasa NSDataDetector. Służy do rozpoznawania niektórych standardowych typów, takich jak numery telefonów.

 5
Author: hburde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-02 12:50:38

Kiedyś napisałem do tego parser, używając pyparsingu. To naprawdę bardzo proste, po prostu trzeba uzyskać wszystkie różne sposoby prawo, ale nie jest tak wiele. Zajęło to tylko kilka godzin i było dość szybkie.

 2
Author: Stavros Korokithakis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-25 10:42:21
 1
Author: Guibin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-31 02:42:57