HansChunks
English | 中文
High-performance Chinese document extractor and semantic chunker built in Rust with Python bindings.
Features
- Intelligent Text Chunking: Splits Chinese documents into semantically meaningful chunks while preserving context
- Element Recognition: Identifies different types of document elements (headings, paragraphs, lists, code blocks, etc.)
- Semantic Boundary Preservation: Avoids breaking text at poor split points like colons
- Heading Merging: Option to keep headings with their content
- Customizable Configuration: Adjust chunk sizes and element weights to optimize for your specific use case
- High Performance: Implemented in Rust with optimized algorithms for speed and efficiency
- Python Bindings: Easy to use from Python with a simple, intuitive API
- Advanced Algorithm: Uses dynamic programming with binary search optimization to find optimal split points, ensuring both efficiency and semantic coherence
- Context-Aware Processing: Considers document structure, element types, and semantic connections when making chunking decisions
Installation
pip install hanschunks
Quick Start
from hanschunks.hanschunks import TextChunker, ChunkConfig
# Create a chunker with default settings
chunker = TextChunker()
# Process a document
text = """第一章 引言
随着人工智能技术的快速发展,自然语言处理已经成为计算机科学中最重要的研究领域之一。
文本分块作为信息检索和知识管理的基础技术,其重要性日益凸显。
"""
chunks = chunker.chunk(text)
for i, chunk in enumerate(chunks, 1):
print(f"Chunk {i}: {chunk[:50]}...")
Custom Configuration
# Create custom configuration
config = ChunkConfig()
config.min_size = 160 # Minimum chunk size in characters
config.max_size = 320 # Maximum chunk size in characters
config.merge_headings = True # Merge headings with following content
config.preserve_boundaries = True # Preserve semantic boundaries
# Set element weights for chunking decisions
config.set_element_weights(
heading_base=100.0, # Base weight for headings
heading_level_penalty=10.0, # Penalty per heading level
code_block=80.0, # Weight for code blocks
table=80.0, # Weight for tables
list_item=60.0, # Weight for list items
paragraph=40.0, # Weight for paragraphs
quote=30.0, # Weight for block quotes
empty=10.0, # Weight for empty lines
footer=0.0 # Weight for footer elements
)
# Create chunker with custom config
chunker = TextChunker(config)
Algorithm
HansChunks uses an optimized dynamic programming algorithm to find the best possible split points in a document:
- Document is first parsed into semantic elements (headings, paragraphs, etc.)
- Each element is assigned a weight based on its type
- Dynamic programming with binary search optimization finds optimal split points
- Strong semantic connections are preserved (e.g., avoiding splits after colons)
- The result is a set of chunks that balance size constraints with semantic coherence
Development
Prerequisites
- Rust toolchain (1.75+)
- Python 3.12+
- Maturin (for building Python bindings)
Build develop package
uv run maturin develop --release
uv run example/demo.py
Building from source
uv run maturin build --release --out dist
uv add dist/hanschunks-*.whl
Running tests
cargo test
License
Metadata
Release files for hanschunks 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| hanschunks-0.1.0.tar.gz | 31.4 kB | Without provenance | Details for hanschunks-0.1.0.tar.gz |
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| hanschunks-0.1.0-cp312-abi3-win_amd64.whl | CPython 3.12 | abi3 | Windows x86-64 | Details for hanschunks-0.1.0-cp312-abi3-win_amd64.whl |
| hanschunks-0.1.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.12 | abi3 | Linux glibc 2.17+ x86-64 | Details for hanschunks-0.1.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
| hanschunks-0.1.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.12 | abi3 | Linux glibc 2.17+ ARM64 | Details for hanschunks-0.1.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
| hanschunks-0.1.0-cp312-abi3-macosx_11_0_arm64.whl | CPython 3.12 | abi3 | macOS 11.0+ ARM64 | Details for hanschunks-0.1.0-cp312-abi3-macosx_11_0_arm64.whl |
| hanschunks-0.1.0-cp312-abi3-macosx_10_12_x86_64.whl | CPython 3.12 | abi3 | macOS 10.12+ x86-64 | Details for hanschunks-0.1.0-cp312-abi3-macosx_10_12_x86_64.whl |
Total release size: 13.3 MB
Release files / hanschunks-0.1.0.tar.gz
| Download URL | hanschunks-0.1.0.tar.gz |
|---|---|
| Size | 31.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
15f2c9eefe9720418868395f1976a72d4679eb535bacf37babe3afa0cbfc0d2c
|
|
BLAKE2b-256 checksum How to use checksums |
036975918709cd8fd10d03c88cb126100f99423915421793ac811e9b1971685e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.8.6
|
Release files / hanschunks-0.1.0-cp312-abi3-win_amd64.whl
| Download URL | hanschunks-0.1.0-cp312-abi3-win_amd64.whl |
|---|---|
| Size | 2.6 MB |
| Tags | CPython 3.12 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
a36a4668cff36cf1177a369caf9e7ec468ea44a34b34cb403bf9dafda97b6538
|
|
BLAKE2b-256 checksum How to use checksums |
deeb40ebe2e9aeef58032452fdae23780396ab2518162a9f7de08551a69a4af1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.8.6
|
Release files / hanschunks-0.1.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | hanschunks-0.1.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.7 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
a73732279bbe95a4d5bebeea6794d1a67b8e6233490b705661604667dc492cfd
|
|
BLAKE2b-256 checksum How to use checksums |
d1be69268a5b3bddf5d71025ea37445b8ef4cf09f2279851a17556caa3429a9b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.8.6
|
Release files / hanschunks-0.1.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | hanschunks-0.1.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 2.7 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
e0aa5c808383136b4fb57605fd39653d56e4441e03bbc882d57a80cab06663b7
|
|
BLAKE2b-256 checksum How to use checksums |
23af08956c32074288dccfae49849a6049d23e76a06098f7942c43f58ef5dfa8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.8.6
|
Release files / hanschunks-0.1.0-cp312-abi3-macosx_11_0_arm64.whl
| Download URL | hanschunks-0.1.0-cp312-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.6 MB |
| Tags | CPython 3.12 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
eddde19de56be270d6966a7c6bf87eebea27ded464155943dce4a288c16f699c
|
|
BLAKE2b-256 checksum How to use checksums |
d08698b36289be3dba2152e738c42839ec63bc449ad9b389b49a24dadaf9873f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.8.6
|
Release files / hanschunks-0.1.0-cp312-abi3-macosx_10_12_x86_64.whl
| Download URL | hanschunks-0.1.0-cp312-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 2.7 MB |
| Tags | CPython 3.12 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
3a24376d9661201fbb74b8ba8d673a8afa8256960f67b581060777ad048a01ae
|
|
BLAKE2b-256 checksum How to use checksums |
636bd9d32ab893e8cebfd3b46567835c9eb5a8082f7e126cf126f0e7f83a6329
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.8.6
|
Security for hanschunks 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.