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


129

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

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

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


5
Я тоже думал об этом, особенно о трюке с регулярным выражением. Я знаю, что у них есть патент, так что, может быть, ты попробуешь его поискать. Однако мне это тоже было бы очень интересно. +1
Thomas Jungblut

15
На самом деле трюк с регулярным выражением, вероятно, уловит 99% случаев с очень низкой частотой ошибок. И это очень быстро, если вы хорошо оптимизируете регулярные выражения. Поэтому я не удивлюсь, если это действительно просто набор регулярных выражений.
ВЫЙТИ - Anony-Mousse

Ответы:


153

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

Вот демонстрация инструмента 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
el шеф, по вашему мнению, какая модель лучше всего подойдет для этого? Байесовский?
Мартин

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

@ b.buchhold, возможно, но тогда вам придется проделать такой же объем работы для следующего языка и следующего языка, тогда как мое решение является общим.
Neil McGuigan

@ Нил МакГиган, правда. Но вам нужно будет предоставить множество обучающих данных для всех этих форматов / языков, что намного сложнее.
b.buchhold

@NeilMcGuigan большое спасибо за этот ответ. Я сделал то, что вы упомянули выше, но не смог понять, как обучить эти данные и какой алгоритм. Я не могу использовать дерево решений, так как атрибуты не одного типа
chopss

111

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

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

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


24
Это правильный ответ. Другие ответы могут рассказать вам, как вы могли бы это сделать, но этот говорит вам, как это делает Apple .
LaC,

2
не могли бы мы иметь немного больше деталей в описании? одинарные ссылки не добавляют так много
shigeta

14
А, вот откуда все хиты на моем веб-сайте :) FWIW, я был руководителем проекта Apple Data Detectors еще во времена ATG; что я могу добавить, так это то, что это была технология только для OS 8 и 9 - она ​​никогда не переходила на OS X. Очевидно, что некоторые похожие вещи происходят в OS X и IOS, и, хотя я больше не в Apple и поэтому не могу сказать, я не удивлюсь, если архитектура будет немного другой. Тем не менее, я ожидаю, что в его основе все еще лежит какая-то система грамматики / синтаксического анализа. В наши дни компьютеры работают быстро, а простые грамматики довольно дешевы.
Джим Миллер,

18

Это называется идентификацией и анализом временного выражения . Вот несколько поисковых запросов 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


+1 за то, что сказал, что такое название «идентифицирующих выражений, относящихся ко времени» в некоторой / большей части литературы
arturomp

6

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


2
Похоже, этот NSDataDetectorкласс - результат усилий Apple, приложенных для его реализации. Вопрос в том, как класс работает внутри?
Ole Begemann

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

3

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


Выдержка из Мирамонтеса «Жестко запрограммировать распознаватель атомарной структуры, такой как URL-адрес, нетрудно, но требуется значительная работа для создания архитектуры, которая открывает процесс создания сложных структур».
Реми

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.