import pandas as pd #andmetabeli sisendiks Stanza abil märgendatud tekst tekst = pd.read_csv("fail_m.txt", sep = "\t+", engine = "python") #lausete loendamine lause algussõnade arvu järgi laused = tekst[tekst.Id == 1].Id.count() print("Lauseid tekstis:", laused) #kirjavahemärgid tuleb sõnade loendamiseks tabelist eemaldada tekst = tekst[tekst.Xpos != "Z"] sonad = tekst.Sona.count() print("Sõnu tekstis:", sonad) kesklause = sonad / laused print("Lause keskmine pikkus sõnades:", round(kesklause, 1 )) #sõnade pikkuse tulba lisamine tabelile tekst["Sonapikkus"] = [len(sona) for sona in tekst.Sona] kesksona = tekst["Sonapikkus"].mean() print("Sõna keskmine pikkus tähtedes:", round(kesksona, 1)) pikadsonad = tekst[tekst.Sonapikkus > 6].Sona.count() / sonad * 100 print("Pikkade sõnade osakaal: ", round(pikadsonad, 1), "%", sep="") #vaikimisi trükitakse print-käsu komponendid tühikuga eraldatult, tühiku ärajätmiseks on lisatud sep="" lix = round(kesklause + pikadsonad) #LIX-indeks ümardatakse täisarvuks print("LIX-indeks:", lix) #eraldi andmetabel sõnaliikide sagedustega sonaliigid = tekst.groupby("Xpos").Xpos.count().to_frame() sonaliigid.rename(columns={"Xpos":"Sagedus"}, inplace=True) #tulba ümbernimetamine sonaliigid["Sonaliik"] = sonaliigid.index #indeksitulp kopeeritakse tavaliseks tulbaks, millega saab teha arvutusi sonaliigid["Osakaal"] = sonaliigid["Sagedus"] / sonad * 100 #sõnaliikide osakaalu jaoks tulba lisamine nimisonad = sonaliigid[sonaliigid.Sonaliik == "S"].Osakaal.sum() #sum() on vajalik üksiku arvväärtuse väljalugemiseks tabelist print("Nimisõnade osakaal: ", round(nimisonad, 1), "%", sep = "") tegusonad = sonaliigid[sonaliigid.Sonaliik == "V"].Osakaal.sum() suhtarv = nimisonad / tegusonad print("Nimi- ja tegusõnade suhtarv:", round(suhtarv, 1)) #suhtarvu saab tähistada ka teisiti, 50:50 stiilis: n_nimisonad = sonaliigid[sonaliigid.Sonaliik == "S"].Sagedus.sum() n_tegusonad = sonaliigid[sonaliigid.Sonaliik == "V"].Sagedus.sum() osak_nimisonad = round(n_nimisonad / (n_nimisonad + n_tegusonad) * 100) print("Nimi- ja tegusõnade suhtarv teisiti: ", osak_nimisonad, ":", 100 - osak_nimisonad, sep = "") omadussonad = sonaliigid[sonaliigid.Sonaliik == "A"].Osakaal.sum() kaassonad = sonaliigid[sonaliigid.Sonaliik == "K"].Osakaal.sum() asesonad = sonaliigid[sonaliigid.Sonaliik == "P"].Osakaal.sum() maarsonad = sonaliigid[sonaliigid.Sonaliik == "D"].Osakaal.sum() huudsonad = sonaliigid[sonaliigid.Sonaliik == "I"].Osakaal.sum() F = (nimisonad + omadussonad + kaassonad - tegusonad - maarsonad - asesonad - huudsonad + 100) / 2 print("F-indeks:", round(F)) #eraldi andmetabel sõnade grupeerimiseks algvormi järgi lemmad = tekst.groupby("Lemma").Lemma.count().to_frame() lemmad.rename(columns={"Lemma":"Sagedus"}, inplace=True) lemmad["Lemma"] = lemmad.index erilemmad = lemmad.Lemma.count() leksvar = erilemmad / sonad print("Lemmade ja tekstisõnade suhtarv:", round(leksvar, 2)) #suhtarv on tõlgendatav protsendina, kui seda 100-ga korrutada #Leksikaalse tiheduse arvutamisel võib funktsioonisõnadeks (mittesisusõnadeks) lugeda stoppsõnade loendis olevad sõnad. stoppsonad = pd.read_csv("estonian-stopwords-lemmas.txt") #Jälgi, et loendile oleks failis pandud pealkiri, nt siin "Stopplemma". stopploend = stoppsonad["Stopplemma"].tolist() tekstilemmad = tekst["Lemma"].tolist() #Funktsioonisõnade loendamiseks tuleb kõiki tekstisõnu võrrelda stoppsõnade loendiga (algvormide alusel). funktsioonisonad = 0 for i in range(len(tekstilemmad)): if tekstilemmad[i] in stopploend: funktsioonisonad = funktsioonisonad + 1 #funktsioonisonad += 1 sisusonad = sonad - funktsioonisonad tihedus = sisusonad / sonad * 100 print("Leksikaalne tihedus:", round(tihedus))