From df196cebeef7804f13dfc8ced28befcfe3f39ca9 Mon Sep 17 00:00:00 2001 From: aarne Date: Thu, 10 Nov 2011 20:30:41 +0000 Subject: [PATCH] regression test for Thai pronunciation --- lib/src/thai/ThaiScript.hs | 84 ++++++++------- lib/src/thai/src/test.txt | 207 +++++++++++++++++++++++++++++++++++++ 2 files changed, 253 insertions(+), 38 deletions(-) create mode 100644 lib/src/thai/src/test.txt diff --git a/lib/src/thai/ThaiScript.hs b/lib/src/thai/ThaiScript.hs index cc745d758..a36e5ab21 100644 --- a/lib/src/thai/ThaiScript.hs +++ b/lib/src/thai/ThaiScript.hs @@ -4,12 +4,20 @@ import Data.Char import Data.List import qualified Data.Map as Map +testFile = "src/test.txt" +resultFile = "src/results.txt" + test = do - s <- readFile "src/swadesh.txt" + s <- readFile testFile + writeFile resultFile [] mapM_ (testOne . tabs) $ lines s testOne ws = case ws of - _:_:t:p:_ -> putStrLn $ concat [t,"\t",p,"\t", unwords (map thai2pron (words t))] + m:t:p:r:_ -> appendFile resultFile $ concat [mn,"\t",t,"\t",p,"\t",r,"\t",result,"\n"] where + result = unwords (map thai2pron (words t)) + mn = if result == r + then m + else if result == p then (m ++ "+") else (m ++ "-") _ -> return () tabs s = case break (=='\t') s of @@ -54,42 +62,6 @@ thai2uni = map fromEnum uni2thai :: [Int] -> String uni2thai = map toEnum -{- -uni2pron :: [Int] -> String -uni2pron is = case is of - 0xe40:c:0xe34 :cs -> pron c ++ tone c cs "\601\601" ++ uni2pron cs - 0xe40:c:0xe35:0xe22:cs -> pron c ++ tone c cs "iia" ++ uni2pron cs - 0xe40:c:0xe37:0xe2d:cs -> pron c ++ tone c cs "\649\649" ++ uni2pron cs - 0xe40:c:0xe47 :cs -> pron c ++ tone c cs "e" ++ uni2pron cs - 0xe41:c:0xe47 :cs -> pron c ++ tone c cs "\x25b" ++ uni2pron cs - - v:0xe2b:c:cs | bvow v && isConsonant c - -> pron c ++ tone 0xe2b cs (pron v) ++ uni2pron cs -- h- - v:b:c:cs | clust b c && bvow v -- kr- etc - -> pron b ++ pron c ++ tone b (c:cs) (pron v) ++ uni2pron cs - v:c:cs | bvow v -> pron c ++ tone c cs (pron v) ++ uni2pron cs -- e .. ay - - c:0xe31:0xe27:cs -> pron c ++ tone c cs "ua" ++ uni2pron cs - - 0xe2b:c:v:cs | isConsonant c && cvow v - -> pron c ++ tone 0xe2b cs (pron v) ++ uni2pron cs -- h- - b:c:v:cs | clust b c && cvow v -- kr- etc - -> pron b ++ pron c ++ tone b (c:cs) (pron v) ++ uni2pron cs - 0xe2d:v:cs | cvow v -> tone 0xe2d cs (pron v) ++ uni2pron cs -- O- - c:v:cs | cvow v -> pron c ++ tone c cs (pron v) ++ uni2pron cs -- a .. u: - - [c] -> enc c - c:cs -> pron c ++ uni2pron cs --- shouldn't happen if syllabified ?? - [] -> [] - where - enc c = lookThai [] pronunc_end c - pron c = lookThai [] pronunc c - cvow v = (0xe30 <= v && v <= 0xe39) || v == 0xe2d -- central vowels - bvow v = 0xe40 <= v && v <= 0xe44 -- begin vowels - clust b c = isConsonant b && (elem c [0xe23, 0xe25, 0xe27]) --} - - uni2pron :: [Int] -> String uni2pron is = case getSyllable is of @@ -331,3 +303,39 @@ allThaiChars = [ TC {unicode = 3673, translit = "N9", cclass = Low, liveness = False, pronunc = "9", pronunc_end = "9"} ] + + +{- +uni2pron :: [Int] -> String +uni2pron is = case is of + 0xe40:c:0xe34 :cs -> pron c ++ tone c cs "\601\601" ++ uni2pron cs + 0xe40:c:0xe35:0xe22:cs -> pron c ++ tone c cs "iia" ++ uni2pron cs + 0xe40:c:0xe37:0xe2d:cs -> pron c ++ tone c cs "\649\649" ++ uni2pron cs + 0xe40:c:0xe47 :cs -> pron c ++ tone c cs "e" ++ uni2pron cs + 0xe41:c:0xe47 :cs -> pron c ++ tone c cs "\x25b" ++ uni2pron cs + + v:0xe2b:c:cs | bvow v && isConsonant c + -> pron c ++ tone 0xe2b cs (pron v) ++ uni2pron cs -- h- + v:b:c:cs | clust b c && bvow v -- kr- etc + -> pron b ++ pron c ++ tone b (c:cs) (pron v) ++ uni2pron cs + v:c:cs | bvow v -> pron c ++ tone c cs (pron v) ++ uni2pron cs -- e .. ay + + c:0xe31:0xe27:cs -> pron c ++ tone c cs "ua" ++ uni2pron cs + + 0xe2b:c:v:cs | isConsonant c && cvow v + -> pron c ++ tone 0xe2b cs (pron v) ++ uni2pron cs -- h- + b:c:v:cs | clust b c && cvow v -- kr- etc + -> pron b ++ pron c ++ tone b (c:cs) (pron v) ++ uni2pron cs + 0xe2d:v:cs | cvow v -> tone 0xe2d cs (pron v) ++ uni2pron cs -- O- + c:v:cs | cvow v -> pron c ++ tone c cs (pron v) ++ uni2pron cs -- a .. u: + + [c] -> enc c + c:cs -> pron c ++ uni2pron cs --- shouldn't happen if syllabified ?? + [] -> [] + where + enc c = lookThai [] pronunc_end c + pron c = lookThai [] pronunc c + cvow v = (0xe30 <= v && v <= 0xe39) || v == 0xe2d -- central vowels + bvow v = 0xe40 <= v && v <= 0xe44 -- begin vowels + clust b c = isConsonant b && (elem c [0xe23, 0xe25, 0xe27]) +-} diff --git a/lib/src/thai/src/test.txt b/lib/src/thai/src/test.txt new file mode 100644 index 000000000..05aedd719 --- /dev/null +++ b/lib/src/thai/src/test.txt @@ -0,0 +1,207 @@ +- ฉัน , กู chǎn , kuu chăn , kuu +- เธอ , มึง thəə , mʉŋ thəə , mʉŋ +- เขา kháw khăw ++ เรา raw raw +- พวกคุณ phûakkhun phwkkhun +- พวกเขา phûakkháo phwkkhăw ++ นิ้ ní ní +- นั่น nán nân +- ที่นี่ thîinîi thîinii +- ที่นั่น thîinân thîinan +- ผู้ใด phûuday phûuaydo +- อะไร aray aayro +- ที่ใด thîiday thîiaydo +- เมื่อไร mʉ̂aray eemʉʉɔɔayr +- อย่างไร yàaŋray yaaŋayr +- ไม่ mây mây +- ทั้งหมด tháŋmòt tháŋmt +- หลาย lǎay lăay +- บ้าง bâaŋ bâaŋ +- สองสาม sɔ̌ɔŋsǎam sɔ̆ɔŋsăam ++ อื่น ʉ̀ʉn ʉ̀ʉn ++ หนึ่ง nʉ̀ŋ nʉ̀ŋ +- สอง sɔ̌ɔŋ sɔ̆ɔŋ +- สาม sǎam săam +- สี่ sìi sìi +- ห้า hâa hâa +- ใหญ่ , โต yày , too yày , too ++ ยาว yaaw yaaw +- กว้าง kwâaŋ kwâaŋ +- หนา nǎa năa +- หนัก nàk nàk +- เล็ก , น้อย lék , nɔ́ɔy lék , nɔ́ɔy +- สั้น , เตี้ย sân , tîa sân , tîa +- แคบ khâeaep khɛɛ ++ บาง baaŋ baaŋ ++ หญิง yĭŋ yĭŋ ++ ชาย chaay chaay +- ผู้ , คน phûu , khon phûu khon +- เด็ก , ศิศุ dèk , sìsù dèk , sìtu +- เมีย , ภรรยา mia , phanrayaa mia , phrnyaa +- ผัว , สามี phǔa , sǎamii phăw , săamii ++ แม่ mɛ̂ɛ mɛ̂ɛ +- พ่อ , บิดา phɔ̂ɔ , bìdaa phɔ̂ɔ , bìtaa +- สัตว์ sàt sàtwo ++ ปลา plaa plaa +- นก; วิหค (Sanskrit) nók , wíhòk nk , wikho +- หมา; สุนัข (Sanskrit) mǎa , sùnák màa , sŭnakh +- เล็น , เหา len , hǎw len , hăw ++ งู ŋuu ŋuu +- หนอน nɔ̌ɔn nɔ̆ɔn +- ไม้ máay máy +- ดง , ป่า doŋ , pàa doŋ , pàa +- กิ่ง kìŋ kìŋ +- หมาก màak màak +- เม็ด mét mét ++ ใบ bay bay +- ราก râak râak +- เปลือก , ผิว plʉ̀ak , phĭw eeplʉʉɔɔk , phĭw +- ดอก , ปลี dɔ̀ɔk , plii dɔ̀ɔk , plii +- หญ้า yâa yâa +- เชือก chʉ̂ak eechʉʉɔɔk +- หนัง nǎŋ năŋ +- เนื้อ nʉ́a eenʉʉɔɔ +- เลือด , โลหิต lʉ̂at , loohìt eelʉʉɔɔd , looit +- กระดูก , ก้าง kradùuk , kâaŋ kràtuuk , kâaŋ ++ มัน man man +- ไข่ khày khày +- เขา khǎw khăw +- หาง hǎaŋ hăaŋ +- ขน khǒn khon +- ผม phǒm phom +- หัว hǔa hăw +- หู hǔu hŭu ++ ตา taa taa +- จมูก camùuk cmuuk +- ปาก pàak pàak ++ ฟัน fan fan ++ ลิ้น lín lín +- เล็บ lép lép +- เท้า , ตีน tháaw , tiin tháw , tiin +- ขา khǎa khăa +- เข่า khàw khàw +- มือ mʉʉ mʉʉɔɔ ++ ปิก pìk pìk ++ พุง phuŋ phuŋ +- ไส้ sây sây +- คอ , ศอ khɔɔ , sɔ̌ɔ khɔɔ , sɔ̆ɔ +- หลัง lǎŋ lăŋ ++ นม nom nom ++ ใจ cay cay +- ตับ tàp tàp ++ ดื่ม dʉ̀ʉm dʉ̀ʉm ++ กิน kin kin +- กัด kàt kàt +- ดูด dùut dùut +- ถ่ม , คาย thòm , khaay thm , khaay +- อ้วก , อาเจียน ûak , aacian wko , aaeeciiyno +- พัด phát phát +- หายใจ hǎaycay hăaycay +- หัวเราะ hǔarɔ́ hăwrɔ +- เห็น hěn hĕn +- ยิน , ฟัง yin , faŋ yin , faŋ +- รู้ rúu rúu +- คิด khít khít +- มีกลิ่น miiklìn mîiklîn +- กลัว , ยั่น klua , yân klaw , yân ++ นอน nɔɔn nɔɔn +- อยู่ , อาศัย yùu , aasǎi yuu , àatay +- ตาย , วาย taay , waay taay , waay +- ฆ่า , มล้าง khâa , maláaŋ khâa , mláaŋ +- สู้ , รบ sûu , róp sûu , rop +- ล่า lâa lâa ++ ตี tii tii +- ตัด , บาด tàt , bàat tàt , bàat +- ผ่า phàa phàa +- แทง , เสียบ thɛɛŋ , sìap thɛɛ , sìap ++ เกา kaw kaw +- ขุด khùt khùt +- ว่าย wâay wâay ++ บิน bin bin ++ เดิน dəən dəən ++ มา maa maa ++ นอน nɔɔn nɔɔn +- นั่ง nâŋ nâŋ ++ ยืน yʉʉn yʉʉn +- หัน hǎn hăn +- ตก , หล่น tòk , lòn tok , ln +- ให้ hây hây +- อุ้ม ûm ûm +- คั้น khán khán +- ถู , นวด thǔu , nûat thŭu , nwt +- ล้าง láaŋ láaŋ +- เช็ด chét chét +- ดึง , ลาก dʉŋ , lâak dʉŋ , lâak +- ผลัก phlàk phlàk +- ขว้าง , ปา khwâaŋ , paa khwâaŋ , paa +- ผูก , ล่าม phùuk , lâam phùuk , lâam +- เย็บ yép yép +- นับ náp náp +- พูด , บอก phûut , bɔ̀ɔk phûut , bɔ̀ɔk ++ ร้อง rɔ́ɔŋ rɔ́ɔŋ +- เล่น lên lêen ++ ลอย lɔɔy lɔɔy +- ไหล lǎy lăy +- แข็ง khǎeŋ khɛ̆ŋ +- ตุ่ม tùm tùm +- ตะวัน , พระอาทิตย์ tawan , phrá?aathít tawan , phrâɔɔaatity +- เดือน , พระจันทร์ dʉan , phrácan eedʉʉɔɔn , phrátanthr +- ดาว , ดารา daaw , daaraa daaw , daanaa +- น้ำ , ชล náam , chon nám , chlo +- ฝน fǒn fon +- แม่น้ำ , นที mɛ̂ɛnám , náthii mɛ̂ɛnam , ntii +- ทะเลสาบ thaleesàap thaeeltaab +- ทะเล , มหาสมุทร thalee , mahǎasamùt thaeel , maasmuthr +- เกลือ klʉa eeklʉʉɔɔ ++ หิน hĭn hĭn +- ทราย saay thraay +- ฝุ่น; ธุลี (Sanskrit) fùn , thúlii fùn , thunii ++ ดิน din din +- เมฆ mêek mee ++ หมอก mɔ̀ɔk mɔ̀ɔk +- ฟ้า , นภา fáa , napaa fáa , npaa ++ ลม lom lom +- หิมะ himá hĭma +- น้ำแข็ง náamkhǎeŋ nám0x25bɛkhŋ ++ ควัน khwan khwan +- ไฟ , อัคนี fay , akkhanii fay , àknii +- เถ้า thâw thâw +- เผา phǎw phăw +- ทาง , หน thaaŋ , hǒn thaaŋ , no +- เขา , ภู , ดอย , คิริ phuu , khǎo , dɔɔy , khìrì khăw , phuu , dɔɔy , khini +- แดง dɛɛŋ dɛɛ ++ เขียว khĭaw khĭaw +- เหลือง lʉ̌aŋ eehlʉʉɔɔŋ +- ขาว khǎaw khăaw ++ ดำ dam dam ++ กลางคืน klaaŋkhʉʉn klaaŋkhʉʉn ++ กลางวัน klaaŋwan klaaŋwan +- ปี ,ขวบ pii , khùap pii , khwb +- ร้อน , อุ่น rɔ́ɔn , ùn rɔ́ɔn , ùn +- หนาว , เซ็ง nǎaw , sen năaw , seŋ ++ เต็ม tem tem +- ใหม่ mày mày +- แก่ , เฒ่า kɛ̀ɛ , thâo kɛ̀ɛ , thâw ++ ดี dii dii +- เลว , ร้้าย leew , ráay lwee ráay +- เน่า nâo nâw +- สกปรก sòkkapròk skprk +- ดิ่ง , ตรง dìŋ , troŋ dìŋ , trŋ +- กลม , มน klom , mon klm , mon ++ คม khom khom +- ทื่อ thʉ̂ʉ thʉ̂ʉɔɔ ++ ละมุน lamun lamun +- เปียก pìak pìak ++ แห้ง hɛ̂ɛŋ hɛ̂ɛŋ +- แท้ , แม่น thɛ́ɛ , mɛ̂ɛn thɛ́ɛ , mɛ̂ɛn +- ใกล้ klây klây ++ ไกล klay klay +- ขวา khwǎa khwăa +- ซ้าย sáay sáay ++ ที่ thîi thîi ++ ใน nay nay +- กับ , ด้วย kàp , dûay kàp , dwyo +- และ láe lɛ +- ถ้า , เผื่อ thâa , phʉ̀a thâa , eephʉʉɔɔ +- เพราะ , ด้วย phrɔ́ , dûay phrɔ , dwyo +- ชื่อ , เรียก chʉ̂ʉ , rîak chʉ̂ʉɔɔ , rîak