假设您要将一组字符转换为另一组字符。不是将集合 A 中的每个字符 1-1 映射到集合 B 中的相应字符,而是稍微复杂一些。想像一个从泰语或韩语等脚本到拉丁语脚本的自然语言音译器。在韩语示例中,您会得到如下内容:
SKATS: LUM CU LE MEG KUGG BE.
Hangul: 김치가 맛있다.
SKATS 与韩文存在 1 对 1 的映射关系。LU
是一个字母,M
另一个,CU
另一个等等。这些字母与韩文字符的发音没有对应关系,这些基本上只是从帽子里挑选出来的。
当您有多个字符代表一个字符时,问题就开始出现了。
比如说你有一个“送气t
”的声音,tʰ
用IPA表示,你也有字母t
and h
,你有英语的th
声音(θ
在 IPA 中)。假设您决定将tʰ
声音表示为th
。好吧,你可以有这个实际的序列:
tʰ-tʰ-th-t-t-h-t-tʰ-h-th
如果你翻译它会是:
th-th-th-t-t-h-t-th-h-th
结合它的实际外观是:
thththtthtthhth
现在的问题是如何回到原来的字符序列。我们可以用多种方式解释这一点:
th-th-th-t-th-t-th-h-th
th-th-th-t-t-h-t-th-h-th
th-th-th-t-t-h-t-t-h-h-th
th-th-th-t-t-h-t-t-h-h-t-h
th-th-th-t-t-h-t-t-h-h-tʰ
th-th-th-t-t-h-t-tʰ-h-tʰ
etc.
你如何编写一个算法来检查你的映射是否是 1:1 无损的以防止这个问题?我试图把我的头缠上几天,但我没有得到任何地方。
另一个例子是如果你有“单个字母”被转码成“ts”、“s”、“t”、“h”、“th”、“tsh”、“thsh”等。那么你有一个真正的问题.