Як Apple знаходить дати, час та адреси в електронних листах?


128

У клієнті електронної пошти iOS, коли електронний лист містить дату, час або місцеположення, текст стає гіперпосиланням, і можна створити зустріч або переглянути карту, просто натиснувши посилання. Він працює не лише для електронної пошти англійською мовою, але й іншими мовами. Я люблю цю особливість і хотів би зрозуміти, як вони це роблять.

Наївним способом зробити це було б мати багато регулярних виразів і виконувати їх усі. Однак я не збираюся масштабувати це дуже добре, і він буде працювати лише для конкретного формату мови чи дати, і т.д. 0800, 20:00, 20h, 20h00, 2000 тощо).

Будь-яка ідея, як Apple здатна так швидко витягувати об'єкти у своєму електронному клієнті? Який алгоритм машинного навчання ви б застосували, щоб виконати таке завдання?


5
Я теж думав про це, особливо трюк з регексу. Я знаю, що на них є патент, тому, можливо, ви можете спробувати його пошукати. Однак я також був би дуже зацікавлений у цьому. +1
Томас Юнгблут

15
Насправді трюк з регулярним викидом, ймовірно, охопить 99% випадків з дуже низькою швидкістю помилок. І це дуже швидко, коли ви добре оптимізуєте регулярні вирази. Тож я не здивуюсь, якщо це справді просто набір регулярних виразів.
Мав QUIT - Anonymous-Mousse

Відповіді:


153

Вони, ймовірно, використовують для цього методи вилучення інформації .

Ось демонстрація інструменту SUTime Стенфорда:

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

Ви отримаєте атрибути приблизно n-грамів (послідовних слів) у документі:

  • numberOfLetters
  • числоOfSymbols
  • довжина
  • попередняСлова
  • nextWord
  • nextWordNumberOfSymbols
    ...

А потім використовуйте алгоритм класифікації та подайте позитивні та негативні приклади:

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

Ви можете піти з 50 прикладів кожного, але тим більше, ніж веселіше. Потім алгоритм вчиться на основі цих прикладів і може застосовуватися до майбутніх прикладів, яких він раніше не бачив.

Це може вивчити такі правила, як

  • якщо попереднє слово - це лише символи, а може бути періоди ...
  • і поточне слово в "лютого", "березня", "в" ...
  • а наступне слово - "дванадцяте", будь-яке число ...
  • то дата

Ось гідне відео інженера Google на цю тему


4
Цікаво! Я ніколи не хотів про це так. Дякую, ель шефе.
Мартін

2
Ель шефе, на вашу думку, яка модель була б найкраща для цього? Байєсівський?
Мартін

5
Я впевнений, що такий підхід не буде краще, ніж, скажімо, f-міра приблизно. 0,9. (Зауважте, це просто почуття, я можу помилятися). З іншого боку, я б окрім наївного підходу кодування всіх загальних форматів для кращого виконання (можливо, 0,99+ з огляду на те, що найчастіші формати ніколи не будуть пропущені) та швидше впроваджувати + під час виконання.
b.buchhold

@ b.buchhold, можливо, але тоді вам доведеться виконати однакову кількість роботи для наступної мови та наступної мови, тоді як моє рішення загальне.
Ніл Макгуйган

@Neil McGuigan, правда. Але вам доведеться надати безліч навчальних даних для всіх тих форматів / мов, що набагато більше роботи.
b.buchhold

110

Це технологія, яку Apple насправді розробила дуже давно Apple Data Detectors. Більше про це можна прочитати тут:

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

По суті, він аналізує текст і виявляє шаблони, які представляють конкретні фрагменти даних, а потім застосовує до нього контекстні дії ОС. Це акуратно.


24
Це правильна відповідь. Інші відповіді можуть розповісти, як ви могли це зробити, але ця розповідає, як це робить Apple .
ЛК

2
ми могли б трохи детальніше описати тхо? Записи на одне посилання не додають стільки
shigeta

14
Так, це ЦЕ звідки всі звернення на моєму веб-сайті :) FWIW, я був керівником проекту на детекторах даних Apple ще в часи ATG; Що я можу додати тут, це те, що це була лише технологія ОС 8 і 9 - вона ніколи не робила стрибок до OS X. Очевидно, що подібні речі відбуваються і в OS X і IOS, і, поки я вже не в Apple і тому насправді не можу сказати, я не здивуюсь, якщо архітектура трохи інша. Тим не менш, я очікую, що якась граматична система / синтаксичний аналіз все ще лежить в основі цього. У наші дні комп’ютери швидкі, а прості граматики досить дешеві.
Джим Міллер

18

Це називається тимчасовим виразом ідентифікацією та розбором . Ось кілька пошукових запитів Google для початку роботи:

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

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


+1 для того, щоб сказати, що назва "ідентифікуючі вирази, що відносяться до часу", є в деякій / значній частині літератури
arturomp

5

Однією частиною головоломки міг би бути NSDataDetectorклас. Його використовують для розпізнавання деяких стандартних типів, таких як номери телефонів.


2
Здається, NSDataDetectorклас є результатом зусиль, які Apple доклала до цього. Питання в тому, як працює клас внутрішньо?
Оле Бегеманн

3
це в NSRegularExpression.h, тому видається цілком можливим, що це, як зазначалося, лише набір регулярних виразів.
riffraff

2

Я колись написав аналізатор, щоб зробити це, використовуючи pyparsing. Це дійсно дуже просто, потрібно просто правильно підібрати всі різні способи, але їх не так багато. Це зайняло лише кілька годин і було досить швидким.


Витяг з Мірамонтеса "Не важко жорсткого кодування розпізнавача для атомної структури, такої як URL, але необхідна значна робота для створення архітектури, яка відкриває процес створення складних структур".
Ремі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.