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