A simple API to scan and tokenize text for the purpose of structured language processing.
Project description
nr.parsing.core
The nr.parsing.core
package provides a simple API to scan and tokenize text for the purpose of
structured langauge processing.
Example
from nr.parsing.core import RuleSet, Tokenizer, rules
ruleset = RuleSet()
ruleset.rule('number', rules.regex_extract(r'\-?(0|[1-9]\d*)', 0))
ruleset.rule('operator', rules.regex_extract(r'[\-\+]', 0))
ruleset.rule('whitespace', rules.regex(r'\s+'), skip=True)
def calculate(expr: str) -> int:
tokenizer = Tokenizer(ruleset, expr)
result = 0
sign: t.Optional[int] = 1
while tokenizer:
if tokenizer.current.type != 'number':
raise ValueError(f'unexpected token {tokenizer.current}')
assert sign is not None
result += sign * int(tokenizer.current.value)
tokenizer.next()
if tokenizer.current.type == 'operator':
sign = -1 if tokenizer.current.value == '-' else 1
tokenizer.next()
else:
sign = None
if sign is not None:
raise ValueError(f'unexpected trailing operator')
return result
assert calculate('3 + 5 - 1') == 7
Copyright © 2020 Niklas Rosenstein
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
nr.parsing.core-2.0.2.tar.gz
(11.7 kB
view details)
Built Distribution
File details
Details for the file nr.parsing.core-2.0.2.tar.gz
.
File metadata
- Download URL: nr.parsing.core-2.0.2.tar.gz
- Upload date:
- Size: 11.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a794e8f471c7092e265886e422c88c0c29e72ee6ca6b2b037b92c675860bd29a |
|
MD5 | 7fd7e0dab2272c456f88d9a867bafc73 |
|
BLAKE2b-256 | f7f728a9432ce75a4f22435290fd923b2c7e21aedd72dbe557333820296f8163 |
File details
Details for the file nr.parsing.core-2.0.2-py3-none-any.whl
.
File metadata
- Download URL: nr.parsing.core-2.0.2-py3-none-any.whl
- Upload date:
- Size: 12.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6ad440b0b87a50e58450a890a26ed4e3b2052f387f4dd64784f52f071cf90f32 |
|
MD5 | e4282dd1b1b4f44d58322388102b8eb0 |
|
BLAKE2b-256 | dc1390794fc36af8714febd2441f41296c09b0ff5a68548b6f349cfe06052465 |