我无法找到任何开放代码,以便将泰语脚本音译为语音等效词。
例如:
สวัสดี
可以音译为sà-wàt-di
对于中国人来说就像拼音一样。这使得外国脚本的学习者即使无法阅读剧本也能获得正确的发音。
ISO有一个定义的标准,它不可用,因为它是一个精确的音译,char是char。但是泰国人在其他角色之上和之后使用了字符。
有些网站和软件可以自动进行音译,因此可以自动执行此操作。尽管如此,没有可用的开放代码,我用英语和泰语搜索。有一些研究论文,但总是没有逻辑或代码,以高级方式描述该主题。
到目前为止我的方法: 我定义了泰语可能的音素并将其转录为英语:
我们有一些简单的字母总能发出相同的声音:
/*
x - consonants:
ก -> g
ข -> kh
ค -> kh
ฆ -> kh
ง -> ng
จ -> dsch
ฉ -> dsch
ช -> dsch
ซ -> s
ฌ -> dsch
ญ -> i
ฎ -> d
ฏ -> dt
ฐ -> th
ฑ -> th
ฒ -> th
ณ -> n
ด -> d
ต -> dt
ถ -> th
ท -> th
ธ -> th
น -> n
บ -> b
ป -> bp
ผ -> ph
ฝ -> f
พ -> ph
ฟ -> f
ภ -> ph
ม -> m
ย -> i
ร -> r
ล -> l
ว -> w
ศ -> s
ษ -> s
ส -> s
ห -> h
ฬ -> l
อ -> (silent)
ฮ -> h
然后我们有含有上述辅音的元音,最后形成一个音节。在下面的元音化合物中,辅音的可能位置由x代替。 Z是辅音的替代,辅音可以在音节的最后出现。并非所有上述辅音都出现在Z位置,只有Z下面进一步描述的那些辅助。
Vowels With เ
เxียว -> iauw
เxือย -> üüai
เx็อ -> ööh
เxิZ -> öh
เxาะ -> o
เxะ -> e
เxียะ -> ia
เxือะ -> üa
เx็ว -> eu
เx็Z -> e
เxา -> au
เxียZ -> iia
เxือZ -> üüa
เxอะ -> ö
เxZ -> eh
เxว -> eeu
เxีย -> iia
เxือ -> üüa
เxอ -> öö
เx -> ee
เxย -> ööi
Vowels With แ
แx็ว -> äu
แxว -> ääu
แxะ -> ä
แx็Z -> ä
แxZ -> ää
แx -> ää
Vowels With ไ , ใ Or โ
โxZ -> oo
โx -> oo
โxว -> oou
โxะ -> o
ไx -> ai
ใx -> ai
ไxย -> ai
โxย -> ooi
Vowels With อิ Or อี
xิZ -> i
xิ -> i
xิว -> iu
xีZ -> ii
xี -> ii
Vowels With อุ Or อู
xุZ -> u
xุ -> u
xุย -> ui
xูZ -> uu
xู -> uu
Vowels With อึ Or อื
xึZ -> ü
xึ -> ü
xือ -> üü
xืZ -> üü
Vowels With า
xาย -> aai
xาว -> aau
xาZ -> aa
xา -> aa
Vowels With อ
x็อZ -> o
x็อย -> oi
xอย -> ooi
xอZ -> oo
xอ -> oo
Vowels With อั Or ว
xัวะ -> ua
xัย -> ai
xัว -> ua
xัZ -> a
xวย -> uai
xวZ -> ua
Remaining Vowels
xะ -> a
x่า -> am
Inherent 'o' -> o
Z - possible final consonants:
ก -> g
ง -> ng
ด -> dt
น -> n
บ -> b
ม -> m
*/
我不确定哪种方法足够短以包含所有这些规则,而无需重新输入大量的if / else或switch / cases。此外,音节字符串可以包含可选字符:音调标记。情况并非总是如此,但经常如此。所以我的方法是首先从音调标记中剥离元音字符串,然后处理一些规则,如:
// example เดียว -> diau
string vowel001 = "iau";
string thaiword = "เดียว";
if( thaiword.substring(0,1)=="เ" &&
thaiword.substring(1,2)=="ี" && /*the unicode character moves above " which we don't have to care about*/
thaiword.substring(2,3)=="ย" &&
thaiword.substring(3,4)=="ว"){
return getConsonantTransliteration(string.pos.1) + vowel001;
}
是否有更快更多的oop方法来做到这一点,而不是为每种可能性编写这样的规则?
EDIT2:
目前最快的方法似乎是正则表达式方法:
给出示例เอียว
元音以及所有可能的变体:
เลียว
เลี้ยว
เหลียว
เหลี้ยว
เหี้ยว
find: เ(ห{0,1})([ก-ฮ])ี([่้๊๋]{0,1})ยว
replace: silenth[\1] initialcons[\2] tone[\3]
เลียว --> silenth[] initialcons[ล] tone[]
เลี้ยว --> silenth[] initialcons[ล] tone[้]
เหลียว --> silenth[ห] initialcons[ล] tone[]
เหลี้ยว --> silenth[ห] initialcons[ล] tone[้]
เหี้ยว --> silenth[] initialcons[ห] tone[้]