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

Python Discussion :

concordance, expression rationnelle


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Par défaut concordance, expression rationnelle
    Bonjour,
    J'ai créer un programme qui affiche les noms propres d'un texte,
    je voudrais le modifier afin qu'il me permettre d'extraire leurs contextes d'occurences (10mots) et qu'il les placent dans un fichier texte.
    Voici le premier programme (qui fonctionne):
    #! /usr/bin/python
    # -*- coding: utf-8 -*-

    import re

    f_dico_brut = open('Dictionnaire.txt','r')
    dico_brut = f_dico_brut.read()
    f_dico_brut.close()

    entrees = re.split(r'\n', dico_brut)

    dico = {}

    for ent in entrees:
    elements = re.split(r'\t', ent)
    dico[elements[0]] = elements[1]

    f_texte = open('untexte.txt','r')
    texte = f_texte.read()
    f_texte.close()

    delimiteur = re.compile(r'\W+', flags=re.UNICODE)
    mots = re.split(delimiteur, texte)
    cat1= re.compile(r"\b[A-ZÀÂÄÇÉÈËÊÏÎÖÔŒÜÛÙ][a-zàâïçéèëêïîöôœûüù]{2,}\b")

    f_anti= open("Antidictionnaire.txt", "r") #ATTENTION C'EST PAS LES MEMES
    t_anti= f_anti.read()
    f_anti.close()

    anti= re.split ("\n", t_anti)
    anti.append('trl')
    anti.append('lorsqu')
    anti.append('fig')
    anti.append('iii')
    anti.append('log')
    anti.append('abx')

    for mot in mots:
    if re.search(cat1, mot):
    if mot.lower() not in dico:
    if mot.lower() not in anti:
    print mot


    voici le deuxieme qui ne fonctionne malheureusement pas:
    #! /usr/bin/python
    # -*- coding: utf-8 -*-

    import re

    # Ouverture du fichier contenant les données brutes du dictionnaire de langue et stockage de ces données dans dico_brut
    f_dico_brut = open('Dictionnaire.txt','r')
    dico_brut = f_dico_brut.read()
    f_dico_brut.close()

    # Chaque éléments de la liste 'entrees' constitue une entrée dans le dictionnaire de langue
    entrees = re.split(r'\n', dico_brut)

    # Création du dictionnaire Python qui organisera les données du dictionnaire de langue
    dico = {}

    # Chaque entrée est coupée en deux: la vedette (l'entrée lexicale) sert de clé, ses informations grammaticales servent de valeur
    # (La vedette et ses informations grammaticales sont séparées par une tabulation dans le dictionnaire de langue)
    for ent in entrees:
    elements = re.split(r'\t', ent)
    dico[elements[0]] = elements[1]

    # On ouvre le fichier untexte.txt et on stocke les données qu'il contient dans la variable 'texte'
    f_texte = open('untexte.txt','r')
    texte = f_texte.read()
    f_texte.close()

    # On sépare le texte en une liste de mots
    delimiteur = re.compile(r'\W+', flags=re.UNICODE)
    mots = re.split(delimiteur, texte)
    cat1= re.compile(r"\b[A-Z][a-zàâïçéèëêïîöôœûüù]{2,}\b")

    f_anti= open("Antidictionnaire.txt", "r") #ATTENTION C'EST PAS LES MEMES
    t_anti= f_anti.read()
    f_anti.close()

    anti= re.split ("\n", t_anti)
    anti.append('trl')
    anti.append('lorsqu')
    anti.append('fig')
    anti.append('iii')
    anti.append('log')
    anti.append('Abx')

    for i in range(len(mot)):
    if re.search(cat1, mot):
    if mot[i].lower() not in dico:
    if mot[i].lower() not in anti:
    print "%s %s %s" % (' '.join(mots[i-10:i]), mots[i], ' '.join(mots[i+1:i+S11]))

    si quelqu'un a une piste je suis interessée

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Quand tu postes du code utilise les balises du même nom. Le # dans la barre d'outils.

    Est-ce que ce code te retourne une erreur ou bien il ne produit pas le résultat attendu ?

    Quelques remarques:

    - Préfère texte = texte.split('\t') à texte = re.split(r'\t', texte)

    - Plutôt qu'une liste de append() tu peux simplifier avec extend(['trl', 'lorsqu', 'fig', 'iii', ...])

    - Tu as une liste de mots
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mots = re.split(delimiteur, texte)
    mais, plus loin, tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in range(len(mot)):
    - Ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if re.search(cat1, mot):
    qui devrait sans doute être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if re.search(cat1, mots[i]):
    Et pour finir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "%s %s %s" % (' '.join(mots[i-10:i]), mots[i], ' '.join(mots[i+1:i+S11]))
    que se passe-t-il quand i est inférieur à 10 et d'où sort S11 ?

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Par défaut
    oui peut etre que je ne devrais pas utiliser range avec une liste, mais je ne sais pas comment lui faire prendre en compte toutes mes conditions, s'il n'est pas dans le dico, s'il n'est pas dans l'anti et qu'il correspond à l'expression rationnelle affiche le:
    ...
    for mot[i] in mots:
    if mot[i].lower() not in dico:
    if mot[i].lower() not in anti:
    if re.findall(cat1, mots[i]):
    print "%s %s %s" % (' '.join(mot[i-5:i]), mot[i], ' '.join(mot[i+1:i+6]))

    dans le cas ou je modifie la fin du programme comme ca il me dit:
    for mot[i] in mots:
    NameError: name 'mots' is not defined

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    On ne s'est pas compris, je ne dis pas qu'il ne faut pas utiliser range() avec une liste, je faisais remarquer que tu as nommé ta liste mots et que dans range() tu la nommes mot sans le s

    Maintenant, si tu as une erreur "NameError: name 'mots' is not defined " c'est que tu as changé ton code.

    Reposte-le, entre balises siouplais ...

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Par défaut
    #! /usr/bin/python
    # -*- coding: utf-8 -*-

    import re

    f_dico_brut = open('Dictionnaire.txt','r')
    dico_brut = f_dico_brut.read()
    f_dico_brut.close()

    entrees = re.split(r'\n', dico_brut)

    dico = {}

    for ent in entrees:
    elements = re.split(r'\t', ent)
    dico[elements[0]] = elements[1]

    f_texte = open('untexte.txt','r')
    texte = f_texte.read()
    f_texte.close()

    delimiteur = re.compile(r'\W+', flags=re.UNICODE)
    mot = re.split(delimiteur, texte)
    cat1= re.compile(r"\b[A-Z][a-zàâïçéèëêïîöôœûüù]{2,}[^1-9]\b")

    f_anti= open("Antidictionnaire.txt", "r")
    t_anti= f_anti.read()
    f_anti.close()

    anti= re.split ("\n", t_anti)
    anti.append('trl')
    anti.append('lorsqu')
    anti.append('fig')
    anti.append('iii')
    anti.append('log')
    anti.append('Abx')

    for mot[i] in mots:
    if mot[i].lower() not in dico:
    if mot[i].lower() not in anti:
    if re.findall(cat1, mots[i]):
    print "%s %s %s" % (' '.join(mot[i-5:i]), mot[i], ' '.join(mot[i+1:i+6]))

    merci beaucoup pour ton aide, je débute et jtrouve ca quand meme difficile

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #! /usr/bin/python
    # -*- coding: utf-8 -*-
     
    import re
     
    f_dico_brut = open('Dictionnaire.txt','r')
    dico_brut = f_dico_brut.read()
    f_dico_brut.close()
     
    entrees = re.split(r'\n', dico_brut)
     
    dico = {}
     
    for ent in entrees:
        elements = re.split(r'\t', ent)    
        dico[elements[0]] = elements[1]
     
    f_texte = open('untexte.txt','r')
    texte = f_texte.read()
    f_texte.close()
     
    delimiteur = re.compile(r'\W+', flags=re.UNICODE)
    mot = re.split(delimiteur, texte)
    cat1= re.compile(r"\b[A-Z][a-zàâïçéèëêïîöôœûüù]{2,}[^1-9]\b")
     
    f_anti= open("Antidictionnaire.txt", "r")
    t_anti= f_anti.read()
    f_anti.close()
     
    anti= re.split ("\n", t_anti)
    anti.append('trl')
    anti.append('lorsqu')
    anti.append('fig')
    anti.append('iii')
    anti.append('log')
    anti.append('Abx')
     
    for i in range(len(mots)):
        if mots[i].lower() not in dico:
            if mots[i].lower() not in anti:
                if re.findall(cat1, mots[i]):              
                    print "%s %s %s" % (' '.join(mot[i-5:i]), mot[i], ' '.join(mot[i+1:i+6]))
    j'obtiens ce code d'erreur:
    for i in range(len(mots)):
    NameError: name 'mots' is not defined

Discussions similaires

  1. [RegEx] Expression rationnelle
    Par Shadow aok dans le forum Langage
    Réponses: 15
    Dernier message: 28/12/2005, 17h29
  2. Non ambiguïté d'expressions rationnelles
    Par David.Schris dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 27/12/2005, 16h11
  3. [RegEx] Images et expression rationnelle
    Par Invité dans le forum Langage
    Réponses: 7
    Dernier message: 30/10/2005, 15h50
  4. Réponses: 2
    Dernier message: 21/02/2005, 10h42
  5. [langage] Expressions rationnelles (perl/C)
    Par ma2th dans le forum Langage
    Réponses: 11
    Dernier message: 02/08/2004, 18h07

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