Skip to main content

Recursive atomic decomposition of CJK characters with 9-grid 2-digit spatial encoding. 将汉字递归拆解为原子部件,并在 9 宫格 2 位数字空间编码中标记每个组件的位置。

Project description

cjk-semantic-split


中文简介

cjk-semantic-split 是一个 Python 库,用于将任意 CJK 统一表意文字递归拆分为原子部件,并使用 9 宫格 2 位数字空间编码标记每个组件的位置。

核心特性

  • 递归拆解:例如 踩 → 足 + 采 → 爪 + 木,中间非叶节点(如 )完整保留
  • 位置编码:每个组件的 2 位数字代号(00/10/20/30/40 四个基本方位 + 50/60/70/80 四个角方位 + 14/16/34/36 四分拆壁 + 90–99 包围框)
  • 组合算子 :父子位置按空间几何合成(详见 docs/component-position-encoding.md
  • 多重数据源:内置四级 — Unihan kIDS / wikimedia Commons / 下一层采集 / 手工修补
  • 零运行时依赖:纯 Python

主要 API

  • decompose(text) → 字符串(默认 JSON 输出)
  • read_structure(text)list[DecompositionTree],保留完整嵌套层级(包含中间非叶节点)
  • python -m chinese_decompose <字符> → 命令行
from chinese_decompose import read_structure

trees = read_structure("踩")
# trees[0].atoms     == ('足', '爪', '木')
# trees[0].positions == (30, 60, 80)
# 采 作为中间节点保留在 children[1] 中

详细算法参见 docs/decomposition-logic.md;完整位置编码表参见 docs/component-position-encoding.md


Recursive atomic decomposition of CJK characters with 9-grid spatial position encoding.

pip install cjk-semantic-split
from chinese_decompose import decompose

decompose("踩")
# '踩 [30]:足 [60]:爪 [80]:木'

decompose("囚")
# '囚 [90]:囗 [0]:人'

decompose("踩好", as_tree=True)
# [DecompositionTree('踩'), DecompositionTree('好')]

# Read the full structural decomposition (preserves intermediate nodes
# like 采 inside 踩; each tree node carries its 2-digit position code).
from chinese_decompose import read_structure
trees = read_structure("踩")
trees[0].atoms     # ('足', '爪', '木')
trees[0].positions # (30, 60, 80)
trees[0].children[1].char  # '采'  (intermediate node preserved!)
trees[0].children[1].position  # 40

Documentation

  • Component Position Encoding — full position-code reference (00/10/20/30/40, corners, 4-cell strips, surrounds) and the composition operator.
  • Decomposition Logic — algorithm walkthrough, data flow, worked example 踩 → 足 + 采 → 爪 + 木.

Position Encoding

Every component sits at a 2-digit position code: cardinals (10/20/30/40), single-cell corners (50/60/70/80), 4-cell layout strips (14/16/34/36), or surround envelopes (9099). See the design spec for full details.

CLI

python -m chinese_decompose                   # JSON output (default)
python -m chinese_decompose  --format dsl    # DSL string
python -m chinese_decompose  --format tree   # repr() of nested trees
python -m chinese_decompose --self-test         # coverage report

Data Sources

Decomposition data is bundled for offline use. Coverage extends across four tiers:

  • Tier 1 (Unihan kIDS): ~21k chars
  • Tier 2 (wikimedia Commons): ~22k chars
  • Tier 3 (next-layer harvest): ~80k chars
  • Tier 4 (manual patches): dispute-case overrides

Last-wins resolution: patches > l3 > l2 > l1.

Configuration

from chinese_decompose import set_primitives

set_primitives({"木", "火", "水", ...})  # process-local override

License

MIT — see LICENSE.

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

cjk_semantic_split-0.1.4.tar.gz (591.8 kB view details)

Uploaded Source

Built Distribution

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

cjk_semantic_split-0.1.4-py3-none-any.whl (558.7 kB view details)

Uploaded Python 3

File details

Details for the file cjk_semantic_split-0.1.4.tar.gz.

File metadata

  • Download URL: cjk_semantic_split-0.1.4.tar.gz
  • Upload date:
  • Size: 591.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for cjk_semantic_split-0.1.4.tar.gz
Algorithm Hash digest
SHA256 1b8af235950af23e790b91e742853aada5b1b1a60c6160f6e38b6dda44c61a98
MD5 2dd5309ff39a03e8dd9dfe101a94a3ad
BLAKE2b-256 14e27c3360e340ac70a1a492d2824b349623cc9a29c1278b153749208f68c7f4

See more details on using hashes here.

File details

Details for the file cjk_semantic_split-0.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for cjk_semantic_split-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 603cf3812912049939afc072ccf0d166e4903f97a2f8ca930a7b2e9c319e3c96
MD5 b7a36ca046cb1a2c7ca1b08bccf60615
BLAKE2b-256 86f97551ea4e970d5c826a870fa15d961940d8b41ebd0e577f8ed1bd02e1b73a

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