Branches de langues et arborescence

- - Dernière réponse : yg_be
Messages postés
8864
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
8 novembre 2019
- 8 nov. 2019 à 22:24
Bonjour,
j'ai le code suivant pour traiter les branches des langues et j'ai eu des résultats avec des dupliques. voici le code que j'ai fait :
from bs4 import BeautifulSoup
import json
import os

"""Trouver les langues d'une branche"""
#variables
os.chdir("projet_Embarki/Embarki-Data/")
directory_name = "projet_Embarki/Embarki-Data/Branches/"
listBranches = os.listdir("Branches/")
file1=open("text.txt","w")
os.chdir("Branches/")
dico={}
for i in listBranches:
soup=BeautifulSoup(open(i).read(),"lxml")
finder=soup.find_all("a")
dico[i.replace(".html","")]={j.string for j in finder if j["href"].endswith("html")}
dico2={}
for i,j in dico.items():
for a,b in dico.items():
if j.issubset(b) and a!=i:
#print(i,a)
if a not in dico2:
dico2[a]=[i]
else: dico2[a].append(i)
dico3={}
for i,j in dico2.items():
dico3[i]=[{a:list(dico[a]) for a in j}]
file1.write("%s\n"%(i))
for k in j:
file1.write("\t%s\n\t\t%s\n"%(k,"\n\t\t".join(dico[k])))
os.chdir("..")
monFichier= open("branches.json", "w")
json.dump(dico3,monFichier)
monFichier.close()
file1.close()

comment je peut supprimer les résultats répétés sans avoir un résultats faux ?
voici un exemple de mon résultats :
Austronesian
Oceanic
HAWAIIAN
Oceanic
Austronesian
HAWAIIAN
East Malayo-Polynesian
Austronesian
HAWAIIAN
Oceanic
HAWAIIAN
merci :)



Configuration: Windows / Chrome 77.0.3865.120
Afficher la suite 

3 réponses

Messages postés
3502
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
8 novembre 2019
917
0
Merci
Bonjour,

Essayer de comprendre un code Python présenté sans les indentations, c'est complètement vain.
Pourriez-vous modifier votre message pour utiliser les balises <code python > afin d'avoir la coloration syntaxique ? (Les balises doivent encadrer le code source, et on les trouve sur le bouton à côté des boutons de mise en forme B I S au dessus de la zone de saisie)

Merci,

Xavier
Commenter la réponse de Reivax962
Messages postés
8864
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
8 novembre 2019
446
0
Merci
bonjour, pourrais-tu donner des noms explicites à tes variables, ajouter des commentaires pour expliquer ce que tu penses que ton programme fait, et ajouter des print() pour vérifier et nous montrer ce que fait ton programme?
le résultat que tu donnes en exemple, est-ce le contenu d'un fichier? si oui, lequel?
peux-tu également donner le contenu des fichiers lus par ton programme?
Commenter la réponse de yg_be
0
Merci
<gras>Bonjour, en fait ma mission est de normaliser une liste de langues et de branches de langues qui prennent le format html, il prend chaque langue et il la met sous la branche elle appartient, sauf que j'ai pas mal de cas où une langue se répete plusieurs fois sous plusieurs branches différentes : par exemple supposant que le programme m'affiche que le Français appartient à la famille indoueuropéénne et la famille sémitique aussi ce qui est faux. j'arrive pas a modifier dans ce code afin qu'il élémine les réseultats dupliqués et me rend un résultats correcte. j'ai fait le code suivant :


from bs4 import BeautifulSoup
import json
import os

"""Trouver les langues d'une branche"""

<os.chdir("projet_Embarki/Embarki-Data/") # le dossier qui contient les fichiers html
directory_name = "projet_Embarki/Embarki-Data/Branches/"
listBranches = os.listdir("Branches/")
file1=open("text.txt","w")
os.chdir("Branches/")
dicctionnaire={}
for i in listBranches:
soup=BeautifulSoup(open(i).read(),"lxml")
finder=soup.find_all("a")
dictionnaire[i.replace(".html","")]={j.string for j in finder if j["href"].endswith("html")} # ce code est pour trouver un fichier qui s'appelle (href) et le modifier par un fichier que son nom se termine par html (pour que le programme puisse le trouver)
dictionnaire2={}
for i,j in dicctionnaire.items():
for a,b in dicctionnaire.items():
if j.issubset(b) and a!=i:
#print(i,a)
if a not in dicctionnaire2:
dicctionnaire2[a]=[i]
else: dicctionnaire2[a].append(i)
dictionnaire3={}
for i,j in dicctionnaire2.items():
dicctionnaire3[i]=[{a:list(dico[a]) for a in j}]
file1.write("%s\n"%(i))
for k in j:
file1.write("\t%s\n\t\t%s\n"%(k,"\n\t\t".join(dicctionnaire[k])))
os.chdir("..")
monFichier= open("branches.json", "w")
json.dump(dicctionnaire3,monFichier)
monFichier.close()
file1.close()
 />


en fin j'ai eu un réslutat comme suite :
Austronesian : # branche de langue qui contient :
Oceanic : #sous branche qui contient :
HAWAIIAN : #langue
Oceanic: # ici il considere cette sous branche comme une branche:
Austronesian : #le contraire du 1er resultat
HAWAIIAN: #langue
East Malayo-Polynesian: #une branche
Austronesian: #sous branche
HAWAIIAN : une langue
Oceanic: #branche
HAWAIIAN : #cette langue par ex se répète pour la 4eme fois
aidez moi svp et j'espère que j'ai bien expliqué !!
<code><code>
</code></code>
merci :)
yg_be
Messages postés
8864
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
8 novembre 2019
446 -
comme tu peux le voir, le code que tu as posté est illisible. tu n'as pas correctement utilisé les balises de code.
tu n'as que très partiellement appliqué mes suggestions en #2.
Désolé je ne maîtrise pas les codes dans ce site je vais essayer de poster des captures d'écran si possible merci
yg_be
Messages postés
8864
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
8 novembre 2019
446 > Ridanafir -
je te suggère de prendre le temps de maîtriser les balises de code sur ce site.
tu n'as que très partiellement appliqué mes suggestions en #2.
Commenter la réponse de RidaNafir