Discussion utilisateur:Simplyphil
|
--Zephyrus 29 mai 2006 à 14:27 (UTC)
Salut,
Quelle est la source de ce livre ? Cordialement, Yann 20 juillet 2006 à 19:24 (UTC)
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)
- 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)
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()