« Utilisateur:Lawrent/bepo3 » : différence entre les versions
Ligne 176 : | Ligne 176 : | ||
====Pénalité du clavier==== | ====Pénalité du clavier==== | ||
Pour ce faire, j'utilise le [[Duels_d'accessibilité|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 <code>key_vote_full.py</code> (le key_vote faut automatiquement gagner les duels des touches {AUIE} {TSN}). | Pour ce faire, j'utilise le [[Duels_d'accessibilité|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 <code>key_vote_full.py</code> (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), | |||
<source> | |||
┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗ | |||
│ │ │ │ │ │ │ │ │ │ │ │ │ ║ ║ | |||
│ │ 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 ║ ║ | |||
╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔══════╩════╣ | |||
║ ║ │ │ │ │ │ │ │ │ │ │ ║ ║ | |||
║ ║ │ │ │ │ │ │ │ │ │ │ ║ ║ | |||
╠══════╬════╦════╦════╦════════════════════════╦════╦════╦════╬═══════════╝ | |||
║ ║ ║ ║ ║ ║ ║ ║ ║ | |||
║ ║ ║ ║ ║ ║ ║ ║ ║ | |||
╚══════╩════╩════╩════╩════════════════════════╩════╩════╩════╝ | |||
</source> | |||
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 | |||
<source> | |||
mat= | |||
[0 -1 -1 -1 -1 1 ... | |||
[1 0 -1 -1 -1 1 ... | |||
... | |||
</source> | |||
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 [http://fr.wikipedia.org/wiki/Matrice_antisym%C3%A9trique anti-symmétrique]. La pénalité associée à chaque touche est alors un score entre 0 et 100 calculé par la formule: | |||
<source> | |||
score de la touche i = 100* [sum_j mat(i,j)] / 36 + 50 | |||
</source> | |||
(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.) | |||
====Pénalités des digrammes==== | ====Pénalités des digrammes==== | ||
====Pénalités des trigrammes==== | ====Pénalités des trigrammes==== |
Version du 15 juin 2014 à 17:04
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.
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) etoverlay3=<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.
Disposition
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
Corpus: 45% de textes perso (e-mails et autres), 45% d'un roman francophone; 10% d'un roman anglophone (Harry Potter), dont voici les statistiques des 50 caractères les plus courants:
- 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. 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.)