苹果如何在电子邮件中找到日期、时间和地址?

在 iOS 电子邮件客户端中,当一封电子邮件包含日期、时间或地点时,文本就会变成一个超链接,只需点击链接就可以创建一个约会或查看地图。它不仅适用于英文电子邮件,也适用于其他语言。我喜欢这个功能,并想了解他们是如何做到这一点。

实现这一点的简单方法是使用许多正则表达式并将它们全部运行。然而,我这是不会扩展得很好,将工作只有一个特定的语言或日期格式,等等。我认为苹果必须使用一些机器学习的概念来提取实体(8:00 PM,8 PM,8:00,0800,20:00,20小时,20小时,2000,2000等等)。

你知道苹果是如何能够如此快速地从其电子邮件客户端中提取实体的吗?你会用什么样的机器学习算法来完成这样的任务?

25529 次浏览

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

下面是斯坦福大学 SUTime 工具的演示:

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

您可以提取文档中关于 n-gram (连续单词)的属性:

  • 字母编号
  • 符号编号
  • 长度
  • 前情提要
  • 下一个词
  • 符号
    ...

然后使用一种分类算法,给出正面和负面的例子:

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

你可能每种都有50个例子,但是越多越好。然后,该算法基于这些例子进行学习,并且可以应用到以前没有见过的未来例子中。

它可能会学到一些规则,比如

  • 如果前面的单词只是字符,也许是句号..。
  • 现在的单词是“二月”“三月”“那个”。
  • 下一个单词是“第十二”,任何 _ 数..。
  • 那就是约会

下面是一位谷歌工程师关于这个主题的 不错的视频

这个谜题的一部分可能是 NSDataDetector类。它用于识别一些标准类型,如电话号码。

这是苹果公司很久以前开发的一项技术,称为 Apple Data Detectors。你可以在这里了解更多:

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

本质上,它解析文本并检测表示特定数据片段的模式,然后对其应用与操作系统相关的操作。干净利落。

我曾经编写了一个解析器来完成这项工作,使用的是 pyparsing。这真的很简单,你只需要把所有不同的方法都做对,但是没有那么多。只花了几个小时,而且很快。

苹果公司拥有 在计算机数据中对结构执行操作的系统和方法的专利,这里有一个关于 苹果专利数据检测器专利的故事