import math
class Leposlovje:
def __init__(self, datoteka):#konstruktor razreda Leposlovje
#pripravimo spremenljivke v katere bomo shranjevali statistiko
#črke in besede shranjujemo v slovar
self.besede={}#inicializacija slovarja
self.frekvence={}
self.povprecnaBeseda=0
self.povprecenStavek=0
#odpremo datoteko in začnemo z analizo besed
f=open(datoteka)
self.dokument=f.read()
f.close()
self.popraviBesedilo()
self.analizirajBesedilo()
self.testni()
def popraviBesedilo(self):
besedilo=self.dokument
#zamenjamo ? in!, da lahko stavke ločimo glede na piko
besedilo=besedilo.replace('!','.')
besedilo=besedilo.replace('?','.')
#spremenimo vse velike začetnice v majhne začetnice
besedilo=besedilo.lower()
#spremenimo vse šumnike, saj python ne ve kako delati z njimi
#potrebno je popraviti tako velike kot majhne šumnike, saj jih ukaz lower ne spremeni
besedilo=besedilo.replace('\xc4\x8d','c')#to so kode šumnikov računalniške abecede(utf-8)
besedilo=besedilo.replace('\xc5\xa1','s')
besedilo=besedilo.replace('\xc5\xbe','z')
besedilo=besedilo.replace('\xc4\x8c','c')
besedilo=besedilo.replace('\xc5\xa0','s')
besedilo=besedilo.replace('\xc5\xbd','z')
#zamenjamo vse znake, ki niso del besedila oz. jih ne potrebujemo
besedilo=besedilo.replace('*','')
besedilo=besedilo.replace('-','')
besedilo=besedilo.replace('\'','')
besedilo=besedilo.replace(',','')
besedilo=besedilo.replace(';','')
#odstranimo vse nove vrstice
besedilo=besedilo.replace('\n','')
#vrnemo besedilo razdeljeno glede na pike
self.dokument=besedilo.split('.')
def analizirajBesedilo(self):
stavki=self.dokument
steviloStavkov=0
steviloCrk=0
for stavek in stavki:
#izpustimo vse prazne stavke
if len(stavek)>0:
steviloStavkov+=1
#vzamemo ta stavek ven in razdelimo stavek na besede
besede=stavek.strip().split(' ')
self.povprecenStavek+=len(besede)
#pogledamo vsako besedo posebej
for beseda in besede:
#izpustimo prazne besede
if len(besede)>0:
#statistika
self.povprecnaBeseda+=len(beseda)
if beseda in self.besede.keys():#če se ta beseda nahaja v slovarju ki smo ga z generirali
self.besede[beseda]+=1#na začetku povečamo števec frekvence
else:
self.besede[beseda]=1
#štejemo še vsako črko posebej
for crka in beseda:
steviloCrk+=1
if crka in self.frekvence.keys():
self.frekvence[crka]+=1
else:
self.frekvence[crka]=1
#izračunamo frekvenco črk
for kljuc in self.frekvence.keys():
self.frekvence[kljuc]/=float(steviloCrk)
#v self.povprecenStavek je trenutno zapisano število vseh besed
self.povprecnaBeseda/=float(self.povprecenStavek)
self.povprecenStavek/=float(steviloStavkov)
def testni(self):
print ('Povprečna beseda je dolga:', self.povprecnaBeseda, 'črk.')
print ('Povprečen stavek je dolg:', self.povprecenStavek, 'besed.')
print ('Frekvence črk:')
for k in self.frekvence.keys():
print( k, ':', math.floor(self.frekvence[k]*10000) / 100)
print ('Frekvence besed:')
for k in self.besede.keys():
if self.besede[k] > 100:
print (k, ':', self.besede[k])