在iOS电子邮件客户端中,当电子邮件包含日期,时间或位置时,文本将成为超链接,只需点击链接即可创建约会或查看 Map . 它不仅适用于英语电子邮件,也适用于其他语言 . 我喜欢这个功能,想了解他们是如何做到的 .
这样做的天真方法是拥有许多正则表达式并运行它们 . 但是我不能很好地扩展它并且只适用于特定的语言或日期格式等 . 我认为Apple必须使用一些机器学习的概念来提取实体(晚上8点,晚上8点,8点, 0800,20:00,20h,20h00,2000等) .
知道Apple如何能够在其电子邮件客户端中如此快速地提取实体?您将应用什么机器学习算法来完成这样的任务?
6 回答
他们可能会使用Information Extraction技术 .
这是斯坦福的SUTime工具的演示:
http://nlp.stanford.edu:8080/sutime/process
您将在文档中提取有关n-gram(连续单词)的属性:
numberOfLetters
numberOfSymbols
长度
previousWord
nextWord
nextWordNumberOfSymbols
...
然后使用分类算法,并提供正面和负面的例子:
你可能会得到50个例子,但越多越好 . 然后,算法基于这些示例进行学习,并且可以应用于之前未见过的未来示例 .
它可能会学习诸如此类的规则
如果前一个单词只是字符,可能是句点......
和当前字在"february","mar.","the" ...
和下一个单词是"twelfth",any_number ...
然后是日期
以下是Google工程师关于此主题的decent video
这是Apple很久以前开发的一种名为
Apple Data Detectors
的技术 . 你可以在这里读更多关于它的内容:http://www.miramontes.com/writing/add-cacm/
本质上,它解析文本并检测表示特定数据片段的模式,然后对其应用操作系统上下文操作 . 它很整洁 .
这称为时态表达式识别和解析 . 以下是一些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
这个难题的一部分可能是
NSDataDetector
类 . 它用于识别一些标准类型,如电话号码 .我曾经使用pyparsing编写了一个解析器 . 这真的很简单,你只需要正确地采用所有不同的方式,但没有那么多 . 它只花了几个小时,而且非常快 .
Apple已经就他们如何做到这一点获得了专利System and method for performing an action on a structure in computer data,这是关于这一专利的一个故事apples-patent-on-nsdatadetector