def genereerisõna(lähtekeel,sihtkeel,pid): if lähtekeel == 'et' and sihtkeel == 'vro': s.sqli(d.n,db.genereerisõna_etvro(pid)) elif lähtekeel == 'vro' and sihtkeel == 'et': h.k("Hetkel toetusest maas - vanad tabelid uuendamata.") #s.sqli(d.n,db.genereerisõna_vroet(pid)) else: h.k("Pole toetatud. Ei tule ka. V.a., kui keegi finantseerib.")
def otsi2(sona, x): import re h.kr("<h4>Tulemused:</h4>") h.k("Sõna oli: \"") h.k(sona) h.kr("\"") sona2 = re.escape(sona) sona = sona.replace("\'", "\\''") if (x == '1'): sone = """SELECT e.id AS eid, e.nr AS enr, e.lausenr AS elnr, e.lause AS el, v.lause AS vl FROM wilaused_et e, wilaused_vro v WHERE e.lause ilike '%%%s%%' AND e.nr=v.nr AND v.lausenr=e.lausenr ORDER BY enr,elnr;""" % sona elif (x == '2'): sone = """SELECT e.id AS eid, e.nr AS enr, e.lausenr AS elnr, e.lause AS el, v.lause AS vl FROM wilaused_et e, wilaused_vro v WHERE v.lause ilike '%%%s%%' AND e.nr=v.nr AND v.lausenr=e.lausenr ORDER BY enr,elnr;""" % sona else: h.kr("Keelevalik puudus?") h.tabel_a() h.tr_l() h.td("töö nr", 'd') h.td("lause nr", 'd') h.td("lause", 'd') h.td("lause", 'd') h.tr_l() for r in s.sqle(d.n, sone): h.tr_l() enr = str(r['enr']) viide = "wi.py?z=vati&nr=" + enr h.atd('aeg r', viide, enr) elnr = str(r['elnr']) viide2 = "wi.py?z=val&tnr=" + elnr + "&lnr=" + enr h.atd('aeg r', viide2, elnr) h.td(r['el'], 'd') h.td(r['vl'], 'd') h.tr_l() h.tabel_l()
def leialõpuliited(sõna,lähtekeel,pid,kus): if lähtekeel == 'et': tul = s.sqli(d.n,db.leialõpuliited_et(pid,sõna)) elif lähtekeel == 'vro': tul = s.sqli(d.n,db.leialõpuliited_vro(pid,sõna)) else: h.k("Maoli maas, näoli sees") return tul
def vaatateksti(nr): h.k("<h4>Tekst nr: ") h.a(nr) h.kr("</h4>") sql = "SELECT et.lausenr AS nr, et.lause AS etlause, vro.lause AS vrolause FROM wilaused_et et, wilaused_vro vro WHERE et.nr='%s' AND vro.nr='%s' AND et.lausenr=vro.lausenr ORDER BY et.lausenr;" % ( nr, nr) h.tabel_a() for r in s.sqle(d.n, sql): h.tr_l() h.td(r['nr'], 'd') h.td(r['etlause'], 'd') h.td(r['vrolause'], 'd') h.tr_l() h.tabel_l()
def www2db(tõlkenumber, lähtekeel, sihtkeel, veebitekst, viis): """Saab veebiliideselt teksti ja sisestab DB'sse.""" if viis == "www" or viis == "wwwdebug": h.k("<table><tr>\n <td>") h.k(veebitekst) h.kr("</td>") v = str(veebitekst) if viis == "www" or viis == "wwwdebug": rida = v.replace("'", r"\''") elif viis == "käsurida": # lõikame pythoni listi stdin-variandi otsad maha rida = v[2:-2] #rida = rida.replace("'", r"\''") s.sqli(d.n, db.tekstandmetesse(tõlkenumber, lähtekeel, sihtkeel, rida))
def vaatalauset(lnr, tnr): h.k("Töö nr: ") h.a(tnr) h.k(" Lause nr: ") h.a(lnr) h.kr(".") vlnr = int(lnr) - 2 slnr = int(lnr) + 2 sql = "SELECT et.lausenr AS nr, et.lause AS etlause, vro.lause AS vrolause FROM wilaused_et et, wilaused_vro vro WHERE et.nr='%s' AND vro.nr='%s' AND et.lausenr=vro.lausenr AND et.lausenr >= '%s' and et.lausenr <= '%s' ORDER BY et.lausenr;" % ( tnr, tnr, vlnr, slnr) h.tabel_a() for r in s.sqle(d.n, sql): h.tr_l() h.td(r['nr'], 'd') h.td(r['etlause'], 'd') h.td(r['vrolause'], 'd') h.tr_l() h.tabel_l()
def lihttõlge_erinditest(tõlkenumber,sõna,pid,lähtekeel,sihtkeel): """Tõlgib sõna, tagastab sõnade ja grammatika massiivi.""" leitudsõnanr = 0 sõna = sõna.replace("\\'",r"''") if lähtekeel == 'et' and sihtkeel == 'vro': sisestus0 = db.erindid_etvro(sõna) elif lähtekeel == 'vro' and sihtkeel == 'et': sisestus0 = db.erindid_vroet(sõna) else: h.k("Häki edasi, siia poldud ette nähtud jõuda... Versioon 0.2") for index,r in enumerate(s.sqlf(d.n,sisestus0)): sihtsõna = r[0].replace("'", r"\''") grammar = r[1]; sihtgrammar = r[2] leitudsõnanr += 1 if index == 0: s.sqli(d.n,db.uuendatõlkesõna(sihtsõna,grammar,pid,'erindivõrdlus0')) else: s.sqli(d.n,db.sisestatõlkesõnadesse(sihtsõna,grammar,pid,'erindivõrdlus1')) return leitudsõnanr
def sõnavõrdlus(tõlkenumber,lähtekeel,sihtkeel,sõna,pid,kus): """Tõlgib sõna, tagastab sõnade ja grammatika massiivi.""" leitudsõnanr = 0 sõna = sõna.replace("\\'",r"''") if lähtekeel == 'et' and sihtkeel == 'vro': sisestus = db.võrdlesõna_etvro(sõna) elif lähtekeel == 'vro' and sihtkeel == 'et': sisestus = db.võrdlesõna_vroet(sõna) #sisestus = db.tõlgisõna_vroet(sõna) else: h.k("Häki edasi, siia poldud ette nähtud jõuda... Versioon 0.1") for index,r in enumerate(s.sqlf(d.n,sisestus)): sihtsõna = r[0].replace("'", r"\''") grammar = r[1] leitudsõnanr += 1 if index == 0: s.sqli(d.n,db.uuendatõlkesõna(sihtsõna,grammar,pid,kus)) elif index > 0: s.sqli(d.n,db.sisestatõlkesõnadesse(sihtsõna,grammar,pid,kus)) return leitudsõnanr
def otsinäitelausist(): h.kr("<h4>OTSI (sõnaraamatute näitelausetest)</h4>") viide = str("wi.py?z=ontl2&x=3") h.vorm(viide) h.kr("<br>") h.tabel_a() h.inputval("s", "sõna", 100, 100) h.submit( '2', 'Otsida saab mitu sõna korraga. Vali otsitav sõna(d) eesti keeles') h.tabel_l() h.kr("</form>") viide = str("wi.py?z=ontl2&x=4") h.vorm(viide) h.tabel_a() h.inputval("s", "sõnna", 100, 100) h.submit( '2', 'Otsi saat kõrraga üts kooni mitu sõnna. Kae otstavat sõnna/u võro keeleh' ) h.tabel_l() h.kr("</form>") viide = str("wi.py?z=ontl2&x=5") h.vorm(viide) h.kr("<br>") h.tabel_a() h.inputval("s", "sõna", 100, 100) h.submit('2', 'TEST, sorteerituna sõnade arvu ja lause pikkuse järgi') h.tabel_l() h.kr("</form>") viide = str("wi.py?z=ontl2&x=6") h.vorm(viide) h.kr("<br>") h.tabel_a() h.inputval("s", "sõna", 100, 100) h.submit('2', 'TEST, sõnnu ja lause pikkuse perrä sortitu') h.tabel_l() h.kr("</form>") h.k("OMADUSED/FEATURES: ") h.kr( "tõstutundlikkuse tuge veel pole. Tegelikult on, aga veebiliideses veel ei värvita selliseid sõnu ning seepärast pole seda sisselülitatud." )
def valitõlge(tõlkenumber,viis): tekst = tõlgitudtekst = "" s.sqli(d.n,db.vormikutestsõnadesse(tõlkenumber)) päring = db.valiparalleeltõlge(tõlkenumber) #s.sqli(d.n,db.ennetõlget(tõlkenumber)) if viis == "www" or viis == "wwwdebug": h.k(" <td>") for index,r in enumerate(s.sqle(d.n,päring)): if (r['tõlge'] == '.') or (r['tõlge'] == ',') or (r['tõlge'] == '!') or (r['tõlge'] == '?'): tõlgitudtekst = tõlgitudtekst + r['tõlge'] else: if r['tõlge'] == None: tõlge = '' elif r['tõlge'] == 'None': tõlge = '' else: tõlge = r['tõlge'] tõlgitudtekst = tõlgitudtekst + " " + tõlge print(tõlgitudtekst) if viis == "www" or viis == "wwwdebug": h.kr("</td>") s.sqli(d.n,db.tõlkelausessetõlgejuurde(tõlgitudtekst,tõlkenumber))
def witekstideinfo(): wilauseid = witekstidearv() h.k("Eesti - võru paralleelkorpuste andmebaasis on (") h.a(wilauseid) h.k(") lausehaaval käsitsi joondatud teksti.") h.k(" Ühes keeles on mitu lauset koos juhul kui teises keeles on liitlause." ) h.k(" Tekstide loetelus on toodud iga teksti esimene lause.") h.kr("<br>") h.k("Eestikeelseid sõnu on ") h.a(et_sõnadearv()) h.k(", võrukeelseid sõnu on ") h.a(vro_sõnadearv()) h.kr(".<br>")
def otsintl2(sona, x): import re h.kr("<h4>Tulemused:</h4>") h.k("Sõne oli: \"") h.k(sona) h.kr("\"") sona = sona.split(' ') if (x == '3'): sone = """SELECT i,id,et,vro,nr FROM sõ_eevro_laused WHERE et ~ ANY(ARRAY %s ) ORDER BY i,nr;""" % sona elif (x == '4'): sone = """SELECT i,id,et,vro,nr FROM sõ_eevro_laused WHERE vro ~ ANY(ARRAY %s ) ORDER BY i,nr;""" % sona elif (x == '5'): sone = """ with essa as (select i,id,et,vro,nr,CHAR_LENGTH(et) as ep FROM sõ_eevro_laused WHERE et ~ ANY(ARRAY %s ) ORDER BY i), tessa as (SELECT regexp_split_to_table(et, E'\\\\s+') AS etsõna,i,id,et,vro,nr,ep FROM essa), kossa as (SELECT etsõna,et,vro,i,id,nr,ep FROM tessa WHERE etsõna ~ ANY(ARRAY %s )), nessa as (SELECT COUNT(etsõna) as korda, et,vro,nr,i,id FROM kossa GROUP BY et,vro,nr,i,id,ep ORDER BY korda DESC,ep) select * from nessa;""" % (sona, sona) elif (x == '6'): sone = """ with essa as (select i,id,et,vro,nr,CHAR_LENGTH(et) as ep FROM sõ_eevro_laused WHERE vro ~ ANY(ARRAY %s ) ORDER BY i), tessa as (SELECT regexp_split_to_table(vro, E'\\\\s+') AS vrosõna,i,id,et,vro,nr,ep FROM essa), kossa as (SELECT vrosõna,et,vro,i,id,nr,ep FROM tessa WHERE vrosõna ~ ANY(ARRAY %s )), nessa as (SELECT COUNT(vrosõna) as korda, et,vro,nr,i,id FROM kossa GROUP BY et,vro,nr,i,id,ep ORDER BY korda DESC,ep) select * from nessa;""" % (sona, sona) else: h.kr("Keelevalik puudus?") h.tabel_a() h.tr_l() h.td("rea nr", 'd') h.td("otsikeel", 'd') h.td("paralleelkeel", 'd') h.td("lause nr", 'd') h.tr_l() for r in s.sqle(d.n, sone): h.tr_l() if (x == '3'): kogulause = r['et'] elif (x == '4'): kogulause = r['vro'] elif (x == '5'): kogulause = r['et'] elif (x == '6'): kogulause = r['vro'] for i in sona: kogulause = kogulause.replace( i, "<font color=\"blue\">" + i + "</font>") if (x == '3'): h.td(r['i'], 'd') h.td(kogulause, 'd') h.td(r['vro'], 'd') h.td(r['nr'], 'd') elif (x == '4'): h.td(r['i'], 'd') h.td(kogulause, 'd') h.td(r['et'], 'd') h.td(r['nr'], 'd') elif (x == '5'): h.td(kogulause, 'd') h.td(r['vro'], 'd') h.td(r['i'], 'd') h.td(r['id'], 'd') h.td(r['nr'], 'd') elif (x == '6'): h.td(kogulause, 'd') h.td(r['et'], 'd') h.td(r['i'], 'd') h.td(r['id'], 'd') h.td(r['nr'], 'd') h.tr_l() h.tabel_l()
def otsiabi(): h.k("Otsida saab mitu sõna korraga, hetkel miinusmärki väljajättena ei toetata." ) h.kr( "Vaikimisi otsitakse mitte terveid sõnu vaid sõnesid pikemate sõnede sees." )
def tõlgisõna(tõlkenumber,lähtekeel,sihtkeel,viis): import rutiinid as r import time nimisõna = tõlgitulemus = "" for r in s.sqle(d.n,db.valitõlkesõnad(tõlkenumber)): algus = time.time() sõna = r['lsõ']; pid = r['id'] tõlgitulemus = sõnavõrdlus(tõlkenumber,lähtekeel,sihtkeel,sõna,pid,'snv0') if tõlgitulemus != 0: lõpp = time.time() - algus if viis == "wwwdebug": h.k("<tr><td>....") h.k(sõna) h.k("</td><td>") h.k(lõpp) h.k("</td></tr>") continue if len(sõna) < 4: # tundmatuid alla neljatähelisi sõnu pole mõtet tüvi+lõpp # rutiinidesse saata, peale tüve lõppu ära ei mahu continue # siia kontroll, kas sõna om üldse õnnõ suure tähega, vai om egäl puul väiko tähega sõna = sõna.lower() tõlgitulemus = sõnavõrdlus(tõlkenumber,lähtekeel,sihtkeel,sõna,pid,'snv1') if tõlgitulemus != 0: continue # analüüsib grammarit, aga tulemuse väljastab siis, kui saab võrukeelse lõppsõna, seega osa tööd mõtetult kaob tõlgitulemus = lihttõlge_erinditest(tõlkenumber,sõna,pid,lähtekeel,sihtkeel) if tõlgitulemus != 0: lõpp = time.time() - algus if viis == "wwwdebug": h.k("<tr><td>....") h.k(sõna) h.k("</td><td>") h.k(lõpp) h.k("</td></tr>\n\r<tr>") continue # see osa on aeglane, võiks optimeerida leialõpuliited(sõna,lähtekeel,pid,'lll') # siia vahele ülejäänud arendus, kus kontrollitakse mitmetüve # võimalust, kui lõpud on olemas, aga ühtegi tüve kätte ei saadud tüvekontroll(sihtkeel,pid) tõlgilõpuliited(lähtekeel,sihtkeel,pid) # veelkord :))) tüvekontroll(sihtkeel,pid) lõpp = time.time() - algus if viis == "wwwdebug": h.k("<tr><td>....") h.k(sõna) h.k("</td><td>") h.k(lõpp) h.k("</td></tr>\n\r<tr>")
def tõlgilõpuliited(lähtekeel,sihtkeel,pid): if lähtekeel == 'et' and sihtkeel == 'vro': s.sqli(d.n,db.tõlgilõpuliited_etvro(pid)) elif lähtekeel == 'vro' and sihtkeel == 'et': h.k("Hetkel pole veel toetatud.") else: h.k("Pole toetatud. Ei tule ka. V.a., kui keegi finantseerib. V2")
def otsi3(sona, x): import re h.kr("<h4>Tulemused:</h4>") h.k("Sõne oli: \"") h.k(sona) h.kr("\"") sona = sona.split(' ') if (x == '3'): sone = """SELECT e.id AS eid, e.nr AS enr, e.lausenr AS elnr, e.lause AS el, v.lause AS vl FROM wilaused_et e, wilaused_vro v WHERE e.lause ~ ANY(ARRAY %s ) AND e.nr=v.nr AND v.lausenr=e.lausenr ORDER BY enr,elnr;""" % sona elif (x == '4'): sone = """SELECT e.id AS eid, e.nr AS enr, e.lausenr AS elnr, e.lause AS el, v.lause AS vl FROM wilaused_et e, wilaused_vro v WHERE v.lause ~ ANY(ARRAY %s ) AND e.nr=v.nr AND v.lausenr=e.lausenr ORDER BY enr,elnr;""" % sona elif (x == '5'): sone = """ WITH essa AS (SELECT e.id AS eid, e.nr AS enr, e.lausenr AS elnr, e.lause AS el, v.lause AS vl, CHAR_LENGTH(e.lause) AS epikk FROM wilaused_et e, wilaused_vro v WHERE e.lause ~ ANY(ARRAY %s ) AND e.nr=v.nr AND v.lausenr=e.lausenr ORDER BY enr,elnr), tessa AS ( SELECT regexp_split_to_table(el, E'\\\\s+') AS esõna,epikk,eid,enr,elnr FROM ESSA), kossa AS ( SELECT esõna,epikk,eid,enr,elnr FROM tessa WHERE esõna ~ ANY(ARRAY %s )), nessa AS ( SELECT COUNT(esõna) AS korda, epikk,enr,elnr FROM kossa GROUP BY epikk,enr,elnr ORDER BY korda DESC,epikk) SELECT e.lause AS el, v.lause AS vl,epikk,korda,enr,elnr from nessa n,wilaused_et e, wilaused_vro v WHERE enr=e.nr AND elnr=e.lausenr AND e.nr=v.nr AND v.lausenr=e.lausenr AND enr=v.nr AND elnr=v.lausenr ORDER BY korda DESC,epikk ;""" % ( sona, sona) elif (x == '6'): sone = """ WITH essa AS (SELECT e.id AS eid, e.nr AS enr, e.lausenr AS elnr, e.lause AS el, v.lause AS vl, CHAR_LENGTH(e.lause) AS epikk FROM wilaused_et e, wilaused_vro v WHERE v.lause ~ ANY(ARRAY %s ) AND e.nr=v.nr AND v.lausenr=e.lausenr ORDER BY enr,elnr), tessa AS ( SELECT regexp_split_to_table(vl, E'\\\\s+') AS vsõna,epikk,eid,enr,elnr FROM ESSA), kossa AS ( SELECT vsõna,epikk,eid,enr,elnr FROM tessa WHERE vsõna ~ ANY(ARRAY %s )), nessa AS ( SELECT COUNT(vsõna) AS korda, epikk,enr,elnr FROM kossa GROUP BY epikk,enr,elnr ORDER BY korda DESC,epikk) SELECT e.lause AS el, v.lause AS vl,epikk,korda,enr,elnr FROM nessa n,wilaused_et e, wilaused_vro v WHERE enr=e.nr AND elnr=e.lausenr AND e.nr=v.nr AND v.lausenr=e.lausenr AND enr=v.nr AND elnr=v.lausenr ORDER BY korda DESC,epikk ;""" % ( sona, sona) else: h.kr("Keelevalik puudus?") h.tabel_a() h.tr_l() h.td("töö nr", 'd') h.td("lause nr", 'd') h.td("lause", 'd') h.td("lause", 'd') h.tr_l() for r in s.sqle(d.n, sone): h.tr_l() enr = str(r['enr']) viide = "wi.py?z=vati&nr=" + enr h.atd('aeg r', viide, enr) elnr = str(r['elnr']) viide2 = "wi.py?z=val&tnr=" + elnr + "&lnr=" + enr h.atd('aeg r', viide2, elnr) if (x == '3'): kogulause = r['el'] elif (x == '4'): kogulause = r['vl'] elif (x == '5'): kogulause = r['el'] elif (x == '6'): kogulause = r['vl'] for i in sona: kogulause = kogulause.replace( i, "<font color=\"blue\">" + i + "</font>") if (x == '3'): h.td(kogulause, 'd') h.td(r['vl'], 'd') elif (x == '4'): h.td(kogulause, 'd') h.td(r['el'], 'd') elif (x == '5'): h.td(kogulause, 'd') h.td(r['vl'], 'd') h.td(r['korda'], 'd') h.td(r['epikk'], 'd') elif (x == '6'): h.td(kogulause, 'd') h.td(r['el'], 'd') h.td(r['korda'], 'd') h.td(r['epikk'], 'd') h.tr_l() h.tabel_l()
def main(tekst, lähtekeel, sihtkeel, dikt, viis): lib_path = os.path.abspath(os.path.join('..', 'htdocs')) sys.path.append(lib_path) import html as h # XXX dikt """WI liidese tõlkemasina peaprogramm""" import time try: algusaeg = time.time() tõlkenumber = r.uustõlkenumber() lõppaeg = time.time() - algusaeg r.www2db(tõlkenumber, lähtekeel, sihtkeel, tekst, viis) if viis == "wwwdebug": h.k("<td><table><tr><td>peale www2db-d: </td><td>") h.k(lõppaeg) h.k("</td></tr>") blokiaeg = time.time() r.sõnetatekst(tõlkenumber) lõppaeg = time.time() - blokiaeg if viis == "wwwdebug": h.k("<tr><td>sõneta+lausesta:</td><td>") h.k(lõppaeg) h.k("</td></tr>") tõlke1aeg = time.time() wi.tõlgisõna(tõlkenumber, lähtekeel, sihtkeel, viis) # enne genereerisõna lõppaeg = time.time() - tõlke1aeg if viis == "wwwdebug": h.k("<tr><td>tõlgi1:</td><td>") h.k(lõppaeg) h.k("</td></tr>") süntaksiaeg = time.time() wi.lopylausõstaminy(tõlkenumber) #s.süntaks(tõlkenumber,lähtekeel,sihtkeel,viis) lõppaeg = time.time() - süntaksiaeg if viis == "wwwdebug": h.k("<tr><td>süntaksiaeg:</td><td>") h.k(lõppaeg) h.k("</td></tr></table></td>") tõlke2aeg = time.time() #wi.sihtkeelde(tõlkenumber,lähtekeel,sihtkeel,viis) # genereerisõna wi.valitõlge(tõlkenumber, viis) lõppaeg = time.time() - tõlke2aeg if viis == "wwwdebug": h.kr("<tr><td></td><td>") h.k(" <table><tr><td>tõlgi2:</td><td>") h.k(lõppaeg) h.kr("</td></tr>") koguaeg = time.time() - algusaeg if viis == "wwwdebug": h.k(" <tr><td>tõlke koguaeg:</td><td>") h.k(koguaeg) h.kr("</td></tr>\n </table>") if viis == "www" or viis == "wwwdebug": h.kr("</tr></table>") except: h.k("<pre>") traceback.print_exc() h.kr("</pre>")
try: h.päis('WI Võro kiil') h.kehaalgus() h.avalehealgus() h.tõlkemasinalähtetekstiaken() h.kr("</form>") form = cgi.FieldStorage() if form.getvalue('z'): z = form.getvalue('z') z = cgi.escape(z) if (z == "t"): if form.getvalue('tekst'): tekst = form.getvalue('tekst') else: tekst = '0' if tekst != '0': # XXX turva witolge.main(tekst, "et", "vro", "dikt4_vro_et", d.viis()) else: pass else: h.k("Lähtetekst puudub") else: t.avaleht() h.jalus() except: h.k("<pre>") traceback.print_exc() h.kr("</pre>")