Bonjour,
J'ai besoin d'implémenter une autocomplétion de texte dans une application. Je cherche le moyen le plus efficace pour communiquer avec mon dictionnaire de mots.
Exemple d'utilisation : l'utilisateur entre "bon", le module d'autocomplétion revoie comme réponse la liste : "bonjour", "bonsoir", "bonbon", ect...
Contraintes :
- Le tri des mots retournés se font suivant une pondération du mot et suivant l'ordre alphabétique (chaque utilisation d'un mot dans une phrase incrémente sa pondération dans le dictionnaire d'un point. Si plusieurs mots ont la même pondération, ils sont retournés dans l'ordre alphabétique).
Cette contrainte implique le fait que le dictionnaire doit pouvoir être modifié dynamiquement (pendant l'utilisation).
- L'application tourne sur un appareil portable (processeur OMAP / Cortex A8), la puissance de calcul est importante mais reste loin derrière un PC classique (Un core 2 duo est plus rapide d'un facteur 10, par exemple). Il faut donc un moyen rapide pour charger le dictionnaire et le mettre à jour.
Implémentation actuelle :
J'utilise une base de données SQLite qui contient une table "dictionnaire". Cette table possède les champs "mot" et "compteur". Cette base de données n'est jamais chargée complètement. A chaque requête de complétion, une requête SQL est effectuée avec le préfixe : SELECT word, cpt FROM Dictionnaire WHERE word like "_prefix_%" ORDER BY cpt DESC.
Avantage :
Démarrage rapide de l'application (inutile de charger tout le dictionnaire en RAM au lancement).
Inconvénient :
Lent lors de la recherche ou de la mise à jour de données. Il faut effectivement ouvrir la connexion à la base de données et exécuter une ou plusieurs requêtes, puis refermer la connexion. Le processus est rapide sur le PC qui émule l'appareil, mais sur l'appareil en lui même, c'est une catastrophe !
Auriez-vous des idées ? Connaissez vous les moyens utilisés dans des applications pour téléphone type rédaction de SMS avec T9 (le comportement semble identique : une base de mots, pas ordonnée certes, mais dans laquelle on peut ajouter des mots).
Merci !
Partager