| |
| import json |
| from fastapi import APIRouter, Response |
| from fastapi.responses import JSONResponse |
| from pythainlp.util import ( |
| bahttext as py_bahttext, |
| normalize as py_normalize, |
| tone_detector as py_tone_detector, |
| thaiword_to_num as py_thaiword_to_num |
| ) |
| from pydantic import BaseModel |
| router = APIRouter() |
|
|
|
|
| class BahttextResponse(BaseModel): |
| bahttext: str |
|
|
|
|
| class NormalizeResponse(BaseModel): |
| text: str |
|
|
|
|
| class ToneResponse(BaseModel): |
| tone: str |
|
|
| class NumeralsResponse(BaseModel): |
| number: int |
|
|
|
|
| @router.post('/bahttext', response_model=BahttextResponse) |
| def bahttext(number: float): |
| """ |
| This api converts a number to Thai text and adds a suffix “บาท” (Baht). |
| """ |
| return JSONResponse( |
| {"bahttext": py_bahttext(number)}, |
| media_type="application/json; charset=utf-8", |
| ) |
|
|
|
|
| @router.post('/normalize', response_model=NormalizeResponse) |
| def normalize(text: str): |
| """ |
| Normalize and clean Thai text |
| """ |
| return JSONResponse( |
| {"text": py_normalize(text)}, |
| media_type="application/json; charset=utf-8", |
| ) |
|
|
|
|
| @router.post('/tone_detector', response_model=ToneResponse) |
| def tone_detector(syllable: str): |
| """ |
| Thai tone detector for word. |
| """ |
| return JSONResponse( |
| {"tone": py_tone_detector(syllable)}, |
| media_type="application/json; charset=utf-8", |
| ) |
|
|
|
|
| @router.post("/thaiword_to_num", response_model=NumeralsResponse) |
| def thaiword_to_num(text: str): |
| """ |
| Converts the spelled-out numerals in Thai scripts into an actual integer. |
| |
| Example: 'สองล้านสามแสนหกร้อยสิบสอง' => 2300612, 'ศูนย์' => 0 |
| |
| ## Input |
| |
| - **text**: Spelled-out numerals in Thai scripts |
| """ |
| return JSONResponse( |
| {"number": py_thaiword_to_num(text)}, |
| media_type="application/json; charset=utf-8", |
| ) |
|
|