Skip to main content

A small boolean + positional query engine with a proper parser.

Project description

LexiQuery

🌐 Language / 语言 · English | 中文


English Version

✨ Highlights

  • 🔀 Boolean logic: Parentheses > NOT > (AND/OR/XOR evaluated left-to-right) for predictable chains.
  • ⛓️ Comma chains: alpha, foo BEF/1 bar evaluates each segment like implicit AND.
  • 📍 Positional windows: BEF, AFT, NEAR accept /n, /m-n, or /*, and can chain IN(...) (all targets) / INOF(...) (any target).
  • 📏 Length guards: LEN/3-10 for token counts, SIZE/32-128 for byte ranges.
  • 🎯 Match helpers: ONLY, LIKE, STR, END cover set equality, fuzzy presence, and start/end checks.
  • 🃏 Wildcards: foo* or foo * match every token sharing the prefix.
  • 📚 Docs: Detailed syntax in LANGUAGE_MANUAL.md.

🚀 Quickstart

from lexiquery import LexiQueryExpression

expr = LexiQueryExpression(
    "(foo XOR bar) AND LEN/3-10 AND foo BEF/2 IN(bar baz)"
)

expr.query("foo baz qux")      # True
expr.query("bar foo baz qux")  # False
from lexiquery import LexiQuery

engine = LexiQuery("foo bar baz qux")
assert engine.query("foo BEF/2 bar")

📦 Install

python -m pip install lexiquery

🧪 Tests

PYTHONPATH=src pytest

🧩 Syntax Cheat Sheet

Category Example
Boolean (foo OR bar) AND NOT baz
Positional alpha BEF/2-4 beta, foo AFT/* bar, foo NEAR/3 beta
Positional + Sets foo BEF/3 IN(bar baz), foo BEF/* INOF(alpha beta)
Length LEN/5-10 AND foo BEF/2 bar, NOT SIZE/32
Match LIKE foo bar, ONLY foo bar, STR hello world, END goodbye
Wildcard foo* NEAR/1 bar, NOT app*

More samples in tests/test_core.py & tests/test_new_ops.py.

📄 License

MIT License.


中文版本

✨ 功能亮点

  • 🔀 布尔优先级:括号 > NOT > (AND/OR/XOR 左到右计算),更贴近自然阅读。
  • ⛓️ 多段表达式:使用逗号分段,如 alpha, foo BEF/1 bar,效果等同连续 AND
  • 📍 位置窗口BEFAFTNEAR 支持 /n/m-n/*,还能链式追加 IN(...)(全部满足)或 INOF(...)(任一满足)。
  • 📏 长度约束LEN/3-10 控制词数,SIZE/32-128 控制字节长度。
  • 🎯 匹配运算ONLYLIKESTREND 覆盖集合判断与首尾匹配。
  • 🃏 通配符foo* / foo * 匹配所有以 foo 开头的 token。
  • 📚 文档:详尽语法见 LANGUAGE_MANUAL.md

🚀 快速体验

from lexiquery import LexiQueryExpression

expr = LexiQueryExpression(
    "(foo XOR bar) AND LEN/3-10 AND foo BEF/2 IN(bar baz)"
)

expr.query("foo baz qux")      # True
expr.query("bar foo baz qux")  # False
from lexiquery import LexiQuery

engine = LexiQuery("foo bar baz qux")
assert engine.query("foo BEF/2 bar")

📦 安装

python -m pip install lexiquery

🧪 运行测试

PYTHONPATH=. pytest

🧩 语法速查

分类 示例
布尔 (foo OR bar) AND NOT baz
位置 alpha BEF/2-4 betafoo AFT/* barfoo NEAR/3 beta
位置 + 集合 foo BEF/3 IN(bar baz)foo BEF/* INOF(alpha beta)
长度 LEN/5-10 AND foo BEF/2 barNOT SIZE/32
匹配 LIKE foo barONLY foo barSTR hello worldEND goodbye
通配 foo* NEAR/1 barNOT app*

更多示例请参考 tests/test_core.pytests/test_new_ops.py

📄 许可

MIT 许可证。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lexiquery-0.2.1.tar.gz (12.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lexiquery-0.2.1-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file lexiquery-0.2.1.tar.gz.

File metadata

  • Download URL: lexiquery-0.2.1.tar.gz
  • Upload date:
  • Size: 12.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.12

File hashes

Hashes for lexiquery-0.2.1.tar.gz
Algorithm Hash digest
SHA256 beda68c938f7ab646bc7dbf0cefb7aa82dd06cb72307e1528f4b710b431e95f4
MD5 f8eeb466c77a78ee426f97753341bd85
BLAKE2b-256 a073f7ed150090e20cf9eb340d6608b9f263f1b349d24a14e2d4d57b10e78471

See more details on using hashes here.

File details

Details for the file lexiquery-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: lexiquery-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 9.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.12

File hashes

Hashes for lexiquery-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 43bf1ebc503c3dd84b728ffafb7e53bddeaf4a2ccf56a3a438a78e12221e7c37
MD5 5821dbf7edbd06cf1b6ece3cacb64b83
BLAKE2b-256 16b41aa1201e66fc587584b0aad14bb96e2697c7e22363adbf3cf3ec1f2084f4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page