Imagina que le das a alguien una tarjeta con el código "5SBDO0".
En algunas fuentes, la letra "S" es difícil de distinguir visualmente del número cinco (como con el número cero y la letra "O").
Al leer el código en voz alta, puede ser difícil distinguir "B" de "D", por lo que es necesario decir "B como en el niño", "D como en el perro" o usar un " alfabeto fonético ".
¿Cuál es el subconjunto más grande de letras y números que, en la mayoría de los casos, se verán visualmente inequívocos y no sonarán ambiguos cuando se lean en voz alta?
Antecedentes:
Queremos generar una cadena corta que pueda codificar tantos valores como sea posible sin dejar de ser fácil de comunicar.
Imagine que tiene una cadena de 6 caracteres, "123456". En base 10 esto puede codificar 10 ^ 6 valores.
En el hexadecimal "1B23DF" puede codificar 16 ^ 6 valores en el mismo número de caracteres, pero esto puede sonar ambiguo cuando se lee en voz alta. ("B" vs. "D")
Del mismo modo, para cualquier cadena de N caracteres, obtienes (tamaño del alfabeto) ^ N valores.
La cadena está limitada a una longitud de aproximadamente seis caracteres, debido a querer adaptarse fácilmente a la capacidad de la memoria de trabajo humana .
Por lo tanto, para encontrar el número máximo de valores que podemos codificar, necesitamos encontrar el mayor conjunto de letras / números inequívocos. No hay ninguna razón por la que no podamos considerar las letras GZ, y algunos signos de puntuación comunes, pero no quiero tener que ir manualmente por pares para comparar "¿G suena como A?", "¿G suena como B?", "¿ G suena como C "yo mismo. Como sabemos, esto sería O (n ^ 2) trabajo lingüístico que hacer =) ...
Respuestas:
Debe dividir el conjunto de alfanuméricos en grupos por similitud visual y elegir un representante "más icónico" de cada grupo. Esto es algo subjetivo, aunque podría ejecutar pruebas de usuario en él. Las elecciones que haga también dependen de si las figuras serán impresas o escritas a mano. Por ejemplo:
{ O , 0 , Q , D }
{ I , L , 1 }
{ B , 8 }
{ Z , 2 }
{ S , 5 }
{ 7 , T }
{ U , V , Y }
Del mismo modo, divida los caracteres por la similitud fonética de las pronunciaciones de sus nombres:
{ A [ʔeɪ], 8 [ʔeɪ (ʔ / t)]}
= comienza con [ʔeɪ]
{ P [pi:], B [bi:], V [vi:], D [di:], T [ti:], E [ʔi:]}
= stop / fricative + [i:]
{ G [ʤi:], C [si:], Z [zi:], 3 [θɹi:]}
= fricativa / africada (cluster) + [i:]
{ M [ɛm], N [ɛn]}
= [ɛ] + nasal
{ S [ɛs], F [ɛf], X [ɛks]}
= [ɛ] + fricativa / africada
{ I [ʔaɪ], Y [waɪ], 5 [faɪv], 9 [naɪn]}
= consonante + [aɪ] + (consonante)
{ Q [kjʉ:], U [jʉ:], 2 [t (j) ʉ:]}
= consonante + [(j) ʉ:]
Estas no son, por supuesto, las únicas particiones posibles, solo lo que viene a la mente en este momento. En cualquier caso, deberían ser suficientes para comenzar a realizar más pruebas. Además, estas fuentes no están respaldadas por ninguna fuente profesional: solo cito mis antecedentes de aficionado en tipografía y fonética.
fuente
Puede usar Mechanical Turk para que las personas reales califiquen los 26 ^ 2 pares de letras por similitud auditiva y visual. La ventaja es que incluso podría obtener datos para varios idiomas nativos de esta manera.
fuente
Para el inglés, los algoritmos soundex y Metaphone codifican qué sonidos son ambiguos. Soundex es probablemente demasiado simple, pero Metaphone incorpora algunos puntos buenos. ¿Quieres la secuencia "OU"? Eso se puede pronunciar de muchas maneras, como lo demuestra esta oración;)
fuente
La respuesta de Jon Purdy anterior parece muy correcta. Para fines prácticos, estoy intentando
z-base-32
, una codificación base32 no estándar diseñada teniendo en cuenta la comunicabilidad. Parece funcional, aunque no ideal, por ejemplo, explícitamente no se centraron en la desambiguación hablada.http://philzimmermann.com/docs/human-oriented-base-32-encoding.txt
http://pypi.python.org/pypi/zbase32/
fuente