【发布时间】:2011-11-22 10:28:12
【问题描述】:
我有兴趣开发与 RTM 的智能添加功能类似的解决方案。
对于那些不知道记住牛奶的人,这里是它的工作原理:添加任务是通过一个输入框完成的,该输入框接受字符串并解析出不同的参数,如任务名称、截止日期、优先级、标签等。参数通常以特殊符号(^、#、& 等)开头。 RTM 还接受诸如“周三网球”之类的变体。
我向您提出的基本问题是,您将如何设计一个能够智能识别字符串不同部分的系统。我需要研究自然语言处理吗?
到目前为止,我正在使用一个简单的正则表达式来查找特殊的前面符号(^、#、& 等),然后解析出字符串的不同部分。随着越来越多的无序参数,这变得越来越困难。也许这源于我缺乏正则表达式专业知识。
在尝试转换不同格式的到期日期时会出现类似的问题('27 May 2008 16:00'、'27th May 2008'、'16th June 16:00'、'June 16th 12:00'、'today 12:00am'等)到日期时间对象。我目前正在使用 Python 和正则表达式。我的方法基本上是遍历一长串可能的日期和时间组合,并将匹配的表达式转换为 date.strptime。我发现这种方法很难维护;大量误报、剩余字符串等。您可以在此处查看我的代码:https://gist.github.com/1233786 这不漂亮,已警告您。
如果您能提供任何有关处理此主题的正确方向的提示,我将不胜感激。编写一个日期解析器真的很有趣,但在我寻找数百个不同用例中的所有错误之前,我想我会检查是否有更优雅的设计模式。
P.S.:我希望有一些代码示例可以让我深入了解。最好是 Python :)
【问题讨论】:
-
如果您对这种上下文分析感兴趣,我肯定会查看 Python 自然语言工具包nltk.org - 它的入门门槛非常低,并且有一些很棒的教程和可以帮助您入门的书籍(例如 nltk.org/book )。
-
看起来很棒的资源,非常感谢 mwan!