import re import sys sonaandmed=[rida.rstrip() for rida in open("K1_referentskorpus_visl3.txt", "r", encoding="utf-8").readlines()] def laused_sonad(parserivaljund): puhver=[] lause=[] sona="" uussona=False for rida in parserivaljund: if len(rida)>0: if rida=='""': lause=[] elif rida=='""': if lause: puhver.append(lause[:]) elif rida[0]=='"': sona=rida uussona=True elif uussona: sona+=" "+rida.strip() uussona=False lause.append(sona) return puhver def sona(rida): return re.findall('"<(.*)>"', rida)[0] def sonaliik(rida): return re.findall(' ([A-Z]) ', rida)[0] def morfo(rida): return re.findall(' ([A-Z] [^\\@\\#]*)', rida)[0] def synt(rida): return " ".join(re.findall("(\\@[^ ]*)", rida)) def morfosynt(rida): return morfo(rida)+" "+synt(rida) def sonad(ryhm): return ",".join([" ".join([sona(rida) for rida in vaste]) for vaste in ryhm]) def kogus(ryhm): return str(len(ryhm)) def otsi(lausepuu, muster, vasakult, z="tykelda"): #z tykelda/eemalda/tavasona mustripikkus=len(muster) v=[] for lause in lausepuu: if z=="eemalda": lause=[sona for sona in lause if not sonaliik(sona)=="Z"] liigid="".join([sonaliik(sona) for sona in lause]) koht=vasakult while koht<=(len(lause)-mustripikkus): if liigid[koht:koht+mustripikkus]==muster: if not (z=="tykelda" and ("Z" in liigid[koht-vasakult:koht+mustripikkus])): v.append(lause[koht-vasakult:koht+mustripikkus]) koht+=1 return v def ryhmita(vasted, ryhmitusfunktsioon): v={} for kirje in vasted: ryhmitustunnus=ryhmitusfunktsioon(kirje) if ryhmitustunnus in v: v[ryhmitustunnus].append(kirje) else: v[ryhmitustunnus]=[kirje] return v def tryki_ryhmad_2(ryhmad, fnimi=""): if fnimi: f=open(fnimi, "w", encoding="utf-8") else: f=sys.stdout for ryhmatunnus in sorted(ryhmad.keys()): sonad=",".join([" ".join([sona(rida) for rida in vaste]) for vaste in ryhmad[ryhmatunnus]]) print(sonaliik(ryhmad[ryhmatunnus][0][0]), ryhmatunnus.replace("-", ";"), len(ryhmad[ryhmatunnus]), sonad, #";".join([",".join(vaste) for vaste in ryhmad[ryhmatunnus]]), sep=";", file=f) f.close() def tryki_ryhmad_3(ryhmad, fnimi=""): if fnimi: f=open(fnimi, "w", encoding="utf-8") else: f=sys.stdout for ryhmatunnus in sorted(ryhmad.keys()): sonad=",".join([" ".join([sona(rida) for rida in vaste]) for vaste in ryhmad[ryhmatunnus]]) print(ryhmatunnus, len(ryhmad[ryhmatunnus]), sonad, #";".join([",".join(vaste) for vaste in ryhmad[ryhmatunnus]]), sep=";", file=f) f.close() def tryki(ryhmad, kuvamisfunktsioon, fnimi=""): if fnimi: f=open(fnimi, "w", encoding="utf-8") else: f=sys.stdout for ryhmatunnus in sorted(ryhmad.keys()): print(kuvamisfunktsioon(ryhmad[ryhmatunnus]), file=f) f.close() lausepuu=laused_sonad(sonaandmed) vasted=otsi(lausepuu, "DVV", 1) #ryhmad=ryhmita(vasted, lambda kirje: "-".join([sonaliik(rida) for rida in kirje])) ryhmad=ryhmita(vasted, lambda kirje: "-".join([morfosynt(rida) for rida in kirje])) tryki(ryhmad, lambda ryhm: ";".join( [sonaliik(ryhm[0][0]), kogus(ryhm), str(round(len(ryhm)/len(vasted), 3)), ";".join([morfosynt(rida) for rida in ryhm[0]]), sonad(ryhm)])) #tryki_ryhmade_sagedused(ryhmad, "sagedused1.txt") #tryki_ryhmade_sagedused(ryhmad) #tryki_ryhmad_1(ryhmad, "ryhmad1.txt") #tryki_ryhmad_2(ryhmad, "ryhmad2.csv")