Metadata-Version: 2.5
Name: kordai-word-segmentation
Version: 0.1.0
Summary: Low Latency Thai word segmentation
Requires-Python: >=3.10
Requires-Dist: numpy>=1.24
Description-Content-Type: text/markdown

# KordAI Word Segmentation

ไลบรารีสำหรับตัดคำภาษาไทยจาก Python ใช้งานได้ผ่าน API ที่เรียบง่าย และรันโมเดลในเครื่องด้วย NumPy

## ติดตั้ง

```bash
pip install kordai-word-segmentation
```

ต้องใช้ Python 3.10 ขึ้นไป ระบบจะติดตั้ง NumPy ซึ่งเป็น dependency ที่จำเป็นให้อัตโนมัติ ไม่จำเป็นต้องติดตั้ง PyTorch, Transformers หรือ ONNX Runtime เพื่อใช้งาน tokenizer

## เริ่มต้นใช้งาน

```python
from kordai_word_segmentation import get_tokenizer

tokenizer = get_tokenizer()

words = tokenizer("ฉันกินข้าวแล้ว")
print(words)
```

`tokenizer` จะคืนรายการคำในรูปแบบ `list[str]` ตัวอย่างผลลัพธ์อาจมีหน้าตาประมาณนี้ โดยผลจริงขึ้นอยู่กับโมเดลเวอร์ชันที่ใช้งาน:

```python
["ฉัน", "กิน", "ข้าว", "แล้ว"]
```

## ตัดคำหลายข้อความ

ส่งข้อความหลายข้อความเป็น arguments ได้โดยตรง:

```python
results = tokenizer(
    "ภาษาไทย",
    "แมวแมว",
    "วันนี้อากาศดี",
)
```

หรือส่งเป็น `list` หรือ `tuple`:

```python
texts = ["ภาษาไทย", "แมวแมว", "วันนี้อากาศดี"]
results = tokenizer(texts)
```

ทั้งสองวิธีคืนค่าเป็น `list[list[str]]` โดยผลลัพธ์แต่ละรายการจะตรงกับข้อความ input ตามลำดับ

### รูปแบบ input และ output

| การเรียกใช้งาน | ผลลัพธ์ |
| --- | --- |
| `tokenizer("ภาษาไทย")` | `list[str]` — รายการคำของข้อความเดียว |
| `tokenizer("ภาษาไทย", "แมวแมว")` | `list[list[str]]` — ผลของแต่ละข้อความ |
| `tokenizer(["ภาษาไทย", "แมวแมว"])` | `list[list[str]]` — ผลของแต่ละข้อความ |

## ปรับเกณฑ์การตัดคำ

สามารถส่ง `threshold` ในการเรียกแต่ละครั้งได้ ค่าเริ่มต้นคือ `0.5`:

```python
words = tokenizer("ฉันกินข้าวแล้ว", threshold=0.6)
```

ค่า `threshold` ต้องอยู่ระหว่าง `0` ถึง `1` การปรับค่านี้อาจเปลี่ยนผลการตัดคำ ควรทดลองกับข้อความที่ตรงกับลักษณะการใช้งานของคุณ

หากต้องการกำหนดค่าเริ่มต้นสำหรับ tokenizer ให้ระบุตอนเรียก `get_tokenizer()`:

```python
tokenizer = get_tokenizer(threshold=0.5, max_len=512)
```

- `threshold`: เกณฑ์เริ่มต้นสำหรับการตัดคำ ค่าเริ่มต้นคือ `0.5`
- `max_len`: จำนวนตัวอักษรสูงสุดที่ประมวลผลต่อหนึ่งส่วน ต้องไม่เกินความยาวสูงสุดที่โมเดลรองรับ หากไม่ระบุจะใช้ค่าจากโมเดล

## สิ่งที่ควรรู้

- **ประมวลผลในเครื่อง:** หลังติดตั้งแพ็กเกจแล้ว การตัดคำไม่ต้องส่งข้อความไปยัง API ภายนอกหรือใช้อินเทอร์เน็ต
- **โหลดโมเดลซ้ำให้น้อยที่สุด:** `get_tokenizer()` ใช้ tokenizer instance เดิมในการเรียกครั้งถัดไปภายใน process เดียวกัน
- **ข้อความยาว:** ข้อความที่ยาวเกิน `max_len` จะถูกแบ่งประมวลผลเป็นส่วน ๆ ผลบริเวณรอยต่อของส่วนอาจแตกต่างจากการประมวลผลเป็น sequence เดียว
- **อักขระที่ไม่อยู่ใน vocabulary:** หากข้อความมีอักขระที่โมเดลไม่รู้จัก ผลลัพธ์อาจขึ้นอยู่กับการตั้งค่า unknown-token ของโมเดล
- **ความถูกต้อง:** ผลลัพธ์ขึ้นอยู่กับโมเดลและข้อความที่ป้อน ควรตรวจสอบกับข้อมูลของงานจริงก่อนใช้งานในระบบสำคัญ

## API

- `get_tokenizer()` — สร้างหรือรับ tokenizer ที่นำกลับมาใช้ซ้ำได้
- `tokenizer(text)` — ตัดคำหนึ่งข้อความและคืน `list[str]`
- `tokenizer(text1, text2, ...)` — ตัดคำหลายข้อความและคืน `list[list[str]]`
- `tokenizer([text1, text2, ...])` — ตัดคำจากรายการข้อความและคืน `list[list[str]]`
