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

CC-BY-4.0

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 语言文件将查询可视化为一个图。

无运行时依赖