Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zadaci za wannabe pythoniste

[es] :: Python :: Zadaci za wannabe pythoniste

Strane: << < .. 12 13 14 15 16 17 18 19 20 21 ... Dalje > >>

[ Pregleda: 51015 | Odgovora: 629 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste21.02.2020. u 01:29 - pre 49 meseci
Citat:
Panta_:
Fora je što regex + čita koliko god može karaktera u opsegu od a-z dok ne naiđe na neki ne a-z karakter i vrati match, tzv. greedy quantifier, dok bi recimo bez + za svaki a-z karakter vratio match.

Code:
%timeit ''.join(i for i in tekst.lower() if i.isalpha())
1 loop, best of 5: 368 ms per loop

%timeit ''.join(filter(lambda i: i.isalpha(), tekst))
1 loop, best of 5: 508 ms per loop

%timeit ''.join(re.findall('[a-z]+', tekst.lower()))
1 loop, best of 5: 276 ms per loop


Ma ne, pazi ova petlja gde ide samo prolaz i provera, u kompajliranom jeziku, nema teorije da bi bila
sporija od regex-a. Zato kad radis u Pythonu, napravis heavy workload u C-u, a onda samo pozivas
f-je.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste21.02.2020. u 09:12 - pre 49 meseci
Citat:
Panta_:
Fora je što regex + čita koliko god može karaktera u opsegu od a-z dok ne naiđe na neki ne a-z karakter i vrati match, tzv. greedy quantifier, dok bi recimo bez + za svaki a-z karakter vratio match.

Code:
%timeit ''.join(i for i in tekst.lower() if i.isalpha())
1 loop, best of 5: 368 ms per loop

%timeit ''.join(filter(lambda i: i.isalpha(), tekst))
1 loop, best of 5: 508 ms per loop

%timeit ''.join(re.findall('[a-z]+', tekst.lower()))
1 loop, best of 5: 276 ms per loop


isalpha i regex [a-z]+ nisu isto. regex neće da radi za UTF-8
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste21.02.2020. u 10:02 - pre 49 meseci
"Ma ne, pazi ova petlja gde ide samo prolaz i provera, u kompajliranom jeziku, nema teorije da bi bila
sporija od regex-a."

Mislio sam na regex [a-z]+ vs [a-z]: "regex + čita koliko god može karaktera u opsegu od a-z dok ne naiđe na neki ne a-z karakter i vrati match, tzv. greedy quantifier, dok bi recimo bez + za svaki a-z karakter vratio match

Manje ima backtrackinga sa +.

Evo nekih primera:

Code:
%timeit ''.join(re.findall(r'[a-z]', 'hello, 123 abc 456, world!'))
3.95 µs per loop

%timeit ''.join(re.findall(r'[a-z]+', 'hello, 123 abc 456, world!'))
2.59 µs per loop

# Kada se prethodno regex kompajlira
pattern = re.compile(r'[a-z]+')
%timeit ''.join(pattern.findall('hello, 123 abc 456, world!'))
1.35 µs per loop

%timeit ''.join(i for i in 'hello, 123 abc 456, world!' if i.isalpha())
2.6 µs per loop

%timeit ''.join(filter(str.isalpha, 'hello, 123 abc 456, world!'))
2.36 µs per loop
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste21.02.2020. u 10:27 - pre 49 meseci
"isalpha i regex [a-z]+ nisu isto. regex neće da radi za UTF-8"

Neće, ali nisam u primeru imao takva slova pa sam upotrebio taj jednostavan regex. Python re modul ne podržava POSIX character class ili unicode properties, pa ne može jednostavno [:alpha:] ili \p{L}, već recimo [^\W\d_].
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste21.02.2020. u 10:42 - pre 49 meseci
"Gde samo nađe Rust kontejner od 753MB?
https://hub.docker.com/_/rust?tab=tags
Najveći je 450MB. A ide od 125MB pa na gore."

To je compressed size, kada se raspakuje onda je znatno više.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste28.02.2020. u 06:30 - pre 49 meseci
Stiže zadatak broj 25.

Napiši program koji će prikazati 5 reči koje se najčešće pojavljuju u datom tekstu. Posle učitavanja teksta,
program će prvo ukloniti sve znakove interpuncije, a prilikom brojanja reči zanemariti mala i velika slova.

Svoje polurešenje sa okačio ovde.
Njime dobijem ovakvu listu iz rečnika:

that 3
which 1
is 6
hearing 1
of 7
our 6
hearing, 1
mind 1
speech 2
too 1
life 1
life-breath 1
and 3
sight 2


Ali nisam još otkrio kako da sortiram po opadajućem nizu ponavljanja reči.
I kako da ispis ograničim na prvih 5 reči.

Radim na fazi 2 :)
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste28.02.2020. u 06:54 - pre 49 meseci
Stavis u listu parova (broj_ponavljanja,rec) pa sortiras reverse ili sortiras pa obrnes ili ides iteraciju reverse.
Da li python ima `take` iz iteracije kao Haskell ili Rust? Ako nema onda ides petlju po brojacu.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste28.02.2020. u 07:06 - pre 49 meseci
Ovo je prilično neobičan engleski tekst, kada "the" nije najčešća reč.
Osim toga, pojavljuje se haering dva puta:

hearing 1
hearing, 1

Očigledno, ne radi ti baš dobro uklanjanje interpunkcije.
A i pitanje je šta da se radi sa "life-breath"? Da li je to jedna ili dve reči...
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste28.02.2020. u 13:45 - pre 49 meseci
Citat:
Ali nisam još otkrio kako da sortiram po opadajućem nizu ponavljanja reči.
I kako da ispis ograničim na prvih 5 reči.

Radim na fazi 2 :)

Importovao si re i collections module ali ih nigde nisi upotrebio. Moga si da vidiš kako sam ih ja upotrebio u prethodnom zadatku. Na primer za ovaj zadatak:

Code:
import re
import collections

text = open('textfile.txt').read()
words = re.findall('\w+', text)

collections.Counter(words).most_common(5)
[('and', 24), ('more', 21), ('which', 18), ('for', 18), ('to', 16)]


Citat:
most_common(self, n=None)
List the n most common elements and their counts from the most
common to the least. If n is None, then list all element counts.

>>> Counter('abcdeabcdabcaba').most_common(3)
[('a', 5), ('b', 4), ('c', 3)]
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste28.02.2020. u 13:58 - pre 49 meseci
import collection je ostalo od nekog prethodnog polurešenja.

No sad sam sve skockao, vidi ovde

Ispis je sledeći, limitiran na 5 najčešćih reči

the = 36
a = 31
of = 23
to = 20
and = 14


I da, promenio sam uzorak teksta i sada je stvarno 'the' najčešća reč :)
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste28.02.2020. u 14:36 - pre 49 meseci
Evo malo drugačijeg rešenja:

Code:
import string

text = open('textfile.txt').read()

words = text.translate(str.maketrans('', '', string.punctuation)).split()

sorted([(word, words.count(word)) for word in set(words)], key=lambda x: x[1], reverse=True)[:5]
[('and', 24), ('more', 21), ('which', 18), ('for', 18), ('to', 16)]

 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste28.02.2020. u 14:49 - pre 49 meseci
Zanimalo me i za srpski tekst kako stoje stvari.
Proverio sam Crnjanskog, prva knjiga Seoba.
Generalno je ova situacija, ubedljivo vode uglavnom veznici i predlozi
što je za očekivati. Jedino je ime glavnog junaka ušlo u prvih 40:

i = 3517
je = 2485
da = 2122
se = 1983
u = 1846
na = 919
su = 738
kao = 690
sa = 650
mu = 590
što = 575
od = 467
ne = 442
za = 440
ga = 400
koji = 351
nije = 349
sve = 347
po = 346
tako = 326
a = 294
on = 290
beše = 283
ni = 273
to = 259
kad = 247
bio = 242
ih = 241
iz = 239
isakovič = 231
će = 230
ona = 225
pred = 221
bi = 216
pod = 213
joj = 211
više = 204
još = 190
pri = 184
koje = 181


 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste28.02.2020. u 15:05 - pre 49 meseci
Citat:
Panta_:
Evo malo drugačijeg rešenja:

Code:
import string

text = open('textfile.txt').read()

words = text.translate(str.maketrans('', '', string.punctuation)).split()

sorted([(word, words.count(word)) for word in set(words)], key=lambda x: x[1], reverse=True)[:5]
[('and', 24), ('more', 21), ('which', 18), ('for', 18), ('to', 16)]



Au Panto, al si ga skvizovao!
A ja tri dana ulupao da nažem rešenje.
Mogao nive Seobe da napišem za to vreme :D

Zanimljivi ti je taj string modul. Moram to malo bolje proučiti.
Ako s nečim radim u ovoj fazi, onda su to stringovi.

Ovo sa translate baš ne kapiram :(
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste28.02.2020. u 15:28 - pre 49 meseci
Pogledaj https://docs.python.org/3/library/stdtypes.html#str.translate

A evo i jednostavan primer:

Code:
'hello world'.translate(str.maketrans('hw', 'HW'))
'Hello World'

str.maketrans('hw', 'HW')
{104: 72, 119: 87}

'hello world'.translate({104: 72, 119: 87})
'Hello World'
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste28.02.2020. u 15:57 - pre 49 meseci
Ovo sam ja izvukao iz jedne knjige (top 15):
Code:
JE    2696
I    1857
DA    1789
SE    1587
U    1303
NA    870
SU    595
ON    560
ZA    513
TO    496
SA    477
A    457
ONA    414
NE    390
ALI    351
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste28.02.2020. u 17:15 - pre 49 meseci
Citat:
Panta_:
Pogledaj https://docs.python.org/3/library/stdtypes.html#str.translate

A evo i jednostavan primer:

Code:
'hello world'.translate(str.maketrans('hw', 'HW'))
'Hello World'

str.maketrans('hw', 'HW')
{104: 72, 119: 87}

'hello world'.translate({104: 72, 119: 87})
'Hello World'


Što meni neće da radi maketrans!?

>>> import string

i onda probam, ali se buni interpreter

>>> trantab = maketrans(intab, outtab)
Traceback (most recent call last):
File "<pyshell#68>", line 1, in <module>
trantab = maketrans(intab, outtab)
NameError: name 'maketrans' is not defined
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste28.02.2020. u 17:23 - pre 49 meseci
Citat:
djoka_l:
Ovo sam ja izvukao iz jedne knjige (top 15):
Code:
JE    2696
I    1857
DA    1789
SE    1587
U    1303
NA    870
SU    595
ON    560
ZA    513
TO    496
SA    477
A    457
ONA    414
NE    390
ALI    351

Da, to su sve reči od 2-3 slova.
Nije baš nešto informativno.

Ja sam eksperimentisao sa zadavanjem dužine reči koje lista.
Kad mu stavim da ispiše reči duže od 5 slova, dobijem kod Crnjanskog ovo kao najčešće:

isakovič = 231
svojim = 149
kojima = 93
aranđel = 84
sasvim = 79
nekoliko = 79
jednom = 65
toliko = 65
kolima = 52
činilo = 49
isakoviča = 48
njegove = 46
svojih = 45
naročito = 43
najposle = 43
međutim = 42
vojnika = 41
jednog = 40
berenklau = 40
njegova = 38
činjaše = 37
gospoža = 36
velikim = 35
potpuno = 34
vojnici = 34
rukama = 33
dafina = 33
osećao = 32
njegovog = 31
varoši = 31
iznenada = 31


Ovo sad uraditi analizu više pisaca, pa upoređivati, taman za magistarski :)
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste28.02.2020. u 17:28 - pre 49 meseci
U toj knjizi, pojavljuje se oko 17500 reči, ali samo 4300 reči se pojavljuje 2 i više puta. Ostale samo po jednom...

Citat:
>>> import string

i onda probam, ali se buni interpreter

>>> trantab = maketrans(intab, outtab)
Traceback (most recent call last):
File "<pyshell#68>", line 1, in <module>
trantab = maketrans(intab, outtab)
NameError: name 'maketrans' is not defined


maketrans je metoda klase string.
Ne može tako da se poziva, nego
'nesto'.maketrans
ili
string.maketrans
ili
stringvarijabla.maketrans

 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste28.02.2020. u 17:33 - pre 49 meseci
A ja našao ovaj primer i probao da ga odradim kod mene na računaru



from string import maketrans # Required to call maketrans function.

intab = "aeiou"
outtab = "12345"
trantab = maketrans(intab, outtab)

str = "this is string example....wow!!!";
print str.translate(trantab)

When we run above program, it produces following result −

th3s 3s str3ng 2x1mpl2....w4w!!!
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste28.02.2020. u 17:41 - pre 49 meseci
Citat:
Ovo sad uraditi analizu više pisaca, pa upoređivati, taman za magistarski :)

Ovo je pre za neki seminarski rad, nije čak ni za diplomski.

Klasična metoda analize prirodnog jezika (jedna od) je da se rečenica posmatra kao "bag of words". Dakle ne analiziraš gramatiku, stil itd, nego izdvojiš reči, pa onda odbaciš iz tog skupa reči 100 (500, 1000, koliko god najčešćih) jer one ne nose mnogo značenja, a ono što ti ostane su ključne reči.

"U gužvi koja je tada nastala, Mitrović je skočio najviše i plasirao loptu u mrežu!"

Kada izbaciš u, koja, je, tada, i
ostane ti gužvi, nastala, Mitrović, skočio, najviše, plasirao, loptu, gol.
Onda vrlo lako možeš da shvatiš kontekst...
Dakle, to su reči koje zaista nose informaciju, ostale samo čine da bude rečenica gramatički ispravna.
 
Odgovor na temu

[es] :: Python :: Zadaci za wannabe pythoniste

Strane: << < .. 12 13 14 15 16 17 18 19 20 21 ... Dalje > >>

[ Pregleda: 51015 | Odgovora: 629 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.