在RegEx中拆分自然语言短语时遇到问题

时间:2012-11-21 19:39:40

标签: regex

我正在尝试编写一个RegEx模式,该模式将提取自然语言短语的关键短语,以便构建查询并返回数据。到目前为止,一切都进展顺利,直到我遇到了一个问题,试图从主张中有效地拉出主要主题。例如:

让我们假设我的短语是“显示我上个月关闭的所有门票”。我可以解析构建查询所需的每个元素,但是如果我尝试“向我显示上周关闭的所有票证和请求”这样的内容,那么这一切都会崩溃。

我很难获得这两个科目(门票和请求)。理想情况下,它们会被带入单独的命名组,例如度量:票证,请求逻辑:和。需要注意的是,某些度量可能包含空格,因此必须对其进行说明。

到目前为止我只能想出这个:

(\S+\s?)+(?=and|or)

当使用"#sla met and tickets"的测试短语时,它只会拉#sla met。

我从昨天起才开始使用正则表达式,所以任何提示都会非常有用!

1 个答案:

答案 0 :(得分:1)

快速回答解决问题的一个非常狭窄的部分

(.+)((and|or)(.+))

这将获取与andor连接的任意数量的字词。它不会为您单独捕获每个字词,但您可以在splitandor结果。当然,您可以使用.+获得相同的结果。

你看到了问题吗? 正则表达式不允许您解析自然语言。你正试图用勺子穿过一座山。我实际上不得不删除并重新创建我的答案,因为我花了五分钟试图让捕获工作最终放弃。这就是正则表达式对于这项任务的不足。

如果你真的想要解析自然语言,你需要开始阅读研究论文。其中很多。

编辑:这是一个正则表达式,可以找到多个匹配项(不是一个匹配多个组的匹配项),每个匹配项都有一个捕获组作为项目。

(?:\s+(?:and|or)\s+)?(\S+)

免责声明:有很多方法可以欺骗这个正则表达式。我现在可以想到三到四个,但肯定还有更多。