sentence-struct
Analyze text into a learner-friendly structure:
document → sentences[] → { tokens[], chunks[] }
Chunks are siblings of tokens and reference them via tokenIndices (not nested).
Japanese (ja) via GiNza / Sudachi (furigana + POS coloring).
Other languages tokenize with transparent posGroup/typeGroup "_" (one
chunk per token). Some also fill reading:
| Lang | Tokenizer | reading |
|---|---|---|
en |
spaCy en_core_web_sm |
IPA (/…/; POS only for homographs) |
ko |
Kiwi | Revised Romanization (koroman) |
th |
PyThaiNLP newmm |
romanize |
zh |
jieba | pinyin (tone marks) |
de fr it es tr ru ar |
spaCy blank |
— (tokenize only) |
Install
pip install sentence-struct
# or
uv add sentence-struct
English IPA needs the spaCy small model:
python -m spacy download en_core_web_sm
(Local uv: uv sync --group en-model.)
Optional larger Sudachi dictionary:
pip install "sentence-struct[ja-full]"
Requires Python ≥ 3.11. First install pulls spaCy / GiNza / Sudachi (hundreds of MB).
Usage
from sentence_struct import analyze
doc = analyze("秋が近づくにつれ、朝晩の涼しさが心地よい。", language="ja")
print(doc["sentence_count"], doc["token_count"], doc["chunk_count"])
print(doc["sentences"][0]["tokens"][0])
print(doc["sentences"][0]["chunks"][0])
en = analyze("I refuse the refuse.", language="en")
ko = analyze("안녕하세요", language="ko")
th = analyze("สวัสดีครับ", language="th")
zh = analyze("你好,世界。", language="zh")
CLI:
sentence-struct "秋が近づく。"
sentence-struct -f essay.txt -o out.json
Schema (abbreviated)
{
"language": "ja",
"text": "...",
"sentences": [
{
"index": 1,
"text": "...",
"tokens": [
{
"text": "散歩する",
"posGroup": "動詞",
"reading": "さんぽする",
"segments": [
{"text": "散歩", "reading": "さんぽ"},
{"text": "する"}
]
}
],
"chunks": [
{"type": "NP", "typeGroup": "PHRASE", "tokenIndices": [0, 1], "text": "秋が", "role": "nsubj"}
]
}
]
}
Develop (uv)
uv sync
uv run pytest -m "not integration"
uv run pytest -m integration
uv run sentence-struct "今日は良い天気です。"
Release
See RELEASING.md. Tag vX.Y.Z → GitHub Actions builds with uv and publishes to PyPI via Trusted Publishing.
License
MIT
Metadata
Release files for sentence-struct 0.7.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 | |
|---|---|---|---|
| sentence_struct-0.7.0.tar.gz | 3.5 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sentence_struct-0.7.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 3.5 MB
Release files / sentence_struct-0.7.0.tar.gz
| Download URL | sentence_struct-0.7.0.tar.gz |
|---|---|
| Size | 3.5 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5c9d39630347be2c8210c5c8d37a728e8e733115d2509e0722a1b7cd5bd9c8f9
|
|
BLAKE2b-256 checksum How to use checksums |
bc47312bd6aeb0fa395e7a72e2aab7ff402b6127f3ac090e25378b5a57dd9a77
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / sentence_struct-0.7.0-py3-none-any.whl
| Download URL | sentence_struct-0.7.0-py3-none-any.whl |
|---|---|
| Size | 31.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
340ff7a8fa21ef2e1a25e33e177cf729b0c33db4f0df01801a077f64b6f9a654
|
|
BLAKE2b-256 checksum How to use checksums |
c4fcd998b054863f0ad227cc14ad288d0a2845f500b9f0cad4d1096dfa8041db
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|