Как Apple находит даты, время и адреса в электронных письмах? - PullRequest
127 голосов
/ 15 февраля 2012

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

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

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

Ответы [ 6 ]

152 голосов
/ 19 февраля 2012

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

Вот демонстрация инструмента 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 примеров каждого, но чем больше, тем лучше. Затем алгоритм учится на основе этих примеров и может применяться к будущим примерам, которых он раньше не видел.

Может изучать такие правила, как

  • если предыдущее слово состоит только из символов и, возможно, периодов ...
  • и текущее слово в "февраль", "март", "the" ...
  • и следующее слово в «двенадцатом», any_number ...
  • тогда дата

Вот приличное видео от инженера Google на эту тему

110 голосов
/ 25 февраля 2012

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

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

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

18 голосов
/ 16 февраля 2012

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

5 голосов
/ 24 февраля 2012

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

2 голосов
/ 25 февраля 2012

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

1 голос
/ 31 июля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...