2013-03-29 40 views
1

我正在使用监视软件根据大量网络资源和方程式查找关于特定主题的文章。方程ressemble以下内容:以上我可以使用什么输入文件格式来创建一个等式?

(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) 

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

我首先想到的Excel工作表有一个默认的“OR”操作符:

keyword | logical operator | depth of parentheses 

但是这并没有在每个组合的工作 - 当深度两者之间是恒定的程序无法猜测当它,实际上,它-1 -1

我想输入这是最容易的,因为我可能会发送给一般用户。你有什么主意吗 ?然后我可以用C++,Java甚至VBA做解释器。

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

回答

1

你在找什么,是匹配一个字符串输入对一个给定的模式。这是CS中的一个非常普遍的问题,通常被称为regexps的regular expressions的概念很好地解决了这个问题。

但是正则表达式并不是那么无聊,特别是对于新手来说。即使有经验的程序员有时也很难编写他们想要的确切正则表达式。

有一个有用的网站来生成正则表达式here。它需要一些时间来了解它是如何工作的,但这是一个令人难以置信的节省时间。

+0

谢谢,我已经很流利的正则表达式;)看到你的三个答案,我想我的问题没有清楚说明。我正在寻找一种输入格式,允许用户不要写括号。 –

+1

我想你应该为最终用户提供一个图形界面来构建它的查询。在这种情况下,你真的不会在乎输入格式,在任何情况下都会很复杂(你总是需要圆括号来表示复杂的布尔表达式) – Julien

1

我认为这些圆括号不能一直用正则表达式正确完成。

正如我从大学的记忆中,我们了解到CompilerFormal Languages

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

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

我希望它有帮助,你有几个关键词在哪里搜索它。

+0

感谢您的回答。我明白你的观点,尽管它只解决错误率问题,而不是简单易用。 –

1

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

自己写扫描仪和解析器并不难。你可以在一百行中做一个简单的RECURSIVE DESCENT PARSERhttp://en.wikipedia.org/wiki/Recursive_descent_parser)。

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

相关问题