Skip to main content

TS POSTagger

TS POSTagger is a Turkish part-of-speech tagging library with a hybrid pipeline:

  1. ts-tokenizer produces token boundaries and deterministic token classes.
  2. A bundled spaCy POS model predicts contextual grammatical tags.
  3. A resolver preserves structural token types such as hashtags, mentions, URLs, dates, and punctuation when they are more informative than a generic grammatical label.

The package exposes:

  • a Python API: from ts_postagger import pos
  • a CLI: ts-postagger

Installation

pip install ts-postagger

Requirements:

  • Python >=3.11

The trained model is bundled with the package. No separate download step is required.

Quick Start

from ts_postagger import pos

tokens = pos("Defne'nin heyecanla beklediği #viyana yolculuğu bugün başladı.")

for token in tokens:
    print(token.text, token.pos)

Example output:

Defne'nin   PropN
heyecanla   Adv
beklediği   Adj
#viyana     Hashtag
yolculuğu   Noun
bugün       Adv
başladı     Verb
.           Punc

Python API

The main entrypoint is pos(text: str) -> list[TSToken].

Each returned TSToken has these fields:

Field Description
text Original surface form
lower Turkish-aware lowercase form
token_type Deterministic token class from ts-tokenizer
tag Contextual grammatical prediction from the model
pos Final output POS label

pos is the field you should use as the final annotation.

Minimal example

from ts_postagger import pos

text = pos("Bugün yeni ve güzel bir gün!")

for token in text:
    print(token.pos)

Convert results to dictionaries

TSToken is a dataclass, so standard dataclass helpers work:

from dataclasses import asdict

from ts_postagger import pos

tokens = pos("#YeniBilgi yayımlandı.")
rows = [asdict(token) for token in tokens]

for row in rows:
    print(row)

Example dictionary:

{
    "text": "#YeniBilgi",
    "lower": "#yenibilgi",
    "token_type": "Hashtag",
    "tag": "Noun",
    "pos": "Hashtag",
}

Empty input

from ts_postagger import pos

print(pos(""))

Output:

[]

Why token_type, tag, and pos are different

The library intentionally keeps multiple annotation layers.

For lexical tokens, the final output usually follows the POS model:

çalışmalar  Valid_Word  Noun  Noun
yayımlandı  Valid_Word  Verb  Verb

For structural or social-media tokens, the final output stays deterministic even when the model predicts a regular grammatical tag:

#YeniBilgi  Hashtag  Noun  Hashtag
@yeni  Mention  Noun  Mention
19.10.2026  Date  Num  Date
https://example.org  URL  Noun  URL

Meaning of each layer:

  • token_type: deterministic label from the tokenizer
  • tag: raw contextual prediction from the POS model
  • pos: final POS output of TS POSTagger

Turkish-aware lowercasing

The lower field uses Turkish-aware lowercasing from ts-tokenizer.

from ts_postagger import pos

tokens = pos("IĞDIR İSTANBUL")

for token in tokens:
    print(token.text, token.lower)

Output:

IĞDIR  ığdır
İSTANBUL  istanbul

lower is a lowercase surface form. It is not a lemma.

CLI

Installing the package also installs the ts-postagger command.

The CLI accepts either:

  • a single positional text argument, or
  • standard input

Default output format:

TOKEN<TAB>POS

Tag inline text

ts-postagger "Bugün yeni ve güzel bir gün!"

Example output:

Bugün	Adv
yeni	Adj
ve	Conj
güzel	Adj
bir	Det
gün	Noun
!	Punc

Lowercase only

ts-postagger -low "Bugün yeni ve güzel bir gün!"

Example output:

bugün
yeni
ve
güzel
bir
gün
!

Raw model tag

ts-postagger -tag "Bugün yeni ve güzel bir gün!"

Example output:

Bugün	Adv
yeni	Adj
ve	Conj
güzel	Adj
bir	Det
gün	Noun
!	Punc

Full output

ts-postagger --full "Bugün yeni ve güzel bir gün!"

Example output:

Bugün	bugün	Adv
yeni	yeni	Adj
ve	ve	Conj
güzel	güzel	Adj
bir	bir	Det
gün	gün	Noun
!	!	Punc

Columns:

TOKEN<TAB>LOWER<TAB>POS

Read from stdin

echo "Bugün yeni ve güzel bir gün!" | ts-postagger

Version

ts-postagger -V

Help

ts-postagger --help

Notes

  • The package name for installation is ts-postagger.
  • The Python import package is ts_postagger.
  • The CLI command is ts-postagger.

Citation

If you use TS POSTagger in academic work, please cite the associated doctoral dissertation:

Sezer, T. (2025). Dizilerden birimlere: Bilişimsel dilbilim çerçevesinde bir birimlendirici tasarımı [Doctoral dissertation, Hacettepe University].

License

This project is licensed under the MIT License.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ts_postagger-0.1.0.tar.gz (85.7 MB view details)

Uploaded Source

Built Distribution

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

ts_postagger-0.1.0-py3-none-any.whl (85.7 MB view details)

Uploaded Python 3

File details

Details for the file ts_postagger-0.1.0.tar.gz.

File metadata

  • Download URL: ts_postagger-0.1.0.tar.gz
  • Upload date:
  • Size: 85.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.5

File hashes

Hashes for ts_postagger-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d26366115cbb72c8672b8098e2ba19fad9e77c31e6a4dc4000cdb735050ec878
MD5 01b90acb998baa5e98adb088fce62b63
BLAKE2b-256 408798fe951bc6c5a624965a616c83ed0119f673e6eadf00bc00a26d3242d18d

See more details on using hashes here.

File details

Details for the file ts_postagger-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: ts_postagger-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 85.7 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.5

File hashes

Hashes for ts_postagger-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 25d937719beb211c5d550888863804e273b7ce41d0a9679aa7092eccec9cf989
MD5 c7313fbe9c62552cc5343071a77245df
BLAKE2b-256 e039f358c09e09cd5d042fda313fe4a42a20175fac093c61eb9c301b90d28838

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page