Youni Verciti has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/279753

Change subject: Rev 0.2.2 Add tools for fr:wv namespaces
......................................................................

Rev 0.2.2 Add tools for fr:wv namespaces

Change-Id: I9dff97af316aecc9c860d8d7b9c496e57d1c2fe2
---
A tools/dpt.py
A tools/fac.py
2 files changed, 219 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/labs/tools/vocabulary-index 
refs/changes/53/279753/1

diff --git a/tools/dpt.py b/tools/dpt.py
new file mode 100755
index 0000000..1552607
--- /dev/null
+++ b/tools/dpt.py
@@ -0,0 +1,120 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+### Liste les pages de l'espace de nom "Département" nº 108 
+### Liste les Départements dans le fichier local "Départements.csv"
+### Liste les sous-pages. les liens dans leçons par thèmes et leçons par 
niveaux
+### Compare les deux liste de liens et les fusionne
+### Verifie si les pages derrière les liens existent
+### Compare le nombre de page d'interface et le nombre de leçons du département
+
+import pywikibot
+lang = 'fr'                    # prefixe langue
+family = 'wikiversity'
+site = pywikibot.Site(lang, family)  # The site we want to run our bot on
+gen_dpt = site.allpages(namespace=108, prefix='p')
+log = ''
+sous_pages = []
+all_sous_pages = [] # DEBUG liste brute des sous_pages
+no_match = [] 
+data_dpt = {}    # [departement] = sous_pages
+curent = u''
+count_all = 0
+for page in gen_dpt:
+  count_all = count_all + 1
+  str_page = str(page) # il faut une chaine
+  if '/' in str_page:
+    all_sous_pages.append(page)
+    prefix = curent[ 0 : -2]
+    if prefix in str_page:
+      sous_pages.append(page)  # Incrémente la liste des sous-pages
+    else:   # ATTENTION
+      no_match.append(page)    # Stock les sous-pages dont le prefix ne 
correspond pas
+      log = log + 'Mauvais prefix, '+ str_page + 'n\'est pas une sous-page de 
' + str(curent) + '.\n'
+  else:   # Pas de separateur donc département
+    departement = page
+    curent = str_page
+    print departement
+    sous_pages = []
+    data_dpt[departement] = sous_pages
+# data_dpt[departement] = sous_pages
+count = 0
+for departement in sorted(data_dpt):
+  count = count + 1
+  print count
+  sous_pages = data_dpt[departement]
+  dpt_params = [sous_pages]
+  list_link_theme = [] # Liste Leçons par Thèmes
+  list_link_niveau = [] # Liste Leçons par Niveaux
+  str_departement = str(departement)
+  theme = str_departement[2:-2] + '/Leçons par thèmes'
+  title = unicode(theme, 'utf-8')
+  page = pywikibot.Page(site, title)
+  exist = page.exists()   # Si la page existe
+  if exist:
+    #print 'YES EXIST'
+    gen_lesson_theme = page.linkedPages(namespaces=0) # place les pages liéés 
dans un generateur
+    for link_theme in gen_lesson_theme: # chaque element du generateur
+      list_link_theme.append(link_theme) # est stocké dans la liste des leçons 
par thèmes
+    dpt_params = [sous_pages, list_link_theme]
+    data_dpt[departement] = dpt_params # la liste est ajoutée au tuple    
+  else: 
+    log = log + theme + ' NO exist\n'
+    dpt_params = [sous_pages, list_link_theme]
+    data_dpt[departement] = dpt_params
+  niveau = str_departement[2:-2] + '/Leçons par niveaux'
+  title = unicode(niveau, 'utf-8')
+  page = pywikibot.Page(site, title)
+  exist = page.exists() 
+  if exist:
+    gen_lesson_niveau = page.linkedPages(namespaces=0) # place les pages liéés 
dans un generateur
+    for link_niveau in gen_lesson_niveau: # chaque element du generateur
+      list_link_niveau.append(link_niveau) # est stocké dans la liste des 
leçons par 
+    dpt_params = [sous_pages, list_link_theme, list_link_niveau]
+    data_dpt[departement] = dpt_params   
+  else: 
+    log = log + niveau + 'NO exist\n'
+    dpt_params = [sous_pages, list_link_theme, list_link_niveau]
+    data_dpt[departement] = dpt_params 
+# LE tuple contient, liste des départements, listes des sous-pages, des leçons 
par themes et par niveaux
+
+file_departements_params = open('Départements.csv', 'w') # ouvre le fichier 
local en écriture
+line_1 = 'Départements, Sous-pages, Leçons par thèmes, Leçons par niveaux, 
Ajouter, Total liens, Page existe, Balance \n'
+file_departements_params.write(line_1)
+#count_sous_pages = 0
+for departement in data_dpt: # chaque departement
+  #count_sous_pages = count_sous_pages + len(sous_pages)  # BUG différent du 
nombre total de sous-pages
+  dpt_params = data_dpt[departement]
+  [sous_pages, list_link_theme, list_link_niveau] = dpt_params
+  list_link_add = []    # vider à chaque passage
+  list_link_total = []   # vider à chaque passage
+  list_link_exist = []  # vider à chaque passage
+  for link_niveau in list_link_niveau: # chaque leçon par niveau (tester avec 
if not)
+    if link_niveau in list_link_theme:   # si contenue dans la liste par theme
+      pass
+    else:
+      list_link_add.append(link_niveau) # Sinon ajoute dans la Liste Lien 
Additionnel
+  dpt_params = [sous_pages, list_link_theme, list_link_niveau, list_link_add]
+  list_link_total = list_link_theme + list_link_add   # Liste des Lien Joints 
= leçons par thèmes + par niveaux flitrées
+  dpt_params = [sous_pages, list_link_theme, list_link_niveau, list_link_add, 
list_link_total]
+  #data_dpt[departement] = sous_pages, list_link_theme, list_link_niveau, 
list_link_add, list_link_total
+  for link in list_link_total: 
+    page = link #title #pywikibot.Page(site, title)
+    exist = page.exists()   # Si la page existe
+    if exist:
+      list_link_exist.append(link)   # Liste des Liens existants (Touched)
+    else:
+      pass
+  dpt_params = [sous_pages, list_link_theme, list_link_niveau, list_link_add, 
list_link_total, list_link_exist]
+  balance = len(list_link_exist) - (len(sous_pages) + 1)
+  dpt_params.append(balance)
+  data_dpt[departement] = dpt_params #sous_pages, list_link_theme, 
list_link_niveau, list_link_add, list_link_total, list_link_exist, balance
+  csv = '"'+ str(departement) + '", ' + str(len(sous_pages))  + ', ' + 
str(len(list_link_theme)) + ', ' + str(len(list_link_niveau) ) + ', ' + 
str(len(list_link_add) ) + ', ' + str(len(list_link_total)) + ', ' + 
str(len(list_link_exist))  +  ', ' + str(balance) + '\n'
+  # Ajouter en en-tête le nombre de pages, sous-pages et total
+  file_departements_params.write(csv) # 
+file_departements_params.close()
+print log
+print count_all
+print len(data_dpt)
+print len(all_sous_pages)
+print len(no_match)
diff --git a/tools/fac.py b/tools/fac.py
new file mode 100755
index 0000000..910bedb
--- /dev/null
+++ b/tools/fac.py
@@ -0,0 +1,99 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+########################################################################
+### Création d'une liste de faculté 
+### basée sur l'analyse de l'espace de nom "Faculté:" via Pywikibot sur num_id 
"106"
+### modifier les var num_id language et api pour obtenir les listes en,de,es,pt
+### le script produit un fichier csv, liste des facultés & départements 
associés
+### ATTENTION la page accueil (à déplacere t renommer) et la page Sociologie 
(Redirection)
+# voir nb dept Médecine 73 ou 75?
+########################################################################
+
+import pywikibot
+lang = 'fr'                    # prefixe langue
+family = 'wikiversity'
+site = pywikibot.Site(lang, family) # On obtient très facilement la liste des 
pages dans l'espace de nom 106 Faculté via Pywikibot
+gen_fac = site.allpages(namespace=106) #, prefix='a')
+count = 0
+liste_facultes = []  # pages
+liste_sous_pages = [] # sous-pages
+
+for page in gen_fac:
+  str_page = str(page) # il faut une chaine pour re
+  if '/' in str_page: #mosp:
+    liste_sous_pages.append(page)  # La liste des sous-pages
+  else:
+    liste_facultes.append(page)   # La liste des facultés
+print str(len(liste_facultes)) + ' Facultés\nListe des départements pour 
chaque faculté'
+
+fFac = open('Fac.csv', 'w')
+fFac.write('Faculté, Nombre département(s)\n') # Liste des départements
+totalDpt = 0 # Ce total ne tient pas compte des doublons ( 1 dept=> +2 Fac)
+
+data_fac = {}   # key = faculté ; value = fac_params
+for faculte in liste_facultes:   # pour chaque faculté
+  fac_params = []     # liste contenanat celle des departements (gen_dpt) puis 
nombre_departement
+  sous_page_fac = []  # Liste les sous_pages de chaque faculté dans ns
+  str_faculte = str(faculte)
+  str_faculte = str_faculte[0:-2] + '/'  # tronque les crochets fermants et 
Ajoute le separateur 
+  for sous_page in liste_sous_pages:     # Attribue les sous-pages sur la base 
du prefix
+    str_sous_page = str(sous_page)       # 
+    if str_faculte in str_sous_page:     # en comparant les deux chaines
+      sous_page_fac.append(sous_page)    # Pas d'autre verification...
+  fac_params.append(sous_page_fac)       # Affecte la liste sp_fac comme 
premier elemnt de liste fac_params
+  gen_dpt = faculte.linkedPages(namespaces=108)
+  fac_params.append(gen_dpt)
+  nombre_departement = 0   # Initialise le compteut de département
+  texte = ''
+  for departement in gen_dpt:   # Pour chaque lien dans le generateur PWB
+    nombre_departement = nombre_departement + 1   # Compte les départements
+    #texte = (texte + str(departement) + ' ; ')    # ATTENTION impression 
liste des departements désactivé
+    ### Pour enregistrer localement coder les chaines en string!     
+  fac_params.append(nombre_departement)   # Le nombre de dṕartement par faculté
+  data_fac[faculte] = fac_params
+  nb_sous_page = len(sous_page_fac)
+  s_nb_sp = str(nb_sous_page)
+  texte = str(nombre_departement) + ', ' + s_nb_sp     
+  fFac.write(str(faculte) + ', ' + texte + '\n')   # Imprime une faculté, 
nb_departement, nb sous-page 
+  ### Imprimer une liste supplémentaire
+  ### titre de la page = ../Liste des départements par faculté
+  ### == Faculté ==
+  ### * Departement 1
+  ### * Departement 2...
+  totalDpt = totalDpt + nombre_departement
+  print nombre_departement
+fFac.close()
+print str(totalDpt) + ' dept répartis dans les facultés'
+#   data_fac[faculte] = fac_params (sous_page_fac, gen_dpt, nombre_departement)
+
+### Pour obtenir le nombre departements, les facultés associées et leur nombre
+### Nous inversons le dictionnaire (Liste des facultés par département)
+dpt_fac = {}            # Tuple invere
+for page in data_fac:   #  Pour Chaque faculté
+  fac_params = data_fac[page]  # une liste de parametres
+  [sous_page_fac, gen_dpt, nombre_departement] = fac_params # Liste des 
parametre deja dans le tuple
+  for departement in gen_dpt:  # pour chaque departement dans cette faculté
+    if not departement in dpt_fac:   # Si le departement n'est pas dans le 
tuple inverse
+      l_fac = []         # Initialise Liste des faculté pour ce departement
+      l_fac.append(page) # Ajoute la faculté dans la liste
+      dpt_fac[departement] = l_fac   # enregistre clé valeur dans le tuple 
invers
+    else:   # Le departement est deja dans le tuple inverse
+      l_fac = dpt_fac[departement]  # Recupere la liste 
+      l_fac.append(page)            # Ajoute la faculté dans la liste
+
+f_dpt_fac = open('dpt_fac.csv', 'w')
+f_dpt_fac.write('Departement, Nombre Faculté(s), Liste des Facultés\n')
+for dpt in dpt_fac:  
+  l_fac = dpt_fac[dpt]
+  nb_fac_dep = len(l_fac)
+  dpt_params = [nb_fac_dep, l_fac]
+  dpt_fac[dpt] = dpt_params
+  texte = '"' + str(dpt) + '", '   # + str(len(l_fac)) + ', '
+  print_fac = ''
+  for fac in l_fac:
+    print_fac = print_fac + str(fac) + ' - '
+  f_dpt_fac.write(texte +  str(nb_fac_dep) + ', ' + print_fac + '\n')
+f_dpt_fac.close()
+print len(dpt_fac)
+### Imprimer le tableau  directement dans une page distincte
+### titre page = ../Liste des facultés par département
\ No newline at end of file

-- 
To view, visit https://gerrit.wikimedia.org/r/279753
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I9dff97af316aecc9c860d8d7b9c496e57d1c2fe2
Gerrit-PatchSet: 1
Gerrit-Project: labs/tools/vocabulary-index
Gerrit-Branch: master
Gerrit-Owner: Youni Verciti <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to