Given Thai text, segment the input text by syllable based on FSM rules.
The output HTML is:
<html>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
<body>
คู่ แข่ง ขัน ต่าง ก็ คุม เชิง กัน<br />
เขา เงียบ ไป ครู่ หนึ่ง แล้ว พูด ขึ้น<br />
เธอ หัน มา คุ้ย ทราย ขึ้น มา ใหม่<br />
ยิน ดี ที่ ได้ รู้ จัก คุ ณ<br />
ฉัน เห็น เขา ตาม เธอ แจ ไป ทุก ที เป็น เงา ตาม ตัว ตลอด เลย<br />
นก เล็ก มี หน้า อก สี แดง<br />
เจ้า ของ โรง งาน มอง หา ที่ ตั้ง ของ โรง งาน ใหม่<br />
ขา ของ เขา สั่น เทา เมื่อ ต้อง ลง มา จาก ที่ สูง<br />
จุด สุด ยอด ของ ความ รู้ สึก ทาง เพ ศ<br />
หนึ่ง หมื่น สอง พัน ห้า ร้อย หก สิบ สาม<br />
สอง หมื่น สี่ พัน หนึ่ง ร้อย ห้า สิบ สอง<br />
เขา เป็น เพื่อน ของ ฉัน มา หลาย ปี แล้ว<br />
บ้าน หลัง นั้น ไม่ ใช่ ของ เขา เล็ก ไป<br />
เขา ผลัด ค่า เช่า ห้อง มา เดือน หนึ่ง แล้ว<br />
ฉัน ตาย ด้าน ใน เรื่อง ความ รัก เสีย แล้ว หลัง จาก ที่ ฉัน เคย ผิด หวัง กับ ความ รัก<br />
แบ่ง ขนม ปัง ก้อน หนึ่ง ออก เป็น สอง ชิ้น<br />
ใน หัว ใจ ของ ฉัน มี เพียง คุ ณ<br />
วัน ที่ สี่ เดือน หน้า เป็น วัน พุ ธ<br />
เมื่อ คืน นี้ ฉัน กลับ บ้าน ดึก มาก<br />
แต่ เรา ต้อง กลับ มา เปลี่ยน ชุด ก่อน<br />
เธอ รู้ สึก ใจ ชื้น ขึ้น เป็น กอง<br />
หมื่น สอง พัน สาม ร้อย สี่ สิบ ห้า<br />
เขา เอา ช้าง บ้าน ไป ต่อ ช้าง ป่า<br />
ฉัน เอง ไม่ ได้ พูด ดัง นั้น ดอก<br />
ขอ ให้ เดิน ทาง ด้วย ความ ปลอด ภัย<br />
ดี ใจ ที่ ได้ รู้ จัก คุ ณ<br />
ค่อย ชุบ ให้ เกิด ความ กล้า แข็ง<br />
หนัง เรื่อง นั้น ค่อน ข้าง น่า เบื่อ<br />
เขา ไป ส่ง จด หมาย ให้ ผม<br />
เขียน ด้วย มือ แล้ว ลบ ด้วย เท้า<br />
รัก ฉัน ต้อง รัก หมา ฉัน ด้วย<br />
ราย งาน ข่าว กับ ที่ ได้ เห็น จริง ให้ ความ รู้ สึก ต่าง กัน มาก<br />
ถึง ตอน นี้ เรา ต้อง ยัก ย้าย ถ่าย เท เพื่อ เอา ตัว รอด แล้ว<br />
ใบ ตอบ รับ ของ ผู้ ส่ง<br />
รอง เท้า หนัง สวม เดิน เล่น<br />
เครื่อง หมาย ทาง ข้าม โรง เรียน<br />
แป้น หมุน เครื่อง ปั้น ดิน เผา<br />
ขี้ ผึ้ง ทา ริม ฝี ปาก<br />
เมื่อ สอง คืน ที่ ผ่าน มา<br />
ไม่ ถูก บัง คับ ฝืน รั้ง<br />
แสง สี ขาว ของ กลุ่ม เม ฆ<br />
ไม่ เก่า ครับ เพิ่ง สร้าง มา ได้ แค่ ห้า ปี เอง<br />
ฉัน เพิ่ง กลับ มา จาก เดิน เล่น ตาม ชาย หาด<br />
วัน นี้ ความ ขลัง ดัง กล่าว เริ่ม เสื่อม ลง แล้ว<br />
ข่าว นี้ ได้ จาก แหล่ง ข่าว ที่ ไว้ ใจ ได้<br />
ช่วย ย้าย กล่อง นี้ ไป ไว้ ที่ ห้อง นั้น หน่อย<br />
ชาว บ้าน ช่วย กัน ตาม หา เด็ก ที่ หาย ไป<br />
แหล่ง ดึง ดูด นัก ท่อง เที่ยว<br />
งาน ที่ ได้ รับ มอบ หมาย<br />
นี่ คือ ถนน นั่น ใช่ ไหม<br />
วัน นี้ ฉัน ไม่ ไป ไหน<br />
ฉัน ไม่ ได้ เขียน จด หมาย<br />
เธอ ต้อง ขัด รอง เท้า ทั้ง หมด นี้<br />
ปลุก ฉัน เวลา หก โมง เช้า ให้ ได้<br />
ปลูก เรือน พอ ตัว หวี หัว พอ เกล้า<br />
ต่าง กัน เหมือน ช้าง กับ ยุง<br />
</body>
</html>
I used a monadic construction of a FSM to transition from state to state based on different actions.
Given a current state and a character, I check inclusion in different categories to determine to which state the machine should next enter.
For this project, I used primarily the Scala standard library with the exception of a few helper libraries:
- Scalatest, a unit testing library for Scala.
- scala-logging (and Logback), a framework for logging in Scala.
There were no many examples to base tests upon, but a test was written to segment the Thai in the project description.
Write more tests to cover more edge cases.