# -*- coding: utf-8 -*- 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", )