Скажем, вы хотите конвертировать один набор символов в другой.Вместо отображения 1-1 каждого символа в наборе A на соответствующий символ в наборе B это немного сложнее.Думайте как транслитератор естественного языка из сценария, например тайский или корейский , в латиницу.В корейском примере вы получите что-то вроде этого:
SKATS: LUM CU LE MEG KUGG BE.
Hangul: 김치가 맛있다.
Существует сопоставление «1 к 1» SKATS с корейским хангыль.LU
- это одна буква, M
- другая, CU
- другая, и т. Д. Между этими буквами и произношением символов хангыль нет никакого соответствия, они просто выбраны из шляпы.
проблема начинает проявляться, когда у вас есть несколько символов, представляющих один символ.
Скажем, например, у вас есть звук "aspirated t
", представленный как tʰ
в IPA , иу вас также есть буквы t
и 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 "и т. д. Итак, у вас есть реальная проблема.