Imagine dar a alguém um cartão com o código "5SBDO0".
Em algumas fontes, é difícil distinguir visualmente a letra "S" do número cinco (como no número zero e na letra "O").
Lendo o código em voz alta, pode ser difícil distinguir "B" de "D", sendo necessário dizer "B como no menino", "D como no cachorro" ou usar um " alfabeto fonético ".
Qual é o maior subconjunto de letras e números que, na maioria dos casos, parece visualmente inequívoco e soa inequívoco quando lidos em voz alta?
Fundo:
Queremos gerar uma cadeia curta que possa codificar o maior número possível de valores, mantendo a facilidade de comunicação.
Imagine que você tem uma sequência de 6 caracteres, "123456". Na base 10, isso pode codificar 10 ^ 6 valores.
No hexadecimal "1B23DF", você pode codificar 16 ^ 6 valores no mesmo número de caracteres, mas isso pode parecer ambíguo quando lido em voz alta. ("B" vs. "D")
Da mesma forma, para qualquer sequência de N caracteres, você obtém (tamanho do alfabeto) ^ N valores.
A cadeia é limitada a um comprimento de cerca de seis caracteres, devido ao desejo de se ajustar facilmente à capacidade da capacidade de memória de trabalho humana .
Assim, para encontrar o número máximo de valores que podemos codificar, precisamos encontrar o maior conjunto inequívoco de letras / números. Não há motivo para não considerarmos as letras GZ, e algumas pontuações comuns, mas não quero que comparemos manualmente aos pares "G soa como A?", "G soa como B?", " G soa como C "eu mesmo. Como sabemos, isso seria O (n ^ 2) trabalho linguístico a ser feito =) ...
Respostas:
Você deve particionar o conjunto de alfanuméricos em grupos por similaridade visual e escolher um representante “mais icônico” de cada grupo. Isso é um pouco subjetivo, embora você possa executar testes do usuário. As escolhas que você faz também dependem de as figuras serem impressas ou manuscritas. Por exemplo:
{ O , 0 , Q , D }
{ I , L , 1 }
{ B , 8 }
{ Z , 2 }
{ S , 5 }
{ 7 , T }
{ U , V , Y }
Da mesma forma, particione os caracteres pela semelhança fonética das pronúncias de seus nomes:
{ A [ɪeɪ], 8 [ʔeɪ (ʔ / t)]}
= inicia com [ʔeɪ]
{ P [pi:], B [bi:], V [vi:], D [di:], T [ti:], E [:i:]}
= parada / fricativa + [i:]
{ G [:i:], C [si:], Z [zi:], 3 [θɹi:]}
= fricativa / affricate (cluster) + [i:]
{ M [ɛm], N [ɛn]}
= [ɛ] + nasal
{ S [ɛs], F [ɛf], X [ɛks]}
= [ɛ] + fricativa / affricate
{ I [ʔaɪ], Y [waɪ], 5 [faɪv], 9 [naɪn]}
= consoante + [aɪ] + (consoante)
{ Q [kjʉ:], U [jʉ:], 2 [t (j) ʉ:]}
= consoante + [(j) ʉ:]
Naturalmente, essas não são as únicas partições possíveis, apenas o que vem à mente no momento. Independentemente disso, eles devem ser suficientes para você começar a testar mais. Além disso, eles não são apoiados por nenhuma fonte profissional - cito apenas minha formação amadora em tipografia e fonética.
fonte
Você pode usar o Mechanical Turk para que pessoas reais classifiquem todos os 26 ^ 2 pares de letras por similaridade visual e auditiva. A vantagem é que você pode obter dados para vários idiomas nativos dessa maneira.
fonte
Para o inglês, os algoritmos soundex e Metaphone codificam quais sons são ambíguos. O Soundex é provavelmente muito simples, mas o Metaphone incorpora alguns bons pontos. Deseja a sequência "OU"? Isso pode ser pronunciado de várias maneiras, pois esta frase demonstra;)
fonte
A resposta de Jon Purdy acima parece mais correta. Para fins práticos, estou tentando
z-base-32
, uma codificação base32 não-padrão projetada com a comunicabilidade em mente. Parece funcional, embora não seja ideal - por exemplo, eles explicitamente não se concentraram na desambiguação falada.http://philzimmermann.com/docs/human-oriented-base-32-encoding.txt
http://pypi.python.org/pypi/zbase32/
fonte