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


128

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

天真的方法是拥有许多正则表达式并全部运行它们。但是我无法很好地扩展,只能用于特定的语言或日期格式等。我认为Apple必须使用某种机器学习的概念来提取实体(8:00 PM、8PM、8:00, 0800、20:00、20h,20h00、2000等)。

知道Apple如何能够在其电子邮件客户端中如此快速地提取实体吗?您将应用哪种机器学习算法来完成此类任务?


5
我也考虑过这一点,尤其是正则表达式的把戏。我知道他们对此有专利,所以也许您可以尝试进行搜索。但是,我也会对此感兴趣。+1
Thomas Jungblut 2012年

15
实际上,regexp技巧可能会捕获99%的错误率非常低的情况。当您很好地优化了正则表达式时,它非常快。因此,如果确实只有一组正则表达式,我不会感到惊讶。
已退出–Anony-Mousse 2012年

Answers:


153

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

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

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

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

  • 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工程师关于该主题的不错的视频


4
有趣!我从来没有那样。谢谢酋长。
马丁

2
酋长,您认为哪种模式最适合?贝叶斯?
马丁

5
我很确定,这种方法不会比大约f的f措施更好。0.9。(注意,这只是一种感觉,我可能是错的)。另一方面,除了天真的编码所有通用格式的方法外,我会更好地执行(最好是0.99+,因为绝不会错过最常见的格式),并在运行时更快地实现+。
b.buchhold

@ b.buchhold,也许,但是然后您必须为下一种语言和下一种语言做相同数量的工作,而我的解决方案是通用的。
尼尔·麦圭根

@尼尔·麦圭根(Neil McGuigan),是的。但是您必须为所有这些格式/语言提供大量的培训数据,这需要大量工作。
b.buchhold

110

这是苹果很久以前开发的一项技术Apple Data Detectors。你可以在这里读更多关于它的内容:

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

本质上,它解析文本并检测代表特定数据的模式,然后对其应用OS上下文操作。干净利落


24
这是正确的答案。其他答案可能会告诉您如何执行此操作,但是此答案告诉您Apple如何执行此操作。
LaC 2012年

2
我们可以在写作中多一点细节吗?单个链接条目不会增加太多
shigeta 2012年

14
嗯,这就是我网站上所有热门内容的来源:) FWIW,在ATG时代,我是Apple Data Detectors的项目负责人;我可以在这里添加的只是这是一种OS 8和9技术,它从来没有跳到OSX。显然,在OS X和IOS中也发生了类似的事情,尽管我不再在Apple工作了。所以不能说,如果架构有所不同,我也不会感到惊讶。不过,我希望某种语法/解析器系统仍处于核心地位。如今计算机速度很快,简单的语法也很便宜。
Jim Miller


5

难题之一可能是NSDataDetector上课。它用于识别一些标准类型,例如电话号码。


2
看来这NSDataDetector门课是苹果公司为实现这一目标而付出的努力的结果。问题是班级内部如何工作?
Ole Begemann

3
它位于NSRegularExpression.h中,因此,正如所指出的,它很有可能只是一组正则表达式。
riffraff 2012年

2

我曾经使用pyparsing编写了一个解析器来执行此操作。这真的非常简单,您只需要正确对待所有不同的方法即可,但是没有那么多。只花了几个小时,速度很快。


Miramontes的摘录“对诸如URL之类的原子结构的识别器进行硬编码并不困难,但是需要大量的工作才能构建出可打开创建复杂结构的过程的体系结构。”
Remy 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.