Wikipédia:Wikiprojekt FILIT/zlep.py

z Wikipédie, slobodnej encyklopédie
#!/usr/bin/python2.4
# -*- coding: utf-8  -*-

import sys, re

p_a=re.compile('\<a HREF="(.*?)"\>(.*?)\<\/A\>', re.IGNORECASE) #definicia regularneho vyrazu linku
p_p=re.compile('\<p\>', re.IGNORECASE) #definicia regularneho vyrazu paragrafu
p_m=re.compile('^ *', re.IGNORECASE) #definicia regularneho vyrazu paragrafu
p_m2=re.compile('\n *', re.IGNORECASE) #definicia regularneho vyrazu paragrafu
p_m3=re.compile('\n\n\n', re.IGNORECASE) #definicia regularneho vyrazu paragrafu
p_zl=re.compile('^\.\.\/(fv.*?\/.*)', re.IGNORECASE) #definicia regularneho vyrazu paragrafu
p_pomlcka=re.compile('^(.*?)([\w\n]*?-)', re.IGNORECASE | re.MULTILINE) #definicia regularneho vyrazu prvej pomlcky

zoznam_suborov='../abeceda6'

ft=open(zoznam_suborov, 'r') # otvorenie zoznamu html suborov
tabp=ft.read()
tab=tabp.split('\n')

predpona_linku = u''

dic = {}
print len(tab)
n_riadkov=200
n_riadkov=len(tab)-1
for i in range(n_riadkov):
        spl = tab[i].split(' ', 1)
        if len(spl)<=1:
                break
        prava = spl[1].replace('[[', '')
        prava = prava.replace(']]', '')
        lava = spl[0]
        #lava = spl[0].split('/', 1)[1]
#       print lava
#       print prava
        dic [lava]=prava

def nahrad_prvu_pomlc(s):
        m=p_pomlcka.match(s.group(0))
#       print m
        link = m.group(1) + ' je '
#       print link
        return link

def nahrad_prvu_pomlcku(s):
        return re.sub(p_pomlcka, nahrad_prvu_pomlc,s)

def vyhod_medzery(s):
        rr=re.sub(p_m3, '\n\n',s)
        rr=re.sub(p_m, '',rr)
        return re.sub(p_m2, '\n',rr)

def nahrad_linku(s):
        m=p_zl.match(s.group(0))
        link = m.group(1)
#       print link
        if link in dic:
                link = dic[ link ]
#       print 'intra: ' + s.group(0) +' -> ' + m.group(2) + ' -> ' + link
        return link

def nahrad_intralink(s):
        m=p_a.match(s.group(0))
        #link=m.group(1)
        link=re.sub(p_zl, nahrad_linku, m.group(1))
        if '.html' in link:
                if link in dic:
                        link = dic [link]
#               print link
#               print predpona_linku
                if predpona_linku+'/'+link in dic:
                        link = dic [predpona_linku+'/'+link]
        subko=re.sub(p_m, '',m.group(2))
        link = link.decode('cp1250').encode('utf8')
        if link == subko:
                r='[['+link+']]'
        else:
                r='[['+link[0:-1]+'|'+subko+']]'
        return r

def nahrad_paragrafy(s):
        return re.sub(p_p, '',s)

def nahrad_intralinky(s):
        return re.sub(p_a, nahrad_intralink,s)

def spracuj_file(meno_s, s, f): # s je string reprezentujuci cely subor html, f je vystupny subor
    odkaz = "-" in dic[meno_s] # ak clanok je len doplnkom k inemu clanku!!!
    if not odkaz:
	    f.write('yyyy\n\nxxxx\n');  # zapis "paticku" a hlavicku do vystupneho suboru
    p = re.compile('\<h1\>(.*)\<\/h1\>', re.IGNORECASE) #definicia regularneho vyrazu
                                                        #pre vyhladanie zaciatku zmysluplnej informacie
    m=p.search(s)   # vyhladanie tejto informacie
    p2 = re.compile('(.*)\<\/TD\>',  re.IGNORECASE) #definicia regexp konca zmysluplnej informacie
    if not odkaz: f.write('\'\'\'')  # zapis zaciatku wikibolditka
    else: f.write('\n== ')
    f.write(m.group(1)) # zapis nadpisu (vlozeneho do tagu <h1>...</h1>
    if not odkaz: f.write( '\'\'\'\n') # zapis ukoncenia wikibolditka
    else: f.write(' ==\n')
    s2=s[m.end():]       #vytvorenie substringu od pozicie konca hlavicky 
    m2=p2.search(s2)     #vyhladanie konca zmysluplnosti
#     print "2-------------------\n" + s2
    s3=nahrad_paragrafy(s2[:m2.start()])
#     print "3-------------------\n" + s3
    s4=nahrad_intralinky(s3)
#     print "4-------------------\n" + s4
    s5=vyhod_medzery(s4)
#     print "5-------------------\n" + s5
    s6=re.sub('&#34;', '\'\'', s5)
    if not odkaz:
	    s7 = s6.replace("\n\n- ", " je ")
	    s7 = s7.replace("\n ", "\n")
    #nahrad_prvu_pomlcku(s6)
    else: s7 = s6
    s8 = re.sub('^\n', '', s7)
    s9 = s8.replace("<HR WIDTH=20% ALIGN=LEFT>", "---")
    s10 = s9.replace("<BR>", "\n")
    s10 = s10.replace("- [[../fr/utvary_vyznamove_-_a.htm|významové útvary]]\n", "")
    s10 = s10.replace("- [[../fr/odkazy_-_a.htm|odkazy]]\n", "")
    s10 = s10.replace("- [[../fr/druhy-priklady_-_a.htm|druhy/príklady]]\n", "")
    s10 = s10.replace("- [[../fr/nazory_na_-_a.htm|názory na ňu]]\n", "")
    for i in range(1000):
	    j = i + 1000
	    s10 = s10.replace("%s" % j, "[[%s]]" % j)

    f.write(s10) # zapis zmyslupnosti do suboru
    if not odkaz:
	    f.write('== Externé odkazy ==\n* {{filit|'+meno_s+'}}\n') # zapis zmyslupnosti do suboru
	    f.write('\n{{filit na úpravu}}\n') # zapis zmyslupnosti do suboru

f=open(zoznam_suborov, 'r') # otvorenie zoznamu html suborov
vystup=open('../m2.txt', 'w') # otvorenie vystupneho suboru (tento bude spracovavat bot)
vystup.write('xxxx\n')

y=0
while y<n_riadkov :   # zatial testovaco iba tri riadky zoznamu
    s=f.readline() # nacitaj
    l=s.split(" ", 1) # zober meno suboru a nadpis ako mu rozumie filit
#    print l[0], " <-> ", l[1]
    try:
                lava = l[0].split('/', 1)[1]
#               print lava
                ff=open('../htm2/'+lava, 'r') # otvor html subor
                ffs=ff.read() #nacitaj obsah do stringu
                
                ffs = ffs.decode('latin2').encode('utf8')

                predpona_linku = l[0].split('/', 1)[0]
                spracuj_file(l[0], ffs, vystup) # spracuj string        
                ff.close() #zatvor html subor
    except IOError:
            print 'IOError: ' + l[0]
                #f.write('Error ******** IOError\n')    # zapis erroru
    except AttributeError:
            print 'AttributeError: ' + l[0]
                #f.write('Error ******** AttributeError\n')    # zapis erroru
    y=y+1 #zvacsi pocitadlo

vystup.close() #zatvor vystupny subor
f.close()      #zatvor vstupny subor

print 'koniec'