我正在使用监控软件根据大量网络资源和方程式查找有关特定主题的文章。方程式重新组合如下:
(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来完成解释器。
编辑 /为了澄清,我正在寻找一种输入格式,允许最终用户不要写括号,只关心他们的关键字以及它们之间的关系。
答案 0 :(得分:1)
您在寻找什么,是将String输入与给定模式匹配。这是CS中一个非常常见的问题,regular expressions的概念通常被称为regexp。
然而,regexps并不是那么简单,特别是对于新手而言。即使是有经验的程序员也有时难以编写他们想要的正确的正则表达式。
有一个有用的网站可以生成正则表达式here。它需要一些时间才能理解它是如何工作的,然而这是一个令人难以置信的节省时间。
答案 1 :(得分:1)
我认为使用Regexp无法正确完成这些括号。
我记得大学时,我们学会了Compiler和Formal Languages。
您需要在您的语言和一些规则中定义允许的单词,才能成为有效的语法(例如:必须关闭括号,必须是一个单词后面跟一个逻辑运算符等等),最后您将执行结果
在执行时,需要使用这些括号构建堆栈。并把价值观,并偷看一个。
我希望它有所帮助,你有一些关键词在哪里搜索。
答案 2 :(得分:1)
您需要的是扫描仪和解析器。
自己编写扫描仪和解析器并不难。您可以在一百行中制作一个简单的 RECURSIVE DESCENT PARSER (http://en.wikipedia.org/wiki/Recursive_descent_parser)。
但是,您也可以使用编译器编译器(如lex / yacc)工具从给定的语法生成解析器。