import re import sys import pandas as pd 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 laused_kokku(lausepuu): return [[sona for lause in lausepuu for sona in lause]] 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 vastab(muster, vordlus): for nr in range(len(muster)): if muster[nr]!=".": if muster[nr]!=vordlus[nr]: return False return True def otsi(lausepuu, muster, z="tykelda"): #muster nt ..VVD #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=0 while koht<=(len(lause)-mustripikkus): if vastab(muster, liigid[koht:koht+mustripikkus]): if not (z=="tykelda" and ("Z" in liigid[koht:koht+mustripikkus])): v.append(lause[koht: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() def tryki2(ryhmad, kuvamisfunktsioon, fnimi="", veerud=None, sep=";"): m=[kuvamisfunktsioon(ryhmad[ryhmatunnus]) for ryhmatunnus in sorted(ryhmad.keys())] df=pd.DataFrame(m, columns=veerud) if fnimi.endswith("xlsx"): df.to_excel(fnimi, index=False) elif fnimi.endswith("csv"): df.to_csv(fnimi, index=False, sep=sep) else: print(df) lausepuu=laused_sonad(sonaandmed) #print(laused_kokku(lausepuu)) #exit() #---- vasted=otsi(lausepuu, "..VVD") ryhmad=ryhmita(vasted, lambda kirje: "-".join([morfosynt(rida) for rida in kirje])) print(list(ryhmad.values())[0]) print(len(list(ryhmad.values())[0][0])) tryki2(ryhmad, lambda ryhm: [sonaliik(ryhm[0][0])+sonaliik(ryhm[0][1]), kogus(ryhm), str(round(100*len(ryhm)/len(vasted), 3)), *[morfosynt(rida) for rida in ryhm[0]], sonad(ryhm)], "VVD_vasak_2sona_test.xlsx", ["paar", "kogus", "osakaal", *["märgend"+str(nr+1) for nr in range(len(list(ryhmad.values())[0][0]))] , "tekstid"]) exit() ryhmad=ryhmita(vasted, lambda kirje: "-".join([sonaliik(rida) for rida in kirje])) tryki2(ryhmad, lambda ryhm: [sonaliik(ryhm[0][0])+sonaliik(ryhm[0][1]), kogus(ryhm), str(round(100*len(ryhm)/len(vasted), 3)) ], veerud=["paar", "kogus", "osakaal"]) 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")