Discussion utilisateur:Simplyphil

Le contenu de la page n’est pas pris en charge dans d’autres langues.
La bibliothèque libre.

Bienvenue sur Wikisource en français


Wikisource est un projet collaboratif de la Wikimedia Foundation visant à la mise à disposition du patrimoine écrit. La version francophone a vocation à accueillir les textes en langues françaises, y compris en ancien français et dans la plupart des langues régionales.

Image logo
▷ Qu’est-ce que Wikisource ; qu’est-ce que ce n’est pas ; comment fonctionne-t-elle : pour trouver des réponses à ces questions, une visite sur Qu’est-ce que Wikisource et Introduction à Wikisource vous est proposée.

Image logo
▷ Avant toute contribution, lisez le Guide du nouveau contributeur, les Conventions typographiques et Conventions de nommages des œuvres.
Si vous souhaitez insérer un nouveau texte, n’oubliez pas d’indiquer la source de celui-ci, ou mieux, un lien vers un fac-similé.
Vous devez également respecter le droit d’auteur.

Image logo
▷ Pour tout problème, un lien vers l’aide est disponible dans le menu de gauche et le Memo à l’usage des (nouveaux) contributeurs rassemble les principaux « trucs et astuces ».
Vous pouvez aussi demander de l’aide à la communauté des Wikisourciens sur le Forum des nouveaux ou le Scriptorium, ou en temps réel sur le chat IRC, ou encore en demandant à être parrainé.

Image logo
▷ Vous pouvez indiquer, sur votre page utilisateur, les langues que vous parlez, vos centres d’intérêt et/ou une brève description. Vous pouvez aussi l’utiliser pour organiser vos outils personnels, vos contributions, etc. Vous pouvez vous entraîner à utiliser les outils en vous créant une sous-page de brouillon à cet effet en cliquant ici. Un mode d’emploi est disponible sur la syntaxe Wiki.
Sur les pages de discussion, pensez à signer vos contributions en cliquant sur l’icône de la barre d’outils.


Bonne continuation parmi nous, Simplyphil !

Les contributeurs de Wikisource
--Zephyrus 29 mai 2006 à 14:27 (UTC)[répondre]

Salut,

Quelle est la source de ce livre ? Cordialement, Yann 20 juillet 2006 à 19:24 (UTC)[répondre]

Désolé pour la réponse tardive (mieux vaut tard que jamais)! Comme indiqué sur la page de discussion du bouquin, il vient du projet Gutenberg.

ebooksgratuits.com a une version correctement formatée de ce livre. Je me demande si ça ne serait pas moins de travail de recopier leur version plutôt que de corriger la nôtre. Yann 30 septembre 2007 à 12:42 (UTC)[répondre]
merci pour le lien, je vais m'en servir comme source supplémentaire. A priori les problèmes de typo existants peuvent être résolus en passant le texte à travers certains filtres "rechercher-remplacer", je vais regarder ça. Simplyphil 30 septembre 2007 à 12:57 (UTC)[répondre]

Importation assistée[modifier]

Je vidais mes fonds de tiroirs, et je suis retombé sur un script que j'avais créé l'année passée pour faire une conversion rapide des textes provenant du projet gutenberg vers la syntaxe wiki. Je publie le code source ici, peut-être sera-t-il utile à quelqu'un.

# -*- coding:utf-8 -*-
# Voici par exemple le script utilisé pour Michel Strogoff
# Prend comme source le fichier txt du projet Gutenberg et retourne une batterie de fichiers textes
#  prêts à être inclus dans le wiki.
# Nécessite en général des ajustements spécifiques à chaque livre
# Etant débutant en programmation, ce code n'est sans doute pas empli de "bonnes pratiques"
import os, os.path, roman, re, codecs
# roman.py provient des exemples du livre Dive Into Python 
# http://diveintopython.adrahon.org/

class Livre:
    def __init__(self, titre, auteur="", annee=""):
        self.titre = titre
        self.parties = {}
        self.auteur = auteur
        self.annee = annee

    def generateWiki(self):
        index = self.generateIndexPage()
        f = codecs.open("index.txt", "w", "utf-16")
        f.write(index)
        f.close()
        for i, partie in self.parties.iteritems():
            for j, chapitre in self.parties[i].chapitres.iteritems():
                title = self.titre + " - Partie " + str(i) + ", Chapitre " + str(j)
                res = codecs.open(title + ".txt", "w", "utf-16")
                res.write(self.generatePage(i, j))
                res.close()
        
    
    def generateIndexPage(self):
        header = [
        u"<div class=prose>",
        u"",
        u"{{Titre|%s|[[%s]]|%s<br>}}" % (self.titre, self.auteur, self.annee),
        u""]
        
        page = []
        for i, partie in self.parties.iteritems():
            page.append(u"*'''%s'''" % (partie.titre.strip().capitalize()))
            for chapitre in self.parties[i].chapitres.itervalues():
                page.append(u"**[[%s - Partie %s, Chapitre %s|Chapitre %s]] %s" % (titre, i, chapitre.id, roman.toRoman(int(chapitre.id)), chapitre.titre.strip().capitalize()))
        
        footer = [
        u"</div>",
        u"[[Catégorie:Romans]]",
        u"[[Catégorie:%se siècle]]" % (roman.toRoman(int(self.annee[:2])+1)),
        u"[[Catégorie:%s]]" % (self.annee),
        u"{{textquality|50%}}"
        ]
        
        return u"\u000D\u000A".join(header + page + footer)
        
    def generatePage(self, partie, chapitre):
        header = ["<div class=prose>", self.generateNavBar(partie, chapitre-1, chapitre+1), u"", u""]
        title = u"<center>'''" + self.parties[partie].chapitres[chapitre].titre.strip().capitalize() + u"'''</center>"
        self.parties[partie].chapitres[chapitre].cleanup()
        body = [self.findFootNotes(u"\u000D\u000A".join(self.parties[partie].chapitres[chapitre].body))]
        footer = ["</div>"]
        return u"\u000D\u000A".join(header + [title] + body + footer)

    def generateNavBar(self, part, prev=None, next=None):
        navbar = []
        if prev < 1 or prev == None:
            if part == 1:            
                navbar = [
                u"{{NavigateurDébut|",
                u"[[%s]]" % (self.titre) ,
                u"|[[%s - Partie %s, Chapitre %s|Chapitre %s]]}}" % (titre, part, next, next)]
            else:
                navbar = [
                u"{{Navigateur|",
                u"[[%s - Partie %s, Chapitre %s|%s]]" % (self.titre, part-1, len(self.parties[part-1].chapitres), self.parties[part-1].titre.strip().capitalize()),
                u"|[[%s]]|" % (self.titre),
                u"[[%s - Partie %s, Chapitre %s|Chapitre %s]]" % (self.titre, part, next, next),
                u"}}"]
                
            
        elif next > len(self.parties[part].chapitres) or next == None:
            if part == len(self.parties):
                navbar = [
                u"{{NavigateurFin|",
                u"[[%s - Partie %s, Chapitre %s|Chapitre %s]]" % (self.titre, part, prev, prev),
                u"|[[%s]]}}" % (self.titre)]
            else:
                navbar = [
                u"{{Navigateur|",
                u"[[%s - Partie %s, Chapitre %s|Chapitre %s]]" % (self.titre, part, prev, prev),
                u"|[[%s]]|" % (self.titre),
                u"[[%s - Partie %s, Chapitre %s|%s]]" % (self.titre, part+1, 1, self.parties[part+1].titre.strip().capitalize()),
                u"}}"]

        else :                
            navbar = [
            u"{{Navigateur|",
            u"[[%s - Partie %s, Chapitre %s|Chapitre %s]]" % (self.titre, part, prev, prev),
            u"|[[%s]]|" % (self.titre),
            u"[[%s - Partie %s, Chapitre %s|Chapitre %s]]" % (self.titre, part, next, next),
            u"}}"]
            
        return u"".join(navbar)
        
    def findFootNotes(self, body):
        regex = re.compile("\[(.*?)\]", re.DOTALL)
        matches = regex.findall(body)
        print matches
        if matches:
            body += u"\u000D\u000A\u000D\u000A----\u000D\u000A"
            for i, match in enumerate(matches):
                body = body.replace(u"[" + match + u"]", u"{{refl |%s}}" % (i+1))
                body += u":{{refa |%s}}" % (i+1) + match.replace(u"\u000D\u000A", " ") + u"\u000D\u000A"
            
        return body

class Partie:
    def __init__(self, id, titre):
        self.chapitres = {}
        self.titre = titre
        self.id = id

class Chapitre:
    def __init__(self, id, titre):
        self.body = []
        self.titre = titre
        self.id = id
        
    def cleanup(self):
        tempbody = []
        for line in self.body:
            cleanline = line.strip().replace("_", "''").replace("--", u"—")
            tempbody.append(cleanline)
        self.body = tempbody
        
        
def getNextLine(lines):
    for line in lines[1:]:
        if line[0].isupper():
            return line
    return ""

f = codecs.open("mchls10.txt", "r", "utf-16")
lines = f.readlines()
f.close()

titre = os.path.split(os.getcwd())[1]
auteur = "Jules Verne"
annee = "1874"

livre = Livre(titre, auteur, annee)

partiecount = 0
chapcount = 0

flag = True


for i, line in enumerate(lines):
    try:    
        if line.split()[-1] == "PARTIE":
            chapcount = 0
            flag = False
            partiecount += 1
            livre.parties[partiecount] = Partie(partiecount, line)
            #print "Partie", partiecount
            #print
    except:
        pass
            
    if line.startswith("CHAPITRE"):
        chapcount += 1
        #print "Chapitre", chapcount, ":", getNextLine(lines[i:i+5]).capitalize()
        livre.parties[partiecount].chapitres[chapcount] = Chapitre(chapcount, getNextLine(lines[i:i+5]))
        flag = False
        
    try:
        if line == livre.parties[partiecount].chapitres[chapcount].titre:
            flag = False
    except:
        pass
    
    if flag and chapcount:
        livre.parties[partiecount].chapitres[chapcount].body.append(line)
        
    flag = True
    

livre.generateWiki()