代码之家  ›  专栏  ›  技术社区  ›  mikegreenberg

你认为谷歌日历中的“快速添加”功能是如何工作的?

  •  7
  • mikegreenberg  · 技术社区  · 14 年前

    我正在考虑一个项目,该项目可能使用类似于“快速添加”如何处理将自然语言解析为可以用某种语义理解的内容的功能。我对更好地理解这一点很感兴趣,想知道您对如何实现这一点有什么想法。


    如果您不熟悉“快速添加”是什么,请查看 Google's KB 关于它。


    6/4/10更新
    对“自然语言解析”(nlp)的额外研究产生的结果比我认为实际在“快速添加”之类的东西中实现的结果要广泛得多。考虑到这个特性需要特定类型的输入,而不是真正的自由格式文本,我认为这是一个更窄的NLP实现。如果有人能提出我可以研究的更窄的主题,而不是整个NLP的范围,我会非常感激。

    也就是说,我找到了一个不错的 collection of resources about NLP 包括这个伟大的 FAQ .

    2 回复  |  直到 14 年前
        1
  •  3
  •   Tommy Herbert    14 年前

    首先,我决定用一种标准的方式来表示我感兴趣的所有信息:事件名称、开始/结束时间(和日期)、客人名单、地点。例如,我可以使用这样的XML表示法:

    <event>
        <name>meet Sam</name>
        <starttime>16:30 07/06/2010</starttime>
        <endtime>17:30 07/06/2010</endtime>
    </event>
    

    然后,我的目标是建立一个关于日期的日记条目语料库,并用它们的XML表单进行注释。我如何收集数据?好吧,如果我是谷歌,我可能会有各种各样的方法。既然我是我,我可能会先写下所有我能想到的表达这类东西的方法,然后用手来注释。如果我能通过浏览朋友的电子邮件之类的东西来补充这一点,那就更好了。

    现在我有了一个语料库,它可以作为一组单元测试。我需要编写一个解析器来适应测试。解析器应该将一个自然语言字符串转换成我的注释的逻辑形式。首先,它应该将字符串拆分为其组成词。这被称为标记化,并且有现成的软件可以完成。(例如,请参见 NLTK 为了解释这些词,我会在数据中寻找模式:例如,在“at”或“in”后面的文本应标记为位置;“for x minutes”意味着我需要在开始时间中添加该分钟数以获取结束时间。在这里,统计方法可能是多余的——最好创建一系列手工编码的规则来表达您自己对如何解释这个领域中的单词、短语和结构的知识。

        2
  •  0
  •   mikegreenberg    14 年前

    似乎对这个问题没有狭隘的解决办法。我想避免为了找到一个解决方案而不得不把整个NLP拉过来,但是我没有找到任何替代方案。如果我以后找到一个非常好的解决方案,我会更新这个。