|
|
|
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", |
|
) |
|
|