Skip to main content

Polars expression plugin and Python extension for tokmat

Project description

tokmat-polars

Standalone Polars integration crate for tokmat.

This crate depends on the published tokmat package from crates.io and is intended to provide the dataframe-facing plugin layer around the core parser.

Rust usage

tokmat-polars can also be used directly from Rust as a normal library crate. That path is useful when you want to build Series values in Rust and reuse the same tokenization and extraction logic without going through Python.

use polars::prelude::*;
use tokmat_polars::TokmatPolars;

let plugin = TokmatPolars::from_model_path("tests/fixtures/model_1")?;
let input = Series::new("address".into(), ["123 MAIN ST"]);
let tokenized = plugin.tokenize_series(&input)?;
let extracted = plugin.extract_series(
    &tokenized,
    "<<CIVIC#>> <<STREET@+>> <<TYPE::STREETTYPE>>",
)?;
# let _ = extracted;
# Ok::<(), PolarsError>(())

Python packaging

tokmat-polars can also be built and published as a Python package via maturin. The Rust crate exposes a PyO3 extension module named tokmat_polars, and Polars can load the compiled plugin functions from that module path. Python support starts at 3.12.

Typical local workflow:

python -m venv .venv
. .venv/bin/activate
pip install -U pip maturin pytest polars
maturin develop
pytest -q

Release workflow

PyPI releases are published from GitHub Actions using Trusted Publishing. The release workflow builds wheels and an sdist on tag pushes that match v*, then uploads them through pypa/gh-action-pypi-publish. The same tag also publishes the Rust crate to crates.io using a CARGO_REGISTRY_TOKEN GitHub secret.

Release steps:

git tag v0.3.0
git push origin v0.3.0

Before the first release, configure this repository as a Trusted Publisher in the PyPI project settings and set the workflow environment to pypi if PyPI prompts for it. For crates.io, create an API token and store it in GitHub as CARGO_REGISTRY_TOKEN.

Python usage

Use the wrapper functions — tokenize, extract, encode_class_ids. They register the plugin expressions with is_elementwise=True, so the Polars engine can stream them and parallelize across chunks on its own thread pool:

import polars as pl
import tokmat_polars as tk

MODEL = "/path/to/model"
PATTERN = "<<CIVIC#>> <<STREET@+>> <<TYPE::STREETTYPE>>"

lf = pl.LazyFrame({"address": ["ATTN 123 MAIN ST"]})

# tokenize -> struct(raw_value, tokens, types, classes); unnest for flat columns
tok = lf.select(tk.tokenize(pl.col("address"), model_path=MODEL).alias("t")).unnest("t")

# extract -> struct(capture fields..., complement)
parsed = lf.select(
    tk.extract(pl.col("address"), model_path=MODEL, pattern=PATTERN, mode="any").alias("p")
).unnest("p")

Use the streaming engine for large data

Because the expressions are elementwise, the streaming engine parallelizes them and keeps memory bounded. On a 1M-row benchmark (benchmarks/bench_polars_engine.py), extraction is ~7× faster under streaming and uses near-zero extra memory:

parsed.collect(engine="streaming")   # parallel + bounded memory
1M rows in-memory streaming
tokenize 4.7 s, +298 MB 4.3 s, +43 MB
extract 35.6 s 4.9 s, +0 MB

is_elementwise=False (raw register_plugin_function without the flag) forfeits this — streaming can't engage and extraction stays at ~36 s. The wrapper sets the flag for you; prefer it over registering the plugin by hand.

The word definition is also exposed: tk.model_word_definition(path), tk.get_word_definition(), tk.set_word_definition(chars).

Plugin API

tokmat-polars exposes two Polars plugin functions:

  • tokenize_expr
  • extract_expr

tokenize_expr

Required kwargs:

  • model_path

Returns a struct column with:

  • raw_value
  • tokens
  • types
  • classes

extract_expr

Required kwargs:

  • model_path
  • pattern

Optional kwargs:

  • mode

Supported mode values:

  • whole (default)
  • start
  • end
  • any

When extract_expr receives a tokenized struct column, it uses the embedded raw_value field when computing complements. This preserves any-mode behavior and keeps complement output aligned with the original text rather than with a placeholder reconstruction.

Example:

parsed = pl.DataFrame({"address": ["ATTN 123 MAIN ST"]}).select(
    pl.plugins.register_plugin_function(
        plugin_path=plugin_path,
        function_name="extract_expr",
        args=pl.col("address"),
        kwargs={
            "model_path": "/path/to/model",
            "pattern": "<<CIVIC#>> <<STREET@+>> <<TYPE::STREETTYPE>>",
            "mode": "any",
        },
        use_abs_path=True,
    ).alias("parsed")
).unnest("parsed")

This returns capture fields plus a complement column. In the example above, the complement contains "ATTN " because the TEL pattern matches only the embedded address portion.

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

tokmat_polars-0.3.3.tar.gz (64.1 kB view details)

Uploaded Source

Built Distributions

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

tokmat_polars-0.3.3-cp313-cp313-win_amd64.whl (4.5 MB view details)

Uploaded CPython 3.13Windows x86-64

tokmat_polars-0.3.3-cp313-cp313-manylinux_2_34_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

tokmat_polars-0.3.3-cp313-cp313-macosx_11_0_arm64.whl (3.7 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

tokmat_polars-0.3.3-cp312-cp312-win_amd64.whl (4.5 MB view details)

Uploaded CPython 3.12Windows x86-64

tokmat_polars-0.3.3-cp312-cp312-manylinux_2_34_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

tokmat_polars-0.3.3-cp312-cp312-macosx_11_0_arm64.whl (3.7 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

File details

Details for the file tokmat_polars-0.3.3.tar.gz.

File metadata

  • Download URL: tokmat_polars-0.3.3.tar.gz
  • Upload date:
  • Size: 64.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tokmat_polars-0.3.3.tar.gz
Algorithm Hash digest
SHA256 74e71d1a36f9b994fb1335c0e230c63b65f97b9dbbfd21b34b364cdbac80b42a
MD5 8aad4454694251633f37e47adfe9037f
BLAKE2b-256 703d95caca6cc804b64ccc4dd42ecf34c79adc16f7197007f80576f540356472

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokmat_polars-0.3.3.tar.gz:

Publisher: release.yml on Jrakru/tokmat-polars

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tokmat_polars-0.3.3-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for tokmat_polars-0.3.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 95f1b044cae622abe59259b6418465b4a02d4d07ebc9c2c7b402811d23c7fe42
MD5 8b1446cc7ba364c7c0e9701a81783203
BLAKE2b-256 1b21274f4f82f15db569c7c9321bb1e6949d2fdece98baaa2360b8229ee0d3e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokmat_polars-0.3.3-cp313-cp313-win_amd64.whl:

Publisher: release.yml on Jrakru/tokmat-polars

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tokmat_polars-0.3.3-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for tokmat_polars-0.3.3-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 effb377633afa2d0edf6903f1b0eefa188412e66b9048471fcb1bc74622b461b
MD5 52d6118bbce92f18a93f5fba4fe50c39
BLAKE2b-256 0c8a876cdada3b025a724c1ac82eae9296a90cf70253399828c0f6419c6095e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokmat_polars-0.3.3-cp313-cp313-manylinux_2_34_x86_64.whl:

Publisher: release.yml on Jrakru/tokmat-polars

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tokmat_polars-0.3.3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tokmat_polars-0.3.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 72a99b7f1515960d51bcd84c4a4249182120cd28a338061aebd93b6d33635541
MD5 f235f8ccc5ceeee90e7871fe43f45dd6
BLAKE2b-256 e923a50c26371fc495f72cdb59bc50610db008d6997835593c4f1259e5de8e7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokmat_polars-0.3.3-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on Jrakru/tokmat-polars

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tokmat_polars-0.3.3-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for tokmat_polars-0.3.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8dd349a7020650740288fd27cd61d5fd1a91342155f6ba803ddcc93a9958cc06
MD5 ca3c72202db214d0278cb9e80b3e8abe
BLAKE2b-256 bf24c6db546b32aff4525c2e28afa2c56cd1f982fff23771774b6a2794338e9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokmat_polars-0.3.3-cp312-cp312-win_amd64.whl:

Publisher: release.yml on Jrakru/tokmat-polars

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tokmat_polars-0.3.3-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for tokmat_polars-0.3.3-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 c688ba979d49b35147b002e2e4913b127ef0ba314759fc87dbce31454d6dc165
MD5 ec8598bcbedb1052e5f01262b734d5bb
BLAKE2b-256 2b2beae3df1674e475050b21f3c9e389e5d3ae6a7f7b7d3500e657d0a005f822

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokmat_polars-0.3.3-cp312-cp312-manylinux_2_34_x86_64.whl:

Publisher: release.yml on Jrakru/tokmat-polars

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tokmat_polars-0.3.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tokmat_polars-0.3.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 444b425503722a610095d704cc77fab30c9750416ca81d5c3597d87292f2c9a9
MD5 042b0a81ac5276b23a6aabb131b13a16
BLAKE2b-256 687bd14ae46b3706f5d3f69a0dab0c24f2e7855f4035540fa092716d82c9b6f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokmat_polars-0.3.3-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on Jrakru/tokmat-polars

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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