#lexer #search #search-query #parser #ui #search-engine #text-search

whydrogen

一个稍微有偏见的搜索查询解析器/词法分析器

1 个不稳定版本

0.1.0 2024年7月6日

#1707解析器实现

Download history 112/week @ 2024-07-02 16/week @ 2024-07-09

每月128次下载

LGPL-3.0-only

23KB
473

whydrogen — 搜索查询解析库

Whydrogen 是一个用 Rust 编写的稍微有偏见的搜索查询解析器。

其语法应该对了解几个流行搜索引擎的“高级搜索”功能的任何人来说都很熟悉。它支持 just words"Quoted tokens"key:value 对,!prefixed-values-"negated" -key:"values and" -!prefixes

哪些关键词和前缀有效是可以完全自定义的。语法是 Unicode 兼容的。

有关详细的语法描述,请参阅 lib.rs 文件中的文档

许可证

whydrogen 依据 LGPL-3.0-only 许可证授权。


lib.rs:

Whydrogen 是一个针对人类搜索查询的稍微有偏见的解析器。

其主要目的是将搜索条目中的文本字符串转换为更容易处理的标记/词素列表(具体取决于你如何使用它们)。

搜索语法的要点

  • 除非有其他规定,每个由空格分隔的项都是一个单词。
  • 字符分类是通过 Unicode 类别组来实现的。
  • 任何空白序列(Unicode 空白类别加上换行符和制表符)或查询的开始或结束都可以作为标记分隔符。
  • 短语是引号中的文本序列。
    • 支持的双引号对为:""»…««…»,将来还将扩展。
    • 短语只能紧跟在标记分隔符之后开始。
    • 关闭引号必须后跟一个标记分隔符(如果不是,它被视为短语的一部分)。
    • 引号内的任何标记分隔符都被视为其字面字符(如大多数引号语法中一样)。
    • 在短语内部,反斜杠 \ 可以用来转义关闭引号字符(独立于任何标记分隔符)
    • 双反斜杠\\可以用来明确表示引号内的反斜杠。
    • 反斜杠后跟任何其他字符都按原样处理。
    • 第一个引号前的减号-表示该短语为反转。
    • 未闭合的短语将被忽略,以开引号的部分被视为一个单词,之后继续正常解析。
  • 键值对由一个关键字和一个可选引号的值组成,通过冒号:分隔。
    • 关键字可以包含任何字母数字(Unicode字母或数字)字符以及-_.。它只能以字母数字开头。
    • 有效的关键字是实现定义的。
    • 关键字前的减号-将键值对标记为反转。
  • 前缀值是带有单个非字母数字字符的前缀的可选引号值。
    • 有效的前缀是实现定义的。
    • 前缀值被解析为与键值对相同的同一数据结构。
    • 前缀前的减号-将前缀值标记为反转。
  • 可选引号意味着
    • 一个文本字面量,在下一个标记分隔符处结束,就像一个单词。
    • 根据短语相同的引号规则引用的文本(但开始于标记分隔符之后),支持额外的分号引号对;;

该语法的目标是

  • 对使用过其他搜索引擎中此类语法的任何人来说都很熟悉。
  • 即使使用不当,也不会因语法错误而出现容错。
  • 将错误消息等粘贴到搜索字段中不应触发任何搜索语法。
  • 引号必须能够可靠地编码任何字符序列,而不会妨碍更随意的使用。

该名称由询问最重要类型问题的单词和宇宙中最丰富的化学元素组成,碰巧也是寻求答案的生物体中非常重要的组成部分 :D。

依赖关系

~285KB