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

pomoc za ucenje pythona

[es] :: Python :: pomoc za ucenje pythona

Strane: 1 2 3 4

[ Pregleda: 28304 | Odgovora: 64 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: pomoc za ucenje pythona20.11.2019. u 16:09 - pre 53 meseci
Zamenio nazive fajova, kao što si napisao, ali mi javlja drugu grešku

 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: pomoc za ucenje pythona20.11.2019. u 17:28 - pre 53 meseci
Sa mojim skoro nepostojećim znanjem pythona i uz googlanje, došao sam do nekog koda

Code:

import re

# Otvori fajl
with open("original.txt", encoding='utf-8') as of:
    for line in of:

# Podeli tekst kad naiđeš na '.' or ? or !.
        for l in re.split(r"\.|\?|\!",line):

# Izlistaj na ekranu
            print(l)

# Upiši rezultat u novi.txt
with open('novi.txt', 'w') as nf:
    print(l, file=nf)


E sad je problem što ovo upisivanje u fajl na kraju ne radi. Napravi fajl novi.txt, ali je prazan. Ne upiše to što izlistava na ekranu.
Gde gešim?
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: pomoc za ucenje pythona20.11.2019. u 18:10 - pre 53 meseci
Citat:
Please use the NLTK Downloader to obtain the resource:

>>> import nltk
>>> nltk.download('punkt')

Lepo ti kaže, prvo nltk.download('punkt'), pa onda pokreni kod.
Code (python):
import csv
import nltk

nltk.download('punkt')

with open('/putanja/do/tvoj_fajl.csv', 'w', newline='') as csv_file:
    writer = csv.writer(csv_file)
    try:
        fh = open('/putanja/do/tvoj_fajl.txt')
        lines = fh.read().replace('\n', '')
        lines = nltk.sent_tokenize(lines)
        for line in lines:
            writer.writerow([line])
    except IOError as e:
        print(f'OS error: {e}')
    finally:
        fh.close()
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: pomoc za ucenje pythona20.11.2019. u 18:23 - pre 53 meseci
Citat:
E sad je problem što ovo upisivanje u fajl na kraju ne radi. Napravi fajl novi.txt, ali je prazan. Ne upiše to što izlistava na ekranu.
Gde gešim?

Umesto w (write) stavi a (append): with open('novi.txt', 'a') as nf
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: pomoc za ucenje pythona21.11.2019. u 08:34 - pre 52 meseci
Mislim da si odabrao pogrešan problem za učenje Pythona.

NLP je ozbiljan problem, a nltk komplikovan paket. Procesiranje prirodnih jezika je težak problem za veštačku inteligenciju.
Kažeš, želiš da ispišeš svaku rečenicu iz teksta u novom redu.
E, sada dolazi kvaka 22: definiši šta je to rečenica u tekstu pisanom u nekom prirodnom jeziku. Daj mi bilo koju definiciju, a ja ću ti dati 10 primera koji će da pokažu da postoje rečenice koje se ne uklapaju u tvoju definiciju.

Nećeš daleko da stigneš, a Python će ti biti najmanji problem...
 
Odgovor na temu

peromalosutra
Ivan Rajkovic
Software engineer
Luxoft
Berlin

Član broj: 54774
Poruke: 871
141.113.67.*



+148 Profil

icon Re: pomoc za ucenje pythona21.11.2019. u 13:06 - pre 52 meseci
@a1234567

Sto se tice greske sa poslednjeg screenshota, ne mozes da koristis backslash (\) karakter unutar stringa, jer on ima specijalno znacenje i sluzi za definisanje escape sequenci. Da bi ubacio taj karakter u string, moras i njega da "ekskejpujes" (jbg, ne znam nas termin), tako sto koristis dupli backslash "\\".

dakle, umjesto ovog:
Code:
a = 'c:\neka\putanja.txt'


stavi ovo:

Code:
a = 'c:\\neka\\putanja.txt'


 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: pomoc za ucenje pythona21.11.2019. u 15:40 - pre 52 meseci
Citat:
Panta_:
Citat:
Please use the NLTK Downloader to obtain the resource:

>>> import nltk
>>> nltk.download('punkt')

Lepo ti kaže, prvo nltk.download('punkt'), pa onda pokreni kod.
Code (python):
import csv
import nltk

nltk.download('punkt')

with open('/putanja/do/tvoj_fajl.csv', 'w', newline='') as csv_file:
    writer = csv.writer(csv_file)
    try:
        fh = open('/putanja/do/tvoj_fajl.txt')
        lines = fh.read().replace('\n', '')
        lines = nltk.sent_tokenize(lines)
        for line in lines:
            writer.writerow([line])
    except IOError as e:
        print(f'OS error: {e}')
    finally:
        fh.close()


Panto, genije si. Punkt punktiran, da ne kažem daunlodovan. I sada tvoj kod radi kao sat.
Evo i dokaz



E a sad dolazi faza 2. Ovo je ubačen originalni tekst. Sad da iseckam prevod tog teksta, to znam kako ću. Ali kako da ga ubacim u istu ovu tabelu, ali da ga stavi u drugu kolonu, tako da se upari sa prvom?

 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: pomoc za ucenje pythona21.11.2019. u 15:51 - pre 52 meseci
Citat:
djoka_l:
Mislim da si odabrao pogrešan problem za učenje Pythona.

NLP je ozbiljan problem, a nltk komplikovan paket. Procesiranje prirodnih jezika je težak problem za veštačku inteligenciju.
Kažeš, želiš da ispišeš svaku rečenicu iz teksta u novom redu.
E, sada dolazi kvaka 22: definiši šta je to rečenica u tekstu pisanom u nekom prirodnom jeziku. Daj mi bilo koju definiciju, a ja ću ti dati 10 primera koji će da pokažu da postoje rečenice koje se ne uklapaju u tvoju definiciju.

Nećeš daleko da stigneš, a Python će ti biti najmanji problem...


E baš si me ohrabrio. :)))
Pa još da definišem rečenicu. Pa nisam ja veštačka inteligencija :))

Sve je pod kontrolom. Ja i ne nameravam daleko da stignem, već da nešto naučim. Koliko, videćemo. Nisam u žurbi. Mlad sam, tek sam otišao u penziju :)
Važno je svaki dan pomalo. A rad sa tekstovima me stvarno jako zanima, jer sam prevodilac i svaki dan radim sa njima. Pa da sebi malo olakšam.
Naravno, završivši studije jezika, nemam pojma o programiranju. Jedina olakšavajuća okolnost mi je što sam ceo vek bio znatiželjan i nije mi teško da učim nove stvari.
Tako da koliko god od pythona da naučim, čist dobitak. Programerima sigurno neću uzimati lebac.

I za kraj, ovo oko rečenice. U tekstovima sa kojima ja radim, rečenica se završava (uglavnom) tamo gde je tačka, znak pitanja ili uzvika i tu je sečem. Naravno, tačaka ima i unutar rečenice, ali to ćemo Panta i ja da rešimo u trećoj fazi ovog mega projekta. Sad smo još na početku druge :)

U svakom slučaju, hvala ti na komentaru i ako budeš imao ideja kako da rešimo ove naše petljavine, slobodno piši, pošto vidim da si upućen u NLTK. Unapred sam ti zavalan.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: pomoc za ucenje pythona21.11.2019. u 15:59 - pre 52 meseci
Citat:
peromalosutra:
@a1234567

Sto se tice greske sa poslednjeg screenshota, ne mozes da koristis backslash (\) karakter unutar stringa, jer on ima specijalno znacenje i sluzi za definisanje escape sequenci. Da bi ubacio taj karakter u string, moras i njega da "ekskejpujes" (jbg, ne znam nas termin), tako sto koristis dupli backslash "\\".

dakle, umjesto ovog:
Code:
a = 'c:\neka\putanja.txt'


stavi ovo:

Code:
a = 'c:\\neka\\putanja.txt'


Jao jeste, to sam pročitao u ovoj knjizi po kojoj idem, ali... zaboravio :(
Hvala ti na podsećanju.
Sad se sećam, kad je novi red onda ide \n ili enter \r

Interpreter mi javlja grešku, a ja ga ignorišem :)))

"eskejpuješ", pa to je naša stara reč, nema brige. Vuk Karadžić je još koristio kad je bežao iz Srbije :)))
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: pomoc za ucenje pythona21.11.2019. u 17:00 - pre 52 meseci
Citat:
Panta_:
Citat:
E sad je problem što ovo upisivanje u fajl na kraju ne radi. Napravi fajl novi.txt, ali je prazan. Ne upiše to što izlistava na ekranu.
Gde gešim?

Umesto w (write) stavi a (append): with open('novi.txt', 'a') as nf


stavio a umesto w, ali opet samo napravi prazan novi.txt fajl, ne upisuje text u njega.
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: pomoc za ucenje pythona21.11.2019. u 17:59 - pre 52 meseci
Citat:
stavio a umesto w, ali opet samo napravi prazan novi.txt fajl, ne upisuje text u njega.

Stavio si with blok izvan for petlje tako da nema sta da upiše, petlja ti se izvršila (vidi šta ti je l, print(l), nakon izvršenja for petlje, to će i da upiše. Stavi with ispod print(l), ili nešto ovako:
Code (python):

with open('original.txt', encoding='utf-8') as of:
    for line in of:
        with open('novi.txt', 'a') as novi:
            # Podeli tekst kad naiđeš na '.' or ? or !.
            for l in re.split(r"\.|\?|\!",line):
                # Izlistaj na ekranu
                print(l)
                # Upiši rezultat u novi.txt
                novi.write(l)
 
Odgovor na temu

Deunan

Član broj: 338178
Poruke: 83
*.dynamic.isp.telekom.rs.



+21 Profil

icon Re: pomoc za ucenje pythona21.11.2019. u 18:04 - pre 52 meseci
Citat:



E a sad dolazi faza 2. Ovo je ubačen originalni tekst. Sad da iseckam prevod tog teksta, to znam kako ću. Ali kako da ga ubacim u istu ovu tabelu, ali da ga stavi u drugu kolonu, tako da se upari sa prvom?



Iseckaj prevod kao sto si i original i spoji po dve recenice u jedan list: ['Tekst jedan ...', 'Tekst dva ...'].
I ubaci u csv red: writer.writerow([line1, line2])

Najbolje je da napravis univerzalno resenje, pa samo da dodajes jezike:
Code:

writeList = []
languages = ['rs.txt', 'en.txt', 'de.txt']   # nevazno koliko fajlova, samo dodaj path

for langId, languageFile in enumerate(languages):
    fh = open(languageFile)
    lines = fh.read().replace('\n', '')
    fh.close()
    lines = nltk.sent_tokenize(lines)
    for lineId, line in enumerate(lines):
        if langId == 0:
            writeList.insert(lineId, [])
        writeList[lineId].insert(langId, line)

with open('moj_fajl.csv', 'w', newline='') as csv_file:
    writer = csv.writer(csv_file)
    writer.writerows(writeList)
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: pomoc za ucenje pythona24.11.2019. u 15:04 - pre 52 meseci
Citat:
Panta_:
Citat:
stavio a umesto w, ali opet samo napravi prazan novi.txt fajl, ne upisuje text u njega.

Stavio si with blok izvan for petlje tako da nema sta da upiše, petlja ti se izvršila (vidi šta ti je l, print(l), nakon izvršenja for petlje, to će i da upiše. Stavi with ispod print(l), ili nešto ovako:
Code (python):

with open('original.txt', encoding='utf-8') as of:
    for line in of:
        with open('novi.txt', 'a') as novi:
            # Podeli tekst kad naiđeš na '.' or ? or !.
            for l in re.split(r"\.|\?|\!",line):
                # Izlistaj na ekranu
                print(l)
                # Upiši rezultat u novi.txt
                novi.write(l)



Zanimljiv slučaj, popravio kod kao što si napisao

Code:

import re
with open('engleski.txt', encoding='utf-8') as eng:
    for line in eng:
        with open('engleski_redovi.txt', 'w+') as eng_red:
            for l in re.split(r"\.|\?|\!",line):
                print(l)
                eng_red.write(l)
eng_red.close()

Na ekranu izlista tekst podeljen na rečenice, svaka u novom redu,
a u fajlu "engleski_redovi.txt" tekst nepromenjen, sav u jednom pasusu.

Druga stvar, ovaj regex kad ga secka na tački, on izbriše tačku. Kako da je ostavim na kraju rečenice?
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: pomoc za ucenje pythona24.11.2019. u 15:24 - pre 52 meseci
Citat:
Deunan:

Iseckaj prevod kao sto si i original i spoji po dve recenice u jedan list: ['Tekst jedan ...', 'Tekst dva ...'].
I ubaci u csv red: writer.writerow([line1, line2])

Najbolje je da napravis univerzalno resenje, pa samo da dodajes jezike:
Code:

writeList = []
languages = ['rs.txt', 'en.txt', 'de.txt']   # nevazno koliko fajlova, samo dodaj path

for langId, languageFile in enumerate(languages):
    fh = open(languageFile)
    lines = fh.read().replace('\n', '')
    fh.close()
    lines = nltk.sent_tokenize(lines)
    for lineId, line in enumerate(lines):
        if langId == 0:
            writeList.insert(lineId, [])
        writeList[lineId].insert(langId, line)

with open('moj_fajl.csv', 'w', newline='') as csv_file:
    writer = csv.writer(csv_file)
    writer.writerows(writeList)



Nemam ja više jezika, samo engleski i srpski.

Spojena dva teksta bi trebalo ovako da izgledaju pre uvoza u Calc tabelu:
eng_rečenica1,srp_rečenica1
eng_rečenica2,srp_rečenica2
eng_rečenica3,srp_rečenica3

Probao sam ovaj kod, ali javlja grešku:

File "C:\Users\ja_sa\AppData\Local\Programs\Python\Python37-32\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 5: character maps to <undefined>

Treba mu negde ubaciti encoding='utf-8'
jer windows je cp-1250, a moji txt fajlovi su utf-8
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: pomoc za ucenje pythona24.11.2019. u 19:55 - pre 52 meseci
Evo ti programce u Rust-u String je uvek utf-8.

Code:

use std::fs::File;
use std::io::Read;
use std::io::Write;

fn main()->Result<(),String> {
    let args:Vec<_> = std::env::args().collect();
    if args.len() < 4 {
        return Err(format!("usage: {} infile1 infile2 outfile",args[0]));
    } else {
        let mut inf1 = File::open(&args[1]).unwrap();
        let mut inf2 = File::open(&args[2]).unwrap();
        let (text1,text2) = (format(&mut inf1),format(&mut inf2));
        let mut ouf = File::create(&args[3]).unwrap();
        for (line1,line2) in text1.lines().zip(text2.lines()) {
        let _ = ouf.write(line1.as_bytes());
        let _ = ouf.write(",".as_bytes());
        let _ = ouf.write(line2.as_bytes());
        let _ = ouf.write("\n".as_bytes());
        }
        Ok(())
    }
}
fn format(inf:&mut File)->String {
        let mut text = String::new();
        let mut buf = String::new();
        let _ = inf.read_to_string(&mut text);
        for line in text.lines() {
            buf.push_str(&line);
            buf.push(' ');
        }
        text.clear();
        let mut sent = String::new();
        for c in buf.chars() {
            if c != ' ' { sent.push(c); }
            else { sent.push('_'); }
            if c == '.' {
                text.push_str(&sent);
                text.push('\n');
                sent.clear();
            }
        }
        text.push_str(&sent);
        sent.clear();
        text
}

 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: pomoc za ucenje pythona25.11.2019. u 05:06 - pre 52 meseci
Hvala ti, Branimire, ali ne bih da menjam jezik.
Odlučio sam se da naučim koliko-toliko python, pa dokle stignem.
Sad samo čekam još da Panta i Deunan postignu da mi daju neki hint. :))
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: pomoc za ucenje pythona25.11.2019. u 05:25 - pre 52 meseci
Pa prevedi ovo u python onda :P
Ja sam mislio da tebi treba program za to...
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: pomoc za ucenje pythona25.11.2019. u 05:34 - pre 52 meseci
Citat:
Na ekranu izlista tekst podeljen na rečenice, svaka u novom redu,
a u fajlu "engleski_redovi.txt" tekst nepromenjen, sav u jednom pasusu.

A gde ti je nov red u write? Dakle, stavi eng_red.write('{}\n'.format(l)) ili eng_red.write(f'{l}\n') u zavisnosti koju verziju Pythona koristis.
Citat:
Druga stvar, ovaj regex kad ga secka na tački, on izbriše tačku. Kako da je ostavim na kraju rečenice?

Na primer:
Code:
text = 'Prva recenica. Druga recenica! Treca recenica? Cetvrta, recenica.'

for l in re.split(r"(?<=\.|\?|\!)\s", text):
    print(l)
    
Prva recenica.
Druga recenica!
Treca recenica?
Cetvrta, recenica.


Pogledaj (?<=) (positive lookbehind assertion)
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: pomoc za ucenje pythona25.11.2019. u 05:54 - pre 52 meseci
Citat:
Evo ti programce u Rust-u

Jos malo pa kao u Brainfucku.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: pomoc za ucenje pythona25.11.2019. u 16:00 - pre 52 meseci
Citat:
Branimir Maksimovic:
Pa prevedi ovo u python onda :P
Ja sam mislio da tebi treba program za to...


Treba mi program, ali bih umesto ribe, voleo da naučim da pecam :)

U svakom slučaju, hvala još jednom na trudu.
 
Odgovor na temu

[es] :: Python :: pomoc za ucenje pythona

Strane: 1 2 3 4

[ Pregleda: 28304 | Odgovora: 64 ] > FB > Twit

Postavi temu Odgovori

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