Utilisateur:Lawrent/bepo3

De Disposition de clavier bépo

Dans mes fichiers ma disposition bidouillée s'appelle bepo2. Cette page est une page où je rassemble mes idées pour une version suivante que j'appelle tout naturellement et à titre personnel bepo3.

Le but est de repenser le bépo à partir de zéro: nouvelle méthode de saisie et nouvelle disposition. Rendons à César ce qui est à César, la méthode de saisie est inspirée de l'adaptation de l'Arensito sur un clavier standard et la méthodologie de développement est inspirée de la page de développement du layout MTGAP de Michael Dickens.

Pour l'instant c'est encore le bordel ici, mais c'est pas grave. :-)

Placement des touches Maj, Ctrl, etc.

(à finir)

À placer:

  • maj x2
  • space x2
  • alt x1
  • altgr x2
  • tab x1
  • meta x1
  • overlay x1
  • level5 x1/x2 ?
  • level5Lock ?
  • enter x1
  • backspace x1
  • delete x1
  • insert x1
  • capslock x1?
X = emplacement pour un caractère
┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────╔════════════════╗
│        │        │        │ a      │ A      │ M      │ I      │        │ I      │ M      │ A      │ a      │        ║                ║
│        │ X      │ X      │ X      │ X      │ X      │ X      │ X      │ X      │ X      │ X      │ X      │ X      ║                ║
╔══════════════╗──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──╚═════╦══════════╣
║              ║        │ *a*    │ *A*    │ *M*    │ *I*    │        │        │ *I*    │ *M*    │ *A*    │ *a*    │        ║          ║
║              ║ X      │ X      │ X      │ X      │ X      │ X      │ X      │ X      │ X      │ X      │ X      │ X      ║          ║
╠══════════════╩═╗──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────╚═╗        ║
║                ║ a      │ A      │ M      │ I      │        │        │        │ I      │ M      │ A      │ a      │        ║        ║
║                ║ X      │ X      │ X      │ X      │ X      │ X      │ X      │ X      │ X      │ X      │ X      │ X      ║        ║
╠═══════════╦════╝───┬────┴───┬────┴───┬────┴──════──┴───┬────┴───┬────┴──════──┴───┬────┴───┬────┴───┬────┴───╔═════════════╩════════╣
║           ║        │        │        │ *P*    │        │        │        │        │ *P*    │        │        ║                      ║
║           ║        │ Overlay│ Maj    │ Space  │ Ctrl   │        │        │ Ctrl   │ Space  │ Maj    │        ║                      ║
╠═══════════╬════════╦════════╦════════╦════════════════════════════════════════════╦════════╦════════╦════════╬══════════════════════╝
║           ║        ║        ║        ║                                            ║        ║        ║        ║
║           ║        ║        ║ Level5 ║              AltGr                         ║        ║        ║        ║
╚═══════════╩════════╩════════╩════════╩════════════════════════════════════════════╩════════╩════════╩════════╝

(note: avec cette méthode de saisie, les annulaires gauche et droit ont autant de touches à gérer et le clavier devient symmétrique.)

Quelques idées pour le placement:

  • Enter serait sous le pouce droit (il est relativement fréquent) et tab sous le pouce gauche (car un tab est souvent suivi d'un enter quand il est utilisé pour l'auto-complétion d'un mot)
  • CapsLock peut aller sur [BackSpace] ou [Enter]. À voir.


Idées en vrac

  • utiliser le pavé numérique
 ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗ 
 │    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║ 
 │    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║ 
 ╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣ 
 ║       ║    │    │    │    │    │    │   "│   6│   7│   8│   9│   %║     ║
 ║       ║    │    │    │    │    │    │   '│    │    │    │    │    ║     ║ 
 ╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║ 
 ║        ║    │    │    │    │    │   0│   1│   2│   3│   4│   5│    ║    ║
 ║        ║    │    │    │    │    │    │    │    │    │    │    │    ║    ║ 
 ╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔══════╩════╣ 
 ║      ║    │    │    │    │    │    │   ;│   ±│   =│   (│   )║  :        ║
 ║      ║    │    │    │    │    │    │   ,│   +│   -│   *│   /║  .        ║ 
 ╠══════╬════╦════╦════╦════════════════════════╦════╦════╦════╬═══════════╝ 
 ║      ║    ║    ║    ║                        ║    ║    ║    ║ 
 ║      ║    ║    ║    ║                        ║    ║    ║    ║ 
 ╚══════╩════╩════╩════╩════════════════════════╩════╩════╩════╝

et ne pas duppliquer + et * sur la couche AltGr.

  • mettre à sur a+altgr et å sur a+level5
  • mettre les touches "d'accord" (celles qui sont pressées en même temps qu'une autre touche: maj, ctrl, altgr, level5, overlay, …) sous les pouces
  • mettre les touches "d'arpège" (celles qui ne sont pas pressées en même temps qu'une autre touche: esc, tab, enter, delete, insert, capslock, level5lock, …) sur les auriculaires à l'extérieur du clavier
  • mettre un actions = [ SetControls(controls=Overlay3) ] sur le maj de gauche (par exemple) et overlay3=<CAPS> (ou autre) sur le maj de droite pour que maj gauche + maj droite = caps lock.
  • puisque maj, altgr et level5 sont sous le pouce, la combinaison level5+maj+altgr devient impossible (ou alors très très difficile), c'est pourquoi aucun caractère ne sera situé sur le level8.

Idée générale

Dans l'ordre:

  • décider quels caractères vont sur la couche de base et quels caractères se trouvent en majuscule (pour la ponctuation et les symboles très courants: par ex, ? = maj+,) et en altgr (pour les caractères linguistiques: par ex, ù = altgr+u)
  • laisser l'algorithme trouver une disposition optimale avec tout ça
  • ajouter les caractères non-présents tel que {}[]\/_$ à la main sur la couche altgr là où il reste de la place

Corpus

Créer un bon corpus est une tâche délicate et indispensable pour un bon clavier. Pour relever la cote du w et du digramme wh ô combien courants en anglais, mon corpus est composé à 10% d'un roman en anglais anglais (Harry Potter). Les 90% restants sont répartis en 45% de textes personnels (e-mails et autres) et 45% d'un roman francophone. Sur base de ce corpus mixte, voici à titre d'information la fréquence des 50 caractères les plus fréquents:

  - 16.915 %
e - 10.992 %
a - 6.331 %
t - 6.012 %
s - 5.899 %
i - 5.805 %
n - 5.231 %
r - 5.068 %
o - 4.416 %
u - 4.159 %
l - 3.956 %
d - 2.669 %
m - 2.332 %
c - 2.327 %
p - 2.293 %
h - 1.543 %
. - 1.172 %
v - 1.155 %
é - 1.100 %
' - 1.069 %
f - 0.988 %
, - 0.955 %
g - 0.890 %
q - 0.774 %
b - 0.751 %
<Enter> - 0.747 %
j - 0.561 %
y - 0.519 %
w - 0.471 %
à - 0.309 %
- - 0.298 %
x - 0.271 %
k - 0.220 %
è - 0.197 %
ê - 0.150 %
: - 0.109 %
ç - 0.102 %
? - 0.092 %
— - 0.085 %
1 - 0.084 %
0 - 0.082 %
z - 0.074 %
« - 0.070 %
» - 0.070 %
" - 0.054 %
2 - 0.054 %
) - 0.045 %
( - 0.042 %
! - 0.041 %
â - 0.040 %

Avec ma méthode de saisie j'ai accès à 36 touches sur lesquelles placer des caractères:

  • l'alphabet (26): abcdefghijklmnopqrstuvwxyz
  • d'autres caractères du français (5): éàêèç
  • la ponctuation (4): .,'- (placer le ;?)
  • une touche accent (1): ^¨´`

En plaçant les caractères associés à chaque caractère en majuscule et/ou altgr, la disposition de base sera une permutation de cette disposition:

┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
│    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
│    │ a ä│ b  │ c  │ d  │ e  │ f  │ g  │ h  │ i  │ j  │ k  │ l  ║        ║
╔═══════╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
║       ║    │    │    │    │    │    │    │    │    │    │    │    ║     ║
║       ║ m  │ n  │ o ö│ p  │ q  │ r  │ s  │ t  │ u ù│ v  │ w  │ x  ║     ║
╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
║        ║    │    │    │    │    │    │    │    │ :  │ ;  │ !  │ ? –║    ║
║        ║ y  │ z  │ é  │ à å│ è  │ ê  │ ç  │ ^  │ .  │ ,  │ ' "│ - —║    ║
╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔══════╩════╣
║      ║    │    │    │    │    │    │    │    │    │    │    ║           ║
║      ║    │    │    │    │    │    │    │    │    │    │    ║           ║
╠══════╬════╦════╦════╦════════════════════════╦════╦════╦════╬═══════════╝
║      ║    ║    ║    ║                        ║    ║    ║    ║
║      ║    ║    ║    ║                        ║    ║    ║    ║
╚══════╩════╩════╩════╩════════════════════════╩════╩════╩════╝

(note que je ne place pas les œ ni les æ sur mon clavier.)

L'étape suivante consiste à traduire le corpus en une succession de ces 36 caractères + espace:

  • les majuscules sont transformées en minuscules
  • tout caractère qui ne se trouve pas dans abcdefghijklmnopqrstuvwxyzéàèêç.,'-äöùå:;?!—–ôâîûïë est transformé en espace
  • ä devient a, ö devient o, ù devient u, å devient à, : devient ., ; devient ,, " et ! deviennent ', ?, — et – deviennent -
  • î et ï deviennent ^i, â devient ^a, ô devient ^o, û devient ^u et ë devient ^e

Il ne reste ensuite qu'à compter la fréquence des caractères, digrammes et trigrammes dans le corpus traduit. Ces statistiques seront celles utilisées par l'algorithme.

Clavier

Cette section s'attaque aux pénalités, autre point clef de l'algorithme.

Pénalité du clavier

Pour ce faire, j'utilise le key_vote où les résultats sont déduits à partir de 100. (Par exemple, si le [E] reçoit une note de 80 au key_vote, ça veut dire qu'il est très bien placé; dans mon système il aura donc la faible pénalité de 20.) Notons que pour évaluer une méthode de saisie peu conformiste comme la mienne, il faut modifier les lignes 56–58 et 73–83 du fichier key_vote_full.py (le key_vote faut automatiquement gagner les duels des touches {AUIE} {TSN}).

Note du lendemain: faire le keyvote complet c'est super long, c'est pourquoi j'ai pensé à l'idée suivante qui se base sur le même principe. Au lieu de faire tous les duels un à un, je les fais touche par touche et je les remplis dans une matrice. En clair: en utilisant cette carte de mon clavier (choisie pour que les touches gauches et droites soient faciles à décrire),

┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
│    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
│    │ 1  │ 2  │ 3  │ 4  │ 5  │ 6  │ 19 │ 20 │ 21 │ 22 │ 23 │ 24 ║        ║
╔═══════╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
║       ║    │    │    │    │    │    │    │    │    │    │    │    ║     ║
║       ║ 7  │ 8  │ 9  │ 10 │ 11 │ 12 │ 25 │ 26 │ 27 │ 28 │ 29 │ 30 ║     ║
╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
║        ║    │    │    │    │    │    │    │    │    │    │    │    ║    ║
║        ║ 13 │ 14 │ 15 │ 16 │ 17 │ 18 │ 31 │ 32 │ 33 │ 34 │ 35 │ 36 ║    ║
╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔══════╩════╣
║      ║    │    │    │    │    │    │    │    │    │    │    ║           ║
║      ║    │    │    │    │    │    │    │    │    │    │    ║           ║
╠══════╬════╦════╦════╦════════════════════════╦════╦════╦════╬═══════════╝
║      ║    ║    ║    ║                        ║    ║    ║    ║
║      ║    ║    ║    ║                        ║    ║    ║    ║
╚══════╩════╩════╩════╩════════════════════════╩════╩════╩════╝

la touche 1 fait match nul contre elle-même, perd son duel face aux touches 2,3,4,5 et gagne face à la touche 6; de même, la touche 2 gagne contre la touche 1, fait match nul contre elle-même, perd face aux touches 3,4,5 et gagne face à la touche 6. Je remplis donc une matrice 36x36

mat=
[0 -1 -1 -1 -1 1 ...
[1 0 -1 -1 -1 1 ...
...

Comme test de vérification que mes duels sont consistents entre eux (c'est-à-dire, si 16 bat 17 alors 17 doit perdre face à 16), la matrice ainsi obtenue doit être anti-symmétrique et les incohérences sont les duels entre i et j tels que mat(i,j) ≠ -mat(j,i). La pénalité associée à chaque touche est alors un score entre 0 et 100 calculé par la formule:

score de la touche i = 100* [sum_j mat(i,j)] / 36  +  50

(En pratique, par souci d'indentation et de facilité de frappe, je cote mes duels à 1 en cas de défaite, 2 en cas de match nul et 3 en cas de victoire et à la fin je soustrais 2 partout.)

Pénalités des digrammes

Pénalités des trigrammes

L'algorithme

(lisez mon post ou revenez plus tard quand je l'aurai réécrit ici)

Idée à ajouter à l'algorithme évolutionnaire: à chaque génération, évaluer les 10 meilleures dispositions de la précédente + 10 dispositions créées à partir de la génération précédente + 10 dispositions entièrement aléatoires. Garder les 10 meilleures parmi ces 30.

Évaluation d'une disposition

Les premières dispositions renvoyées par l'algorithme seront probablement mauvaises parce que les différentes pénalités ne seront pas pondérées correctement ou parce que certaines pénalités auront été négligées. Si une disposition très mauvaise se repère en un coup d'oeil (par exemple, si le A est placé sur la ligne inférieure), il peut être plus difficile de détecter celles qui ne sont que moyennement mauvaises. Pour éviter de devoir réapprendre une disposition complète avant de se rendre compte qu'elle est mauvaise, voici quelques caractéristiques à évaluer a posteriori qui permettent de se faire une idée sur la qualité de la disposition renvoyée par l'algorithme:

  • pénalité totale
  • charge main gauche versus main droite
  • charge individuelle de chaque doigt: en tenant compte de la force de chaque doigt et le fait que l'auriculaire gère 6 touches, une bonne disposition devrait avoir une répartition a-A-M-I proche de 20%-20%-30%-30% (valeurs tirées à pouf)
  • % de roulements vers l'intérieur et l'extérieur
  • % de digrammes avec une et deux lignes d'écart sur la même main
  • % de digrammes utilisant le même doigt

Pour avoir un ordre de grandeur d'où ces paramètres devraient se situer, une bonne idée serait de les évaluer sur l'azerty et le bépo (en adaptant ces dispositions à ma méthode de frappe).