苹果如何find电子邮件中的date,时间和地址?

在iOS电子邮件客户端中,当电子邮件包含date,时间或地点时,文本将成为超链接,只需点击链接即可创build约会或查看地图。 它不仅适用于英文的电子邮件,还适用于其他语言的电子邮件。 我喜欢这个function,并想了解他们是如何做到的。

这样做的天真的方法是有许多正则expression式,并运行它们。 但是,我不能很好地扩展,只能用于特定的语言或date格式等。我认为,苹果必须使用一些机器学习的概念来提取实体(8:00 PM,8 PM,8:00, 08:00,20:00,20:00,20:00,2000等)。

任何想法如何苹果能够在其电子邮件客户端如此迅速地提取实体? 你会用什么机器学习algorithm来完成这样的任务?

他们可能使用信息提取技术。

这里是斯坦福的SUTime工具演示:

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

你将在文档中提取有关n-gram(连续词)的属性:

  • numberOfLetters
  • numberOfSymbols
  • 长度
  • previousWord
  • nextWord
  • nextWordNumberOfSymbols

然后使用一个分类algorithm,并喂它的正面和负面的例子:

Observation nLetters nSymbols length prevWord nextWord isPartOfDate "Feb." 3 1 4 "Wed" "29th" TRUE "DEC" 3 0 3 "company" "went" FALSE ... 

你可能会拿走50个例子,但越多越好。 然后,algorithm基于这些例子进行学习,并且可以应用到以前从未见过的未来例子。

它可能会学习如下的规则

  • 如果以前的单词只有字符和可能的时期…
  • 目前的字是在“二月”,“三月”,“…”
  • 接下来的单词是“十二”,any_number …
  • 那么是date

这是Google工程师在这个主题上的一个体面的video

这是苹果公司实际上在很久以前开发的一种名为Apple Data Detectors 。 你可以在这里读更多关于它的内容:

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

本质上,它parsing文本并检测代表特定数据段的模式,然后对其应用操作系统上下文操作。 它很整齐。

难题的一部分可能是NSDataDetector类。 它用来识别一些标准types,如电话号码。

我曾经写过一个parsing器来做这个,使用pyparsing。 这真的很简单,你只需要得到所有不同的方式,但没有那么多。 它只花了几个小时,速度很快。

苹果公司在他们是如何做到的专利系统和方法在计算机数据结构上执行一个行动 ,这里是关于这个专利的一个故事苹果专利在nsdatadetector