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

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

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

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

Ответ 1

Вероятно, для этого используются методы Information Extraction.

Ниже приведена демонстрация инструмента Stanford SUTime:

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

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

  • numberOfLetters
  • numberOfSymbols
  • Длина
  • previousWord
  • 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 по этому вопросу

Ответ 2

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

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

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

Ответ 4

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

Ответ 5

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