1

我正在使用监视软件来查找基于大量网络资源和方程式的特定主题的文章。方程式如下:

(K1 AND K2) OR K3 NOT "K4" OR "K5 K6"~5

上面的示例说明了几乎所有可能的运算符,~ 是邻近运算符,当两个单词被找到并且最多被 n 个单词分隔时请求匹配。

给你一个更精确的例子(?是一个单字符通配符;* 是任意数量的字符)

("Game of Thrones" OR "George R. R. Martin") AND (Targaryen? OR Baratheon? NOT Lannister? OR "mother dragon?"~5)

我想做的是提供一个脚本或程序,它可以采用关键字并形成方程式,而不必写下所有的括号。我认为这将使两个方程之间的比较更容易并降低错误率。

我首先想到了一个带有默认“OR”运算符的 excel 工作表:

keyword | logical operator | depth of parentheses

但这并不是在每种组合中都有效——程序无法猜测两行之间的深度何时是恒定的,而实际上它确实是 -1 +1

我想要一个最简单的输入,因为我可能会将它发送给普通用户。你有什么主意吗 ?然后我可以用 C++、Java 甚至 VBA 做解释器。

编辑/为了澄清,我正在寻找一种输入格式,允许最终用户不写括号,只关心他们的关键字和它们之间的关系。

4

3 回答 3

1

您在寻找什么,是将字符串输入与给定模式匹配。这是 CS 中一个非常常见的问题, 通常称为 regexps的正则表达式的概念很好地解决了这个问题。

然而,正则表达式并不是那么容易编写,尤其是对于新手而言。即使是经验丰富的程序员有时也难以编写他们想要的确切正则表达式。

这里有一个有用的网站来生成正则表达式。它需要一些时间来了解它是如何工作的,但是之后它可以节省大量时间。

于 2013-03-29T08:31:18.680 回答
1

我认为这些括号不能一直用 Regexp 正确完成。

我记得在大学里,我们学习了编译器形式语言

您将需要在您的语言中定义允许的单词和一些规则,使其成为有效的语法(例如:括号必须关闭,必须是一个单词后跟一个逻辑运算符等等),最后您将获得执行结果。

在执行时,它需要用这些括号构建一个堆栈。并把价值观,偷看一个。

我希望它对您有所帮助,并且您有一些关键字可以在哪里搜索它。

于 2013-03-29T08:35:41.810 回答
1

您需要的是扫描仪和解析器。

自己编写扫描仪和解析器并不难。您可以在一百行中制作一个简单的递归下降解析器http://en.wikipedia.org/wiki/Recursive_descent_parser )。

但是,您也可以使用编译器-编译器(如 lex/yacc)工具从给定的语法生成解析器。

于 2013-03-29T09:02:50.313 回答