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].strip() 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, 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, "VVD", 2) ryhmad=ryhmita(vasted, lambda kirje: "-".join([sonaliik(rida) for rida in kirje])) tryki(ryhmad, lambda ryhm: ";".join( [sonaliik(ryhm[0][0])+sonaliik(ryhm[0][1]), kogus(ryhm), str(round(100*len(ryhm)/len(vasted), 3)) ]), "VVD_vasak_2sona_sagedused.csv") ryhmad=ryhmita(vasted, lambda kirje: "-".join([morfosynt(rida) for rida in kirje])) tryki(ryhmad, lambda ryhm: ";".join( [sonaliik(ryhm[0][0])+sonaliik(ryhm[0][1]), kogus(ryhm), str(round(100*len(ryhm)/len(vasted), 3)), ";".join([morfosynt(rida) for rida in ryhm[0]]), sonad(ryhm) ]), "VVD_vasak_2sona.csv") vasted=otsi(lausepuu, "VVD", 1) ryhmad=ryhmita(vasted, lambda kirje: "-".join([sonaliik(rida) for rida in kirje])) tryki(ryhmad, lambda ryhm: ";".join( [sonaliik(ryhm[0][0]), kogus(ryhm), str(round(100*len(ryhm)/len(vasted), 3))]), "VVD_vasak_1sona_sagedused.csv") 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)]), "VVD_vasak_1sona.csv") exit() vasted=otsi(lausepuu, "DVV", 2) ryhmad=ryhmita(vasted, lambda kirje: "-".join([sonaliik(rida) for rida in kirje])) tryki(ryhmad, lambda ryhm: ";".join( [sonaliik(ryhm[0][0])+sonaliik(ryhm[0][1]), kogus(ryhm), str(round(100*len(ryhm)/len(vasted), 3)) ]), "DVV_vasak_2sona_sagedused.csv") ryhmad=ryhmita(vasted, lambda kirje: "-".join([morfosynt(rida) for rida in kirje])) tryki(ryhmad, lambda ryhm: ";".join( [sonaliik(ryhm[0][0])+sonaliik(ryhm[0][1]), kogus(ryhm), str(round(100*len(ryhm)/len(vasted), 3)), ";".join([morfosynt(rida) for rida in ryhm[0]]), sonad(ryhm) ]), "DVV_vasak_2sona.csv") vasted=otsi(lausepuu, "DVV", 1) ryhmad=ryhmita(vasted, lambda kirje: "-".join([sonaliik(rida) for rida in kirje])) tryki(ryhmad, lambda ryhm: ";".join( [sonaliik(ryhm[0][0]), kogus(ryhm), str(round(100*len(ryhm)/len(vasted), 3))]), "DVV_vasak_1sona_sagedused.csv") 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)]), "DVV_vasak_1sona.csv")