Last active
February 28, 2020 06:17
-
-
Save Bundi-py/bebdbf736776f353dc6229069a8ec989 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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