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.0.tar.gz (61.8 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.0-cp313-cp313-win_amd64.whl (4.5 MB view details)

Uploaded CPython 3.13Windows x86-64

tokmat_polars-0.3.0-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.0-cp313-cp313-macosx_11_0_arm64.whl (3.7 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

tokmat_polars-0.3.0-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.0-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.0.tar.gz.

File metadata

  • Download URL: tokmat_polars-0.3.0.tar.gz
  • Upload date:
  • Size: 61.8 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.0.tar.gz
Algorithm Hash digest
SHA256 7b10f07e9f1232f4f659dc4973e4185f96a936378faf3f4cee520fb123d3840e
MD5 745726081402cf0095214b70ed87590f
BLAKE2b-256 acd6b6da81f09d58aaddd63fd547d81800e7ef740d087e5384555e7e2a6802fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokmat_polars-0.3.0.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.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for tokmat_polars-0.3.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 de3cf3a37597c3d2a6a29a2e0d57026754f011a557e9489f4653c258cb7d87a4
MD5 5b40a0417254ada915ee98d1d61322d8
BLAKE2b-256 443cbe89c0a0d2a8efc308727a9ae4298201b8046979896aae5226b6b2c11fd6

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokmat_polars-0.3.0-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.0-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for tokmat_polars-0.3.0-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 a37448ee19d367ade39dbc48e36c50d7c942105d55d307c1afcdf37954870b1d
MD5 5af8736469f29ee4e92a472fa01d0fec
BLAKE2b-256 4726c8bef0e6474d0f19f6c7faf4d221e1fcd66871d81478375e845f17e83520

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokmat_polars-0.3.0-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.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tokmat_polars-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7c07dec51788a9a62d3e66df236be9a5b990225ec91c045db822c588c57ee831
MD5 b631242bbd96a591150a9490f13343d7
BLAKE2b-256 4619ad1d1098716fac39a2e990aad2b9599b9cf35c3881d7f20d352578ec96a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokmat_polars-0.3.0-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.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for tokmat_polars-0.3.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 25089ef622d3160c32bd616888a7d8860f790b227778659e502227d43753968f
MD5 48e906501f1578f2511d105d4440716f
BLAKE2b-256 0326c52c5f6fd9c6dfa2d24cbf7b32a3cb9d175653addcaa54a464ac3310013e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokmat_polars-0.3.0-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.0-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for tokmat_polars-0.3.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 f38f015b8404fdad08de2011feda81af5e1431c74506401e8f0d7b7f24aea27d
MD5 9db8068268cc036910ae58747e9362af
BLAKE2b-256 7b2b339f65161562e661c604e22a62f8f51e648ccb7cb4308dda488eeac7503d

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokmat_polars-0.3.0-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.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tokmat_polars-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ca7047ee40917a49a4b88195d486dc9df9b0d64241f77057b3890bd6b6ea7d93
MD5 4abc5880e90287471bfd0acad029833b
BLAKE2b-256 8ea9f2b1d70f25769e9ce177423bbdf29ea30e1f6c3bc473ea6af553140ea432

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokmat_polars-0.3.0-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