4 个版本
使用旧的 Rust 2015
0.1.3 | 2018 年 1 月 20 日 |
---|---|
0.1.2 | 2018 年 1 月 20 日 |
0.1.1 | 2018 年 1 月 18 日 |
0.1.0 | 2018 年 1 月 18 日 |
在 #boolean 中排名第 73
15KB
337 行
bqrs
这是一个用于将布尔过滤器应用于文本的库。
访问我的 crates.io
示例
extern crate bq_rust;
use bq_rust::Matcher;
let greeting = Matcher::from("'hello' | 'hi'");
assert!(greeting.query("hi there!"));
assert!(greeting.query("hello i am here"));
let greet2 = Matcher::from("('hello' | 'hi' ) 'there'");
assert!(greet2.query("hello there!"));
assert!(greet2.query("hi there!"));
用法
使用 Matcher::from
创建匹配对象。
使用匹配对象的 query
方法来检查文本是否与查询匹配。
描述
在内部,查询以树结构表示。内部节点是操作符 AND、OR 和 NOT,而叶节点是搜索的关键词。
库检查文本中每个关键词的出现,并根据内部节点决定返回 TRUE 或 FALSE。
使用 Knuth-Morris-Pratt 算法的实现(我从互联网上找到的 C 实现中无耻地复制了它)进行快速字符串匹配。
语法
使用伪 BNF 语言
query:
or-group ( '|' or-group )*
or-group:
and-group ( '&' and-group )*
and-group:
STRINGLITERAL
'!' and-group
'(' query ')'
其中 STRINGLITERAL
是任何用引号括起来的 ASCII 字符序列。
英文
使用 '&' 表示 AND,'|' 表示 OR,'!' 表示 NOT。NOT 的优先级最高,然后是 AND,然后是 OR。
可以使用 '(' 和 ')' 进行分组。
let complexq = Matcher::from(" 'that' & ( 'this' | 'these' ) & 'those' ");
assert!(complexq.query("that and this with those"));
assert!(complexq.query("that and these with those"));
待办事项
- 文档。
- 更多测试。
- 通过输出 dot 语言文件将查询可视化为一个图。