Arrêtez de faire choisir un mode : une recherche qui devine l’intention
Un dictionnaire qui accepte trois écritures peut demander à l’utilisateur de choisir, ou le déduire. Demander est plus simple à construire et pire à utiliser. Comment nous avons rendu la déduction fiable.
KoiSpeak accepte trois types de saisie dans un seul champ : vietnamien, pinyin et caractères chinois. La conception évidente serait un sélecteur de mode. Nous ne l’avons délibérément pas construit, et le raisonnement se généralise bien au-delà des dictionnaires.
Pourquoi les sélecteurs de mode échouent
Un sélecteur semble anodin. Il coûte un appui à l’utilisateur. Mais il le coûte à chaque fois, et il échoue d’une manière très précise et exaspérante : quand le mode est faux, vous obtenez zéro résultat, et zéro résultat ressemble exactement à « ce mot n’existe pas ».
Le modèle mental réel de l’utilisateur n’est pas « j’effectue une recherche en pinyin ». C’est « qu’est-ce que ça veut dire ». Chaque élément d’interface entre cette intention et la réponse est une friction, et la friction s’accumule dans un outil ouvert quarante fois par jour.
Une règle générale se cache ici. Si le système peut déterminer quelque chose à partir de la saisie, il ne devrait pas le demander à l’utilisateur. Un sélecteur de mode, c’est l’interface qui admet qu’elle n’a pas voulu faire ce travail.
Les trois écritures se séparent mieux qu’il n’y paraît
La bonne nouvelle est qu’elles occupent des espaces largement distincts.
Les caractères chinois se détectent trivialement
Les caractères han se trouvent dans des blocs Unicode connus, principalement CJK Unified Ideographs, de U+4E00 à U+9FFF, avec des extensions ailleurs. Si la saisie contient un caractère de ces plages, l’utilisateur a tapé du chinois. C’est une quasi-certitude, pas une supposition.
Le vietnamien a des diacritiques que le pinyin n’utilise pas
Le vietnamien s’écrit en alphabet latin avec son propre jeu de signes : la corne (ơ, ư), l’accent circonflexe (â, ê, ô), la brève (ă), le đ barré, et des marques tonales dont le point souscrit (ạ) et le crochet (ả).
Le pinyin utilise macron, aigu, caron et grave, uniquement sur a, e, i, o, u, ü. Les ensembles ne se recouvrent presque pas. Une chaîne contenant đ, ơ, ư ou un point souscrit est du vietnamien, point.
Le pinyin est un ensemble petit et fermé
C’est la partie que l’on sous-estime. Le mandarin ne compte que quelques centaines de syllabes licites. zhang, xue, qiong sont valides ; blorp et strem non.
On peut donc valider : essayez de segmenter la saisie en syllabes pinyin licites. Si la segmentation est propre, c’est très probablement du pinyin. Cela attrape aussi le pinyin sans tons, qui est ce que la plupart des gens tapent réellement.
Le difficile, c’est le recouvrement
La détection est facile dans les cas clairs et intéressante dans les cas ambigus. Collisions réelles :
- Chaînes courtes qui sont les deux.
maest du pinyin valide et un mot vietnamien valide.ba,co,canaussi. - Vietnamien sans accents. Beaucoup tapent le vietnamien sans diacritiques, ce qui supprime votre signal le plus fort.
- L’anglais. Les apprenants tapent des mots anglais, et l’anglais n’est aucune de vos trois langues.
Tenter de résoudre cela avec davantage de règles est une bataille perdue. Les règles s’allongent, se contredisent, et se trompent quand même.
Ne classez pas. Cherchez partout, puis classez par pertinence.
La conception qui a fonctionné a été de cesser de traiter cela comme un problème de classification.
Au lieu de décider ce qu’est la saisie et d’interroger un index, on lance la requête contre toutes les interprétations, puis on fusionne les résultats avec un score qui tient compte de la vraisemblance de chacune.
En gros :
- Notez chaque interprétation : contient-elle des caractères han, porte-t-elle des diacritiques propres au vietnamien, se segmente-t-elle en pinyin licite ?
- Interrogez les index impliqués par ces interprétations.
- Fusionnez, en pondérant chaque résultat par le score de son interprétation, l’exactitude de la correspondance et la fréquence du mot.
L’utilisateur voit une seule liste. Pour ma, il obtient ensemble les résultats pinyin et vietnamiens, les mots courants d’abord, et la réponse qu’il cherchait est à l’écran dans les deux cas. L’ambiguïté cesse d’être un état d’erreur pour devenir une liste ordonnée.
Classer force une décision qui peut être fausse. Ordonner vous autorise à être incertain tout en restant utile. Quand le système ne peut pas être sûr, préférez les conceptions qui se dégradent en « plusieurs réponses plausibles » plutôt qu’en « une réponse fausse avec assurance ».
Ce que cela coûte
Soyons honnêtes sur l’échange : vous lancez plus de requêtes par frappe. C’est réel, et c’est pourquoi cette conception vit ou meurt selon les performances.
Ce qui l’a rendue abordable :
- Les interprétations bon marché d’abord. Détecter le han, c’est vérifier une plage sur les premiers caractères. Si ça touche, tout le reste est sauté.
- Des index de préfixe par écriture, pour que chaque requête individuelle soit une recherche bon marché plutôt qu’un balayage.
- La fréquence intégrée à l’index, pour que le classement n’exige pas un second passage sur les résultats.
- Debounce, et annulation des requêtes en vol quand la saisie change. La plupart des frappes ne produisent jamais de recherche achevée.
Là où il faut encore une sortie de secours
La détection automatique ne doit pas être la seule voie. Deux cas réclament vraiment autre chose :
- Vous ne pouvez pas taper le caractère du tout. C’est à cela que servent la saisie manuscrite et la recherche par clé.
- Vous voulez forcer une direction. Parfois l’utilisateur veut réellement uniquement du vietnamien vers le chinois. Nous proposons des contrôles de direction explicites, mais comme un remplacement disponible au besoin, pas comme une décision exigée d’emblée.
Cet ordre est le vrai principe. Devinez bien par défaut, et laissez les gens corriger la supposition. Et non : refusez de deviner, et obligez tout le monde à déclarer.
La leçon générale
Chaque produit connaît un moment où l’implémentation la plus simple pose à l’utilisateur une question à laquelle le système aurait pu répondre. Un type de fichier. Un pays. Une devise. Un mode de recherche.
Chacune est petite. Ensemble, elles font la différence entre un outil vers lequel on tend la main sans réfléchir et un outil qu’il faut piloter.