【问题标题】:How does Apple find dates, times and addresses in emails?Apple 如何在电子邮件中查找日期、时间和地址?
【发布时间】:2012-03-06 21:15:30
【问题描述】:

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

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

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

【问题讨论】:

  • 我也想过这个,尤其是正则表达式技巧。我知道他们有专利,所以也许你可以尝试搜索它。但是,我也会对此非常感兴趣。 +1
  • 实际上正则表达式技巧可能会以非常低的错误率捕获 99% 的情况。当您优化正则表达式时,速度非常快。因此,如果它确实只是一组正则表达式,我不会感到惊讶。

标签: machine-learning nlp information-extraction named-entity-recognition


【解决方案1】:

他们可能为此使用Information Extraction 技术。

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

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

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

  • numberOfLetters
  • numberOfSymbols
  • 长度
  • previousWord
  • 下一个单词
  • nextWordNumberOfSymbols
    ...

然后用一个分类算法,给它正反两例:

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

每个例子都有 50 个例子,但越多越好。然后,该算法会根据这些示例进行学习,并可以将其应用于以前从未见过的未来示例。

它可能会学习诸如

之类的规则
  • 如果前一个单词只是字符和句点...
  • 当前单词在“february”、“mar.”、“the”...
  • 下一个单词在“第十二”,any_number ...
  • 然后是日期

这是一位 Google 工程师就该主题撰写的 decent video

【讨论】:

  • el 主任,在您看来,什么样的模型最适合呢?贝叶斯?
  • 我很确定这种方法的性能不会比大约 f 测量更好。 0.9。 (注意,这只是一种感觉,我可能错了)。另一方面,除了编码所有常见格式以更好地执行(可能是 0.99+,因为永远不会错过最常见的格式)并在运行时更快地实现 + 的天真方法。
  • @b.buchhold,也许可以,但是你必须为下一种语言和下一种语言做同样多的工作,而我的解决方案是通用的。
  • @Neil McGuigan,真的。但是你必须为所有这些格式/语言提供大量的训练数据,这需要更多的工作。
  • @NeilMcGuigan 非常感谢您的回答。我做了你上面提到的,但无法弄清楚如何训练这些数据和使用哪种算法。我不能使用决策树,因为属性类型不同
【解决方案2】:

这是苹果公司很久以前开发的一项技术,称为Apple Data Detectors。您可以在此处阅读更多信息:

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

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

【讨论】:

  • 这是正确答案。其他答案可能会告诉您如何做到这一点,但这个答案会告诉您 Apple 是如何做到的
  • 我们可以在文章中提供更多细节吗?单个链接条目没有添加那么多
  • 啊,这就是我网站上所有点击量的来源:) FWIW,在 ATG 时代,我是 Apple Data Detectors 的项目负责人;我可以在这里补充的是,这只是 OS 8 和 9 的技术——它从未跳到 OS X。显然在 OS X 和 IOS 中发生了一些类似的事情,而且,虽然我不再在 Apple所以不能说,如果架构有点不同,我不会感到惊讶。尽管如此,我希望某种语法/解析器系统仍然是它的核心。现在的计算机速度很快,简单的语法也很便宜。
【解决方案3】:

【讨论】:

  • +1 表示在一些/大部分文献中“识别涉及时间的表达”的名称是什么
【解决方案4】:

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

【讨论】:

  • 看来NSDataDetector 类是Apple 为实现这一点所付出的努力的结果。问题是这个类在内部是如何工作的?
  • 它在 NSRegularExpression.h 中,所以正如所指出的,它似乎很可能只是一组正则表达式。
【解决方案5】:

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

【讨论】:

  • Extract from Miramontes "硬编码一个诸如 URL 之类的原子结构的识别器并不难,但需要大量的工作来构建一个打开创建复杂结构过程的体系结构。 "
【解决方案6】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2019-02-09
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2011-05-25
    • 2018-03-15
    相关资源
    最近更新 更多