nournina
Messages postés52Date d'inscriptiondimanche 27 octobre 2013StatutMembreDernière intervention17 juin 2014
-
Modifié par BunoCS le 17/02/2014 à 21:08
nournina
Messages postés52Date d'inscriptiondimanche 27 octobre 2013StatutMembreDernière intervention17 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()
Mints
Messages postés69Date d'inscriptionmercredi 1 novembre 2000StatutMembreDernière intervention 1 juin 20187 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é...."
--
nournina
Messages postés52Date d'inscriptiondimanche 27 octobre 2013StatutMembreDernière intervention17 juin 20141 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.
Mints
Messages postés69Date d'inscriptionmercredi 1 novembre 2000StatutMembreDernière intervention 1 juin 20187 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é...."
18 févr. 2014 à 10:40
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.
19 févr. 2014 à 10:28