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

Commentaires

  1. Avatar de mproy
    • |
    • permalink
    Cela permet d'éviter de recourir à une colonne de tri, c'est-à-dire une colonne contenant une version modifiée d'une autre colonne et sur laquelle on va faire le tri (ex., Jean-Gaël -->JEANGAEL, ...).

    Pour plus de renseignement sur l'utilisation de COLLATE, je suggère : https://wellsr.com/python/making-new...ate_collation/.
  2. Avatar de tyrtamos
    • |
    • permalink
    Bonjour,

    Bien vu! Effectivement, il est logique de penser que cette fonction est appelée à chaque ligne, et donc que la compilation du motif regex est inutile!

    Je viens d'ailleurs d'essayer, et on trouve bien le même résultat.

    La suppression de la compilation est facile à faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def regexp(motif, item):
        """retourne True si le motif regex a été satisfait dans l'item
           False sinon
        """
        return re.search(motif, item, re.I) is not None
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def regextract(motif, item):
        """retourne la 1ère sous-chaine de item qui satisfait le motif regex donné
           si aucune sous-chaine n'est trouvée, retourne None
        """
        result = re.findall(motif, item, re.I)  # liste des sous-chaines trouvées
        if result != []:
            return result[0]  # on ne renvoie que la 1ère s'il y en a plusieurs
        else:
            return None
    Merci!
  3. Avatar de parice02
    • |
    • permalink
    Bonsoir.
    Je voudrais savoir si la fonction regexp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def regexp(motif, item): 
        """retourne True si le motif regex a été satisfait dans l'item 
           False sinon 
        """ 
        regex = re.compile(motif, re.I)  # re.I: ignore casse 
        return regex.search(item) is not None
    est appelé à chaque comparaison avec les mots de la base de données lors de cette exécution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    cur.execute(""" 
        SELECT mots 
        FROM test 
        WHERE mots REGEXP ? 
        ORDER BY mots 
        """, ('\(.*\)',)) 
    liste = cur.fetchall()
    .
    Si oui, est-que la compilation est refaite à chaque fois.
  4. Avatar de tyrtamos
    • |
    • permalink
    Citation Envoyé par yahiko
    Tu devrais t'intéresser à la fonction soundex() qui semble être intégrée à SQLite, sauf erreur de ma part : https://www.sqlite.org/lang_corefunc.html
    Merci pour l'info! Malheureusement, cette fonction n'est pas disponible chez moi (je viens d'essayer). Elle ne l'est que si ça a été demandé à la compilation, ce qui n'est pas le cas de la version intégrée à Python. C'est dommage parce que ça semble résoudre le même type de problème, même si l'algorithme n'est pas du tout le même (proximité de 2 signatures sonores). Mais comme il est facile d'ajouter la fonction avec le pilote sqlite de Python, ce n'est pas grave.
  5. Avatar de yahiko
    • |
    • permalink
    Tu devrais t'intéresser à la fonction soundex() qui semble être intégrée à SQLite, sauf erreur de ma part : https://www.sqlite.org/lang_corefunc.html
  6. Avatar de tyrtamos
    • |
    • permalink
    Citation Envoyé par yahiko
    Je ne connais pas SqlLite, mais la comparaison approximative de chaînes de caractères est une fonctionnalité de base dans la plupart des SGBD dignes de ce nom...
    Malheureusement, cette fonctionnalité n'existe pas dans sqlite. Ce produit est cependant très intéressant quand on a besoin d'un SGBD attaché à un programme, sans nécessité d'un serveur (https://sqlite.org/). Il est moins riche que les autres SGBD (sql92) mais, au sein d'un programme, il est cependant largement assez puissant pour les besoins courants et c'est pour ça qu'il est très répandu, y compris dans des produits embarqués (dont l'iPhone).
  7. Avatar de yahiko
    • |
    • permalink
    Je ne connais pas SqlLite, mais la comparaison approximative de chaînes de caractères est une fonctionnalité de base dans la plupart des SGBD dignes de ce nom...