IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Quel moyen pour la persistance d'un autocompléteur dynamique


Sujet :

Qt

  1. #1
    Membre expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par défaut Quel moyen pour la persistance d'un autocompléteur dynamique
    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 !

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    pourquoi tu doit refermer la base???

    Pourquoi qcompleter http://qt.developpez.com/doc/4.5/qcompleter/ ne te suffit pas?
    Tu peut l'utiliser en luis donnant un model. Et Qt fournie un model qui peut interfacer une base de données :
    http://qt.developpez.com/doc/4.5/qsqlquerymodel/

  3. #3
    Membre expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par défaut
    Je referme la base parce qu'elle est susceptible d'être ouverte par une autre appli.

    Le couple QCompleter/QSqlQueryModel marche sans chargement complet de la bdd? (j'y connais pas grand chose coté QAbstractItemModel, je regarde la doc).


    Merci pour la réponse.


    EDIT :

    The QSqlQueryModel class provides a read-only data model for SQL result sets.
    Apparemment c'est pour du ReadOnly, je regarde si ça parle quelque part de Write.


    Le problème en fait avec mon implémentation (basée sur SQLite) c'est que la lenteur provient de l'exécution des statements SQL...
    Peut-être que ta méthode optimise le procédé, je vais tester ça.

  4. #4
    Membre expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par défaut
    Une solution donnée sur le Site répond au problème en optimisant le traitement SQLite. Je reste pour le moment sur cette idée en attendant de trouver comment se débrouille les téléphones actuels avec le T9, par exemple.

    Merci pour ton idée Yan, je vais voir si je peux proprifier mon code en passant par QAbstractItemModel =)
    Et aussi merci pour les tutoriels Qt

Discussions similaires

  1. Réponses: 13
    Dernier message: 18/05/2015, 10h38
  2. Quel moyen pour voir le trafic réseau ?
    Par kopros2 dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 10/09/2014, 16h05
  3. quel choix pour la Persistence?
    Par Sniper37 dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 12/05/2008, 22h20
  4. Quels sont les moyens pour encoder plusieurs éléments en même temps
    Par finalfx dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 12/01/2007, 00h00
  5. Réponses: 6
    Dernier message: 19/09/2005, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo