Skip to content

Instantly share code, notes, and snippets.

@Bundi-py
Last active February 28, 2020 06:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Bundi-py/bebdbf736776f353dc6229069a8ec989 to your computer and use it in GitHub Desktop.
Save Bundi-py/bebdbf736776f353dc6229069a8ec989 to your computer and use it in GitHub Desktop.
# Jedna od tehnika koje se koriste pri razbijanju neke jednostavnije forme enkripcije je utvrđivanje koja slova se u
# nekom tekstu najčešće pojavljuju. Zatim se ona mapiraju sa najučestalijim slovima iz datog jezika. Ne znam koja su
# najučestalija slova u srpskom, ali uz ovaj program možemo to utvrditi, ako uzmemo dovoljno velik uzorak. Ovaj program
# broji koliko se svako slovo teksta puta ponavlja i ispisuje # sortiranu tabelu u formatu po izboru:
# "slovo = broj ponavljanja" ili "broj ponavljanja = slovo=. Korisnik prilikom pokretanja programa navodi ime fajla
# za analizu. Program ga upozorava ako to nije učinio ili ako nije u stanju da otvori traženi fajl.
import sys
import re
import string
import operator
# Provera da su dati svi argumenti.
if len(sys.argv) != 2:
print("Unesi ime fajla za slovnu analizu. Npr. >> 154.py fajl.txt")
quit()
sva_slova = {}
# uklanjanje interpunkcije
try:
with open(sys.argv[1], 'r', encoding='utf-8') as f:
tekst = f.read()
tekst1 = tekst.lower()
samo_reci = re.sub('['+string.punctuation+', 0-9, \n, ' ']', '', tekst1)
sorta = ''.join(sorted(samo_reci))
for slovo in sorta:
if slovo in sva_slova:
sva_slova[slovo] += 1
else:
sva_slova[slovo] = 1
except:
print("Dogodila se greška pri učitavanju fajla.")
quit()
# pravljenje liste sa tuplama, kako bi se dobio ispis
lista = [(k, v) for k, v in sva_slova.items()]
# odabir formata ispisa
while True:
pitanje = input('\nKako da ispišem rezultat?\ns = sortiraj po slovima\nb = sortiraj po broju ponavljanje:')
if pitanje not in ['s', 'b']:
print('\nČitaj šta je napisano! Unesi s ili b.\n')
else:
break
print()
if pitanje == 's':
print('Ovo je učestalost po slovima:')
for item in lista:
print(str(item[0]) + str(' = ') + str(item[1]))
elif pitanje == 'b':
print('Ovo je učestalost po broju ponavljanja:')
lista.sort(key = operator.itemgetter(1), reverse=True)
for item in lista:
print(str(item[1]) + str(' = ') + str(item[0]))
# izračunavanje ukupnog broja slova u tekst
zbir = 0
for char in lista:
zbir += char[1]
print('Ukupno u tekstu {} slova'.format(zbir))
**********************
Unapređena gornja verzija by Panta:
import sys
import re
import string
import operator
from collections import Counter
# Provera da su dati svi argumenti.
if len(sys.argv) != 2:
print("Unesi ime fajla za slovnu analizu. Npr. >> 154.py fajl.txt")
quit()
#sva_slova = {}
# uklanjanje interpunkcije
try:
with open(sys.argv[1], 'r', encoding='utf-8') as f:
tekst = f.read()
#tekst1 = tekst.lower()
#samo_reci = re.sub('['+string.punctuation+', 0-9, r\n, ' ']', '', tekst1)
#sorta = ''.join(sorted(samo_reci))
sorta = ''.join(i for i in sorted(re.findall('[a-zA-Z]+', tekst.lower())))
# for slovo in sorta:
# if slovo in sva_slova:
# sva_slova[slovo] += 1
# else:
# sva_slova[slovo] = 1
sva_slova = Counter(sorta)
except:
print("Dogodila se greška pri učitavanju fajla.")
quit()
# pravljenje liste sa tuplama, kako bi se dobio ispis
#lista = [(k, v) for k, v in sva_slova.items()]
print()
print('Ovo je učestalost po broju ponavljanja:')
#lista.sort(key = operator.itemgetter(1))
lista = sorted(sva_slova.items(), key=operator.itemgetter(1), reverse=True)
for item in lista:
print(str(item[1]) + str(' = ') + str(item[0]))
# izračunavanje ukupnog broja slova u tekst
#zbir = 0
#lista.reverse()
#for char in lista:
# zbir += char[1]
zbir = sum(i[1] for i in lista)
print('Ukupno u tekstu {} slova'.format(zbir))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment