Commit 6930ab98 authored by Mareš Martin's avatar Mareš Martin
Browse files

Slovníky: Příklady

parent a71d9073
#!/usr/bin/env python3
# Spočítá frekvence k-gramů v souboru soubor.txt
# (v každém řádku zvlášť).
from collections import defaultdict
k=3
kgramy=defaultdict(int)
for radek in open('soubor.txt'):
# Rozdělíme na k-gramy
# (ignorujeme znak konce řádku na poslední pozici)
for i in range(len(radek)-k):
kgramy[radek[i:i+k]] += 1
# Vytvoříme seznam dvojic (frekvence, k-gram), vypíšeme seřazeně
vystup = [ (f, g) for g, f in kgramy.items() ]
for f, g in reversed(sorted(vystup)):
print(f, g)
#!/usr/bin/env python3
# Spočítá frekvence k-gramů v souboru soubor.txt
# (uvažujeme i k-gramy jdoucí přes hranice řádků).
from collections import defaultdict
k=3
text = ""
for radek in open('soubor.txt'):
text += radek[:-1] + ' '
kgramy=defaultdict(int)
for i in range(len(text)-k):
kgramy[text[i:i+k]] += 1
# Vytvoříme seznam dvojic (frekvence, k-gram), vypíšeme seřazeně
vystup = [ (f, g) for g, f in kgramy.items() ]
for f, g in reversed(sorted(vystup)):
print(f, g)
#!/usr/bin/env python3
# Vygeneruje náhodný text na motivy zadaného
# podle k-gramové statistiky.
from collections import defaultdict
import random
k=3
text = ""
for radek in open('soubor.txt'):
text += radek[:-1] + ' '
pokrac=defaultdict(list)
for i in range(len(text)-k-1):
pokrac[text[i:i+k]] += text[i+k]
gen = random.choice(list(pokrac))
while len(gen) < 1000:
p = pokrac[gen[-k:]]
if p:
gen += random.choice(p)
else:
gen += '/' + random.choice(list(pokrac))
print(gen)
# Obsahují dva seznamy tytéž prvky (až na pořadí)?
# Verze pro seznamy, které mají všechny prvky různé.
def porovnej(x, y):
return set(x) == set(y)
# Pokud se prvky mohou opakovat, můžeme seznamy setřídit
# a pak je porovnat. To ovšem trvá řádově n*log n kroků.
def porovnej2(x, y):
return sorted(x) == sorted(y)
# Nebo můžeme použít slovník, abychom spočítali četnosti
# prvků v obou seznamech. To trvá řádově n kroků.
def pocitej(x):
cetnosti = defaultdict(int)
for a in x:
cetnosti[a] += 1
return cetnosti
def porovnej3(x, y):
return pocitej(x) == pocitej(y)
# Jsou všechny prvky seznamu navzájem různé?
def ruzne_prvky(x):
return len(x) == len(set(x))
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment