自然语言解析约会?

Mik*_*ugo 12 java datetime parsing nlp

我正在寻找一个Java库来帮助解析用户输入的文本,该文本代表日历应用程序的"约会".例如:

周二11:30与迈克共进午餐

要么

星期五下午5点欢乐时光

我找到了一些很有前途的线索,比如https://github.com/samtingleff/jchronichttp://www.datejs.com/,可以解析日期 - 但我还需要能够提取事件的标题,如"与迈克共进午餐".

如果这样的API不存在,我也对从编码角度如何最好地解决问题的任何想法感兴趣.

ig0*_*774 9

扩展JChronic可能是您最好的选择.我认为,鉴于对这个问题的回答,不太可能存在预先构建的库(虽然看起来这样的事情可能有用......我猜测解析自然语言日期的主要用例如果他们能够从用户提供的字符串中提取额外的数据,那将会更有用.

在实现方面,可能最直接的做法是扩展JChronic,因为它支持你的用例中相当大的一部分,但是从单元测试中可以看到更多的外部信息应该已经被忽略了框架.幸运的是,如果你看一下主类,扩展/修改/包装parse()方法以支持事件标题的自定义扫描程序应该不会太难.(我自己对这些的偏好是包装框架而不是fork并修改它,因为这样可以更容易地从底层代码的任何改进中受益).

最终,可以证明最直接的方法是生成一个正则表达式解析器,忽略JChronic尝试捕获的大部分内容(这意味着对JChronic源代码非常熟悉).

与任何NLP类型项目一样,成功实现此项目的关键是拥有尽可能多的示例,最好是自动化单元测试(最终,即使测试用例测试多次重复相同的功能,也会更好有更多的例子而不是更少).幸运的是,由于我们谈论的是自然语言,因此这类测试用例应该特别容易获得,因为即使是非程序员朋友,家人等也应该能够为您提供"事件描述"(或者您想要调用的任何内容)他们).您还需要特别关注日期解析位可能会干扰位置/标题解析位的边缘情况(例如,在"sigur,在晚上8点","at"显然是时间的一部分,而在"party"中在菲比的星期六"显然不是这样".

我意识到我对JChronic说了很多,但我觉得这对你的问题来说是一个很自然的选择,因为它已经涵盖了解析自然语言"约会"的大部分"难点",即我们语言的模糊性.使用时间,并已使用您所针对的语言实施.


adu*_*ric 0

我想不出有什么可以满足您的要求。您可以尝试斯坦福 NLP Java 包或 OpenNLP。然而,这可能是对你想要做的事情的一个大锤解决方案。

或者您可以尝试自己解析它。如果您想处理更多输入,请使用 JFlex 扫描输入并进行标记,并使用 CUP 创建语法。