0

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

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

我很难同时获得两个主题(门票和请求)。理想情况下,它们将被放入单独的命名组中,例如Measures:tickets、requests and logic: and . 需要注意的是,某些度量可能包含空格,因此也必须加以考虑。

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

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

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

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

4

1 回答 1

1

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

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

and这将抓取与或连接的任意数量的术语or。它不会为您单独捕获每个术语,但您可以splitand和上获取结果or。当然,您可以使用.+.

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

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

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

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

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

于 2012-11-21T19:46:03.000 回答