繁体   English   中英

解析器字符串布尔表达式

[英]parser String boolean expression


我应该构建一个搜索引擎,使任何人都可以输入任何布尔表达式,例如(word1 + word2) - !word3其中+表示and-表示or! 意思not

然后在数据库中搜索这些单词并返回实现该表达式的文档。
所以我用这样的字典:

  Dictionary<string, List<int>> WordsAndDoc = new Dictionary<string, List<int>>();

我在数据库中搜索了每个单词,然后在字典中添加了文档ID列表
我声明了两种方法。
首先合并两个列表:

public List<int> Intersect(List<int> P1, List<int> P2)

仅次于联合两个列表:

public List<int> Union(List<int> P1, List<int> P2)

问题是:我应该如何解析TextBox中的布尔表达式,如果存在+则合并两个单词列表。 如果存在-然后合并两个列表以最终生成所需文档ID的一个列表...
请帮助我,非常感谢。

我认为您需要编写一种语法。 ANTLR项目可以像在LEX和YACC中一样,帮助您生成基于gramar的C#代码。 社区很重要,我希望您能找到尚未完成的语法。

希望对您有所帮助

J.P

不能完全确定我了解这个问题,但是仅使用数据库查询会不会更容易? 例如将他们输入的文本转换为:

(word1 + word2)-!word3

SELECT id FROM table WHERE (field like '% word1 %' and field like '% word2 %') 
  and not (field like '% word3 %')

还有许多其他方式来执行查询,例如,是否具有全文本或其他内容,取决于数据库,但这似乎更像是通过构造正确的查询而不是事后处理查询来最好地完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM