Traitement de mot

Résolu
nournina
Messages postés
52
Date d'inscription
dimanche 27 octobre 2013
Statut
Membre
Dernière intervention
17 juin 2014
- Modifié par BunoCS le 17/02/2014 à 21:08
nournina
Messages postés
52
Date d'inscription
dimanche 27 octobre 2013
Statut
Membre
Dernière intervention
17 juin 2014
- 21 févr. 2014 à 13:42
bonjour,
je fait un petit script en python2.7 qui fait lire un fichier1.txt et lire tout les mots qui se trouvent dans le fichier1.txt ensuite il crée un autre fichier1.txt.out qui écrit dans le dernier les mot du premier sans écrire les mot déjà existé et fait chaque mot dans une ligne et faire segmenter exemple: (mot bien écrit ) devient:( m o t
b i e n
é c r i t )
j'espère que vous compris
le problème que j'ai c'est que se code n'écrit pas les mot inclut
exemple: si dans le fichier1.txt il y a le mot: "courtoisie" et le mot "court" le programme écrit le mot "courtoisie" mais le mot "court" ne l'écrit pas parce que il est inclut dans le premier
et merci d'avance
voici mon code:

#! /usr/bin/ python
# -*- coding: utf-8 -*-
import sys
import string
begin_word=""
end_word="\n"
def isnewword(wordsearch):
    isnewword=True
    outfsearch=outf
    outfsearch.seek(0)
    for linesearch in outfsearch:        
        if linesearch.find(wordsearch.encode('utf-8'))!=-1:
            return False
    if outline.find(wordsearch)!=-1:
        return False
    return isnewword
try:
    inf=open(sys.argv[1],"rb")
except IndexError:
    print "erreur ... pas de fichier IN"
    sys.exit()
try:
    outf=open(sys.argv[2],"wb+")
except IndexError:
        outf=open(sys.argv[1]+".out","wb+")
for line in inf:
    line="".join([word if word not in string.punctuation else " " for word in line])
    line=line.lower()
    line=line.split()
    outline=""
    for word in line:
        word=begin_word + " ".join(word.decode('utf8')) + end_word
        if isnewword(word)==True:
            outline=outline + word 
    outf.write(outline.encode('utf8'))
inf.close()
outf.close()
A voir également:

1 réponse

Mints
Messages postés
69
Date d'inscription
mercredi 1 novembre 2000
Statut
Membre
Dernière intervention
1 juin 2018
7
17 févr. 2014 à 22:24
C'est très compliqué ce que tu as fait, de mon coté j'ai fait ce code ,mais le problème vient peut-être du format d'encodage des accents (chez moi ça marche très bien). Tiens moi au courant.
# -*- coding: cp1252 -*-

listeMotsFichier1 = [] #<- liste contenant une unique occurence des mots analysés ligne par ligne dans le fichier 1
motCourant = None  
listeMotsDecomposes = [] 

try:
    fichier1 = open('liste1.txt','r')
    while 1:
        motCourant = fichier1.readline().lower()
        if motCourant == '':  # quand on tombe sur une ligne vide on stop la lecture (fin de fichier)
            break
        # si le mot courant a déjà été analysé
        if motCourant in listeMotsFichier1:
            # on le zappe et on continue la progression
            print motCourant[:-1],' : mot déjà enregistré dans fichier 2 ...' # motListe[:-1] -> le mot sans le caractère retour chariot(\n) à la fin 
            continue
        # sinon on le décompose
        else:
            motDecompose = ''
            for lettre in motCourant[:-1]:
                motDecompose += lettre + ' '
            listeMotsDecomposes.append(motDecompose)
            print motCourant[:-1],' : mot non présent dans fichier 2  -> enregistré...'

            listeMotsFichier1.append(motCourant) # on l'ajoute dans la liste des mots analysés

    fichier1.close()

    fichier2 = open('liste2.txt','w') # si le fichier n'existe pas il sera créé
    for motDecompose in listeMotsDecomposes:
        fichier2.write(motDecompose+'\n')
    fichier2.close()        

except :
    print "fichier1 non trouvé...."

--
0
nournina
Messages postés
52
Date d'inscription
dimanche 27 octobre 2013
Statut
Membre
Dernière intervention
17 juin 2014
1
18 févr. 2014 à 10:40
merci bien mais se code ne fait pas la segmentation d'un mot,
mon code fait le segmentation de mot et supprime la ponctuation.
si vous pouvez modifier mon code pour qu'il écrire les mots qui sont inclut dans d'autre mot.
0
Mints
Messages postés
69
Date d'inscription
mercredi 1 novembre 2000
Statut
Membre
Dernière intervention
1 juin 2018
7
19 févr. 2014 à 10:28
C'est peut-être un peu plus cela ce que tu veux :

# -*- coding: cp1252 -*-
import string

listeMotsFichier1 = []   # liste contenant une unique occurence des mots analysés ligne par ligne dans le fichier 1
ligneCourante = None     # la ligne courante analysée
listeMotsDecomposes = [] # tous les mots qui seront sauvegardés dans le fichier 2

try:
    fichier1 = open('liste1.txt','r')
    while 1:
        ligneCourante = fichier1.readline().lower() # on sauvegarde dans une variable la ligne courante en minuscule analysée dans le fichier 1
        if ligneCourante == '':  # quand on tombe sur une ligne vide, on stop la lecture (fin de fichier)
            break
        ligneCourante = ligneCourante[:-1].split(' ') # on  segmente la ligne courante par mot(sans tenir compte du dernier caractère : '\n'(retour chariot)

        # pour chaque mot de la ligne
        # on crée une variable ne contenant que les lettres du mot (sans ponctuation, à part le ' qui est considéré par python comme un signe de ponctuation        
        for mot in ligneCourante:
            motSauvegarde = ''   
            for lettre in mot :
                if lettre in string.punctuation and lettre != "'":
                    continue
                motSauvegarde += lettre
            if len(motSauvegarde) == 0: # si le mot courant était un ou un ensemble de signes de ponctuation, on passe au mot suivant
                continue
            # si ce mot n'a pas déjà été rencontré dans le fichier 1
            if motSauvegarde not in listeMotsFichier1:
                listeMotsFichier1.append(motSauvegarde) # on le sauvegarde dans la liste des mots du fichier 1
                # on remplie une variable de chaque lettre de ce mot plus un espace                
                motDecompose = ''  
                for lettre in motSauvegarde:
                    motDecompose += lettre + ' '
                # on l'ajoute à notre liste de mots décomposés qui sera sauvegardée dans le fichier 2                    
                listeMotsDecomposes.append(motDecompose) 

    fichier1.close()

    # Sauvegarde de la liste des mots décomposés dans le ficher 2
    fichier2 = open('liste2.txt','w') # si le fichier n'existe pas il sera créé
    for motDecompose in listeMotsDecomposes:
        fichier2.write(motDecompose+'\n')
    fichier2.close()        

except :
    print "fichier1 non trouvé...."
0
Mints
Messages postés
69
Date d'inscription
mercredi 1 novembre 2000
Statut
Membre
Dernière intervention
1 juin 2018
7
19 févr. 2014 à 10:45
pour mieux gérer les erreurs d'ouverture du fichier 1:

# -*- coding: cp1252 -*-
import sys
import string

listeMotsFichier1 = []   # liste contenant une unique occurence des mots analysés ligne par ligne dans le fichier 1
ligneCourante = None     # la ligne courante analysée
listeMotsDecomposes = [] # tous les mots qui seront sauvegardés dans le fichier 2

try:
    fichier1 = open('liste1.txt','r')
except IOError:
    print "fichier1 non trouvé...."
else:
    while 1:
        ligneCourante = fichier1.readline().lower() # on sauvegarde dans une variable la ligne courante en minuscule analysée dans le fichier 1
        if ligneCourante == '':  # quand on tombe sur une ligne vide, on stop la lecture (fin de fichier)
            break
        ligneCourante = ligneCourante[:-1].split(' ') # on  segmente la ligne courante par mot(sans tenir compte du dernier caractère : '\n'(retour chariot)

        # pour chaque mot de la ligne
        # on crée une variable ne contenant que les lettres du mot (sans ponctuation, à part le ' qui est considéré par python comme un signe de ponctuation        
        for mot in ligneCourante:
            motSauvegarde = ''   
            for lettre in mot :
                if lettre in string.punctuation and lettre != "'":
                    continue
                motSauvegarde += lettre
            if len(motSauvegarde) == 0: # si le mot courant était un ou un ensemble de signes de ponctuation, on passe au mot suivant
                continue
            # si ce mot n'a pas déjà été rencontré dans le fichier 1
            if motSauvegarde not in listeMotsFichier1:
                listeMotsFichier1.append(motSauvegarde) # on le sauvegarde dans la liste des mots du fichier 1
                # on remplie une variable de chaque lettre de ce mot plus un espace                
                motDecompose = ''  
                for lettre in motSauvegarde:
                    motDecompose += lettre + ' '
                # on l'ajoute à notre liste de mots décomposés qui sera sauvegardée dans le fichier 2                    
                listeMotsDecomposes.append(motDecompose) 

    fichier1.close()

    # Sauvegarde de la liste des mots décomposés dans le ficher 2
    fichier2 = open('liste2.txt','w') # si le fichier n'existe pas il sera créé
    for motDecompose in listeMotsDecomposes:
        fichier2.write(motDecompose+'\n')
    fichier2.close()        
0
nournina
Messages postés
52
Date d'inscription
dimanche 27 octobre 2013
Statut
Membre
Dernière intervention
17 juin 2014
1
20 févr. 2014 à 12:27
ok merci bien mais il ne supprime pas les chiffres qui existe dans le fichier moi je veut un fichier qui contient seulement du texte
0
Mints
Messages postés
69
Date d'inscription
mercredi 1 novembre 2000
Statut
Membre
Dernière intervention
1 juin 2018
7
20 févr. 2014 à 12:44
modifie la ligne 25 par :
                if (lettre in string.punctuation and lettre != "'") or lettre.isdigit() :
0