Как 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/
По сути, он анализирует текст и обнаруживает шаблоны, которые представляют конкретные фрагменты данных, а затем применяет к нему ОС-контекстуальные действия. Это аккуратно.
Ответ 3
Это называется идентификацией временного выражения и синтаксическим анализом. Ниже приведены некоторые поисковые запросы 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
Ответ 4
Одной частью головоломки может быть класс NSDataDetector
. Его использовали для распознавания некоторых стандартных типов, таких как номера телефонов.
Ответ 5
Я однажды написал синтаксический анализатор, чтобы сделать это, используя pyparsing. Это действительно очень просто, вам просто нужно все правильно использовать, но их не так много. Это заняло всего несколько часов и было довольно быстро.
Ответ 6
Apple имеет патент на то, как они это сделали Система и метод для выполнения действия над структурой в компьютерных данных, и здесь рассказ о этот патент apples-patent-on-nsdatadetector