Как Apple находит даты, время и адреса в электронных письмах?


в почтовом клиенте iOS, когда электронное письмо содержит дату, время или местоположение, текст становится гиперссылкой, и можно создать встречу или посмотреть на карту, просто нажав на ссылку. Он работает не только для электронной почты на английском языке, но и на других языках. Я люблю эту функцию и хотел бы понять, как они это делают.

наивный способ сделать это-иметь много регулярных выражений и запускать их все. Однако я это не очень хорошо масштабирую и буду работать только для конкретного языка или формата даты и т. д. Я думаю, что Apple должна использовать некоторую концепцию машинного обучения для извлечения сущностей (8: 00PM, 8PM, 8:00, 0800, 20:00, 20h, 20h00, 2000 etc.).

есть идеи, как Apple может так быстро извлекать объекты в своем почтовом клиенте? Какой алгоритм машинного обучения вы бы применили для выполнения такой задачи?

6 126

6 ответов:

они скорее всего используют Извлечение Информации методы для этого.

вот демонстрация Стэнфордского инструмента SUTime:

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

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

  • numberOfLetters
  • numberOfSymbols
  • длина
  • предыдущее слово
  • nextWord
  • nextWordNumberOfSymbols
    ...

а затем использовать алгоритм классификации, и кормить его положительные и отрицательные примеры:

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

вы можете уйти с 50 примерами каждого, но чем больше, тем веселее. Затем алгоритм учится на основе этих примеров и может применитесь к будущим примерам, которые он не видел раньше.

Он может узнать правила, такие как

  • если предыдущее слово - это только символы и, возможно, точки...
  • и текущее слово находится в" февраль", " Мар.", "этот. "..
  • и следующее слово находится в" двенадцатом", any_number ...
  • дата

здесь приличное видео инженером Google по этому вопросу

это технология, которую Apple на самом деле разработала очень давно под названием Apple Data Detectors. Вы можете прочитать больше об этом здесь:

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

по существу он анализирует текст и обнаруживает шаблоны, которые представляют определенные части данных, а затем применяет к нему контекстные действия ОС. Это здорово.

Это называется временное выражение идентификация и анализ. Вот некоторые поиски Google, чтобы вы начали:

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

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

Я однажды написал парсер для этого, используя pyparsing. Это действительно очень просто, вам просто нужно получить все разные способы, но их не так много. Это заняло всего несколько часов и было довольно быстро.

Apple имеет патент на то, как они это сделали система и метод выполнения действия над структурой в данных компьютера, а вот история об этом патенте яблоки-патент-на-nsdatadetector