Представьте, что вы даете кому-то карточку с кодом «5SBDO0».
В некоторых шрифтах букву «S» сложно визуально отличить от цифры пять (как с цифрой ноль и буквой «О»).
Читая код вслух, может быть трудно отличить «B» от «D», требуя сказать «B как у мальчика», «D как у собаки» или использовать вместо этого « фонетический алфавит ».
Какое наибольшее подмножество букв и цифр в большинстве случаев будет выглядеть однозначно визуально и звучать однозначно при чтении вслух?
Фон:
Мы хотим создать короткую строку, которая может закодировать столько значений, сколько возможно, но при этом легко общаться.
Представьте, что у вас есть 6-символьная строка «123456». В базе 10 это может закодировать 10 ^ 6 значений.
В шестнадцатеричном формате «1B23DF» вы можете закодировать 16 ^ 6 значений в том же количестве символов, но это может звучать неоднозначно при чтении вслух. («B» против «D»)
Аналогично для любой строки из N символов вы получаете (размер алфавита) ^ N значений.
Длина строки ограничена примерно шестью символами из-за желания легко помещаться в пределах емкости рабочей памяти человека .
Таким образом, чтобы найти максимальное количество значений, которые мы можем закодировать, нам нужно найти самый большой однозначный набор букв / цифр. Нет причин, по которым мы не можем рассматривать буквы GZ и некоторые обычные знаки пунктуации, но я не хочу вручную выполнять попарно сравнение «G звучит как A?», «G звучит как B?», «Делает G звучит как C "сам. Как мы знаем, это будет O (N ^ 2) лингвистическая работа, чтобы сделать =) ...
Ответы:
Вы должны разбить набор буквенно-цифровых символов на группы по визуальному сходству и выбрать «наиболее значимого» представителя из каждой группы. Это несколько субъективно, хотя вы можете запустить пользовательские тесты на нем. Выбор, который вы делаете, также зависит от того, будут ли рисунки напечатаны или написаны от руки. Например:
{ O , 0 , Q , D }
{ I , L , 1 }
{ B , 8 }
{ Z , 2 }
{ S , 5 }
{ 7 , Т }
{ U , V , Y }
Аналогично, разделите символы по фонетическому сходству произношения их имен:
{ A [ʔeɪ], 8 [ʔeɪ (ʔ / t)]}
= начинается с [ʔeɪ]
{ P [pi:], B [bi:], V [vi:], D [di:], T [ti:], E [ʔi:]}
= стоп / фрикативный + [i:]
{ G [ʤi:], C [si:], Z [zi:], 3 [θɹi:]}
= фрикативный / аффрикатный (кластер) + [i:]
{ M [ɛm], N [ɛn]}
= [ɛ] + носовой
{ S [ɛs], F [ɛf], X [ɛks]}
= [ɛ] + фрикатив / аффрикат
{ I [ʔaɪ], Y [waɪ], 5 [faɪv], 9 [naɪn]}
= согласный + [aɪ] + (согласный)
{ Q [kjʉ:], U [jʉ:], 2 [t (j) ʉ:]}
= согласный + [(j) ʉ:]
Это, конечно, не единственные возможные разделы, как раз то, что приходит на ум в данный момент. В любом случае, их должно быть достаточно, чтобы вы начали дальнейшее тестирование. Кроме того, они не подкреплены никакими профессиональными источниками - я цитирую только свои увлечения в области типографики и фонетики.
источник
Вы можете использовать Mechanical Turk, чтобы реальные люди оценили все 26 ^ 2 пар букв на слуховое и визуальное сходство. Преимущество состоит в том, что вы можете получить данные для различных родных языков таким образом.
источник
Для английского языка алгоритмы soundex и Metaphone кодируют, какие звуки неоднозначны. Soundex, вероятно, слишком прост, но в Metaphone есть несколько положительных моментов. Вы хотите последовательность "OU"? Это можно произнести во многих отношениях, как показывает это предложение;)
источник
Ответ Джона Перди выше кажется наиболее правильным. Для практических целей я пытаюсь
z-base-32
использовать нестандартную кодировку base32, разработанную с учетом коммуникабельности. Это выглядит функционально, хотя и не идеально - например, они явно не фокусировались на устранении неоднозначности.http://philzimmermann.com/docs/human-oriented-base-32-encoding.txt
http://pypi.python.org/pypi/zbase32/
источник