132

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

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

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

4

6 回答 6

154

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

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

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

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

  • numberOfLetters
  • numberOfSymbols
  • 长度
  • 上一个词
  • 下一个词
  • 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 ...
  • 然后是日期

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

于 2012-02-18T22:04:32.670 回答
116

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

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

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

于 2012-02-25T10:10:10.450 回答
21

这称为时间表达识别和解析。以下是一些可帮助您入门的 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

于 2012-02-15T21:12:26.283 回答
7

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

于 2012-02-24T13:12:16.520 回答
3

我曾经使用 pyparsing 编写了一个解析器来执行此操作。这真的很简单,你只需要把所有不同的方法都弄对,但没有那么多。只用了几个小时,而且速度非常快。

于 2012-02-25T10:42:21.670 回答
1

Apple 拥有一项关于他们如何做到这一点的专利System and method for perform an action on a structure in computer data,这里有一个关于这个专利apples-patent-on-nsdatadetector 的故事

于 2012-07-31T02:42:57.747 回答