一种朴素的方法是使用许多正则表达式并运行它们全部。但是,这种方法不会很好地扩展,并且仅适用于特定的语言或日期格式等。我认为苹果必须使用某种机器学习概念来提取实体(例如8:00PM、8PM、8:00、0800、20:00、20h、20h00、2000等)。
有没有想法,苹果在其电子邮件客户端中如何能够快速提取实体?你会应用什么机器学习算法来完成这样的任务?
他们可能使用信息提取技术来实现这一点。
以下是斯坦福大学的SUTime工具演示:
http://nlp.stanford.edu:8080/sutime/process
您将从文档中提取关于n-gram(连续单词)的属性:
然后使用分类算法,并提供正面和负面的例子进行训练:
Observation nLetters nSymbols length prevWord nextWord isPartOfDate
"Feb." 3 1 4 "Wed" "29th" TRUE
"DEC" 3 0 3 "company" "went" FALSE
...
你可能只需要50个每种的例子,但是越多越好。然后,算法会根据这些例子进行学习,并可以应用于它以前没有见过的未来例子。
它可能会学习到以下规则:
这里有一位谷歌工程师关于这个主题的不错的视频。
这其实是苹果很久以前开发的一项技术,称为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
类。它被用于识别一些标准类型,例如电话号码。
NSDataDetector
类是苹果为了实现这个功能而付出的努力的结果。问题在于这个类如何内部工作? - Ole Begemann我曾经使用pyparsing编写过一个解析器来实现这个功能。它非常简单,你只需要正确地处理所有不同的方式,但并不多。这只花了几个小时,并且速度相当快。
苹果公司拥有一项专利,涉及计算机数据结构上执行操作的方法和系统System and method for performing an action on a structure in computer data,以下是关于该专利的报道apples-patent-on-nsdatadetector