Apple 如何在电子邮件中查找日期、时间和地址?
Posted
技术标签:
【中文标题】Apple 如何在电子邮件中查找日期、时间和地址?【英文标题】:How does Apple find dates, times and addresses in emails? 【发布时间】:2012-03-06 21:15:30 【问题描述】:在 ios 电子邮件客户端中,当电子邮件包含日期、时间或位置时,文本会变成超链接,只需点击链接即可创建约会或查看地图。它不仅适用于英语电子邮件,也适用于其他语言。我喜欢这个功能,并想了解他们是如何做到的。
实现这一点的天真的方法是拥有许多正则表达式并运行它们。但是我这不会很好地扩展,并且只适用于特定的语言或日期格式等。我认为苹果必须使用机器学习的一些概念来提取实体(8:00PM、8PM、8:00、 0800、20:00、20h、20h00、2000 等)。
知道 Apple 是如何在其电子邮件客户端中如此快速地提取实体的吗?你会应用什么机器学习算法来完成这样的任务?
【问题讨论】:
我也想过这个,尤其是正则表达式技巧。我知道他们有专利,所以也许你可以尝试搜索它。但是,我也会对此非常感兴趣。 +1 实际上正则表达式技巧可能会以非常低的错误率捕获 99% 的情况。当您优化正则表达式时,速度非常快。因此,如果它确实只是一组正则表达式,我不会感到惊讶。 【参考方案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】:这称为时态表达式识别和解析。以下是一些帮助您入门的 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
【讨论】:
+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
【讨论】:
以上是关于Apple 如何在电子邮件中查找日期、时间和地址?的主要内容,如果未能解决你的问题,请参考以下文章
接受与 Apple ID 不同的电子邮件地址的 TestFlight 邀请?
如何在 C# 中使用 AD 组名称查找 Active Directory 组电子邮件地址