Traitement de mot [Résolu]

nournina 52 Messages postés dimanche 27 octobre 2013Date d'inscription 17 juin 2014 Dernière intervention - 17 févr. 2014 à 18:19 - Dernière réponse : nournina 52 Messages postés dimanche 27 octobre 2013Date d'inscription 17 juin 2014 Dernière intervention
- 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()
Afficher la suite 

10 réponses

Répondre au sujet
Mints 67 Messages postés mercredi 1 novembre 2000Date d'inscription 18 février 2018 Dernière intervention - 17 févr. 2014 à 22:24
0
Utile
9
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é...."

--
Mints 67 Messages postés mercredi 1 novembre 2000Date d'inscription 18 février 2018 Dernière intervention - 20 févr. 2014 à 12:44
modifie la ligne 25 par :
                if (lettre in string.punctuation and lettre != "'") or lettre.isdigit() :
nournina 52 Messages postés dimanche 27 octobre 2013Date d'inscription 17 juin 2014 Dernière intervention - 20 févr. 2014 à 13:26
merci bien c'est bien résolue
nournina 52 Messages postés dimanche 27 octobre 2013Date d'inscription 17 juin 2014 Dernière intervention - 20 févr. 2014 à 16:42
mais monsieur le problème de codage et décodage
quand le fichier est écrit en lettre arabe ça se pose un problème de codage
Mints 67 Messages postés mercredi 1 novembre 2000Date d'inscription 18 février 2018 Dernière intervention - 21 févr. 2014 à 12:55
avec ce code ça devrait marcher mais il faut que ton fichier texte 1 soit sauvegardé au format 'utf-8', option que tu peux choisir quand tu fais 'sauvegarder sous...' avec not-pad :

# -*- coding: utf-8 -*-
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().decode('utf-8') # on décode et sauvegarde dans une variable la ligne courante 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.lower() # on passe en minuscule tous les caractères de la ligne

        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 != "'") or lettre.isdigit() :
                    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:
        motDecompose =  motDecompose.encode('utf-8') # on réencode chaque mot avant de le sauvegarder
        fichier2.write(motDecompose+'\n')
    fichier2.close()        
nournina 52 Messages postés dimanche 27 octobre 2013Date d'inscription 17 juin 2014 Dernière intervention - 21 févr. 2014 à 13:42
c'est bien résolue merci beaucoup monsieur
Commenter la réponse de Mints

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.