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

Cirilica u latinicu

[es] :: Pascal / Delphi / Kylix :: Cirilica u latinicu

[ Pregleda: 5614 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vortex77

Član broj: 91694
Poruke: 124
*.dynamic.sbb.co.yu.



+1 Profil

icon Cirilica u latinicu12.02.2007. u 11:12 - pre 208 meseci
Postoji li neki nacin da se izvrsi konverzija podataka u bazi iz cirilice u latinicu i obrnuto, bez da koristim for petlju i konverziju tipa slovo za slovo?

Naime, u bazi imam preko 15000 slogova i oko 10 string kolona nad kojima treba izvrsiti konverziju. Trenutno imam algoritam koji iterira kroz celu bazu, field by field i vrsi promenu slovo po slovo, sto znaci da imam min. 2 for petlje, dok sam proces traje extremno dugo!

Hvala
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Cirilica u latinicu12.02.2007. u 12:29 - pre 208 meseci
> Postoji li neki nacin da se izvrsi konverzija podataka u bazi iz cirilice u latinicu i obrnuto, bez da koristim
> for petlju i konverziju tipa slovo za slovo?

To zavisi od baze koju koristiš. Možda možeš očekivati da postoji neka ugrađena funkcija za konverziju koju bi ti mogao pozvati.

> Naime, u bazi imam preko 15000 slogova i oko 10 string kolona nad kojima treba izvrsiti konverziju.
> Trenutno imam algoritam koji iterira kroz celu bazu, field by field i vrsi promenu slovo po slovo, sto znaci
> da imam min. 2 for petlje, dok sam proces traje extremno dugo!

150k i nije tako mnogo, šta znači ekstremno sporo? Kako ti tačno izgleda petlja. Možeš pokušati da posao prebaciš na SQL server preko neke stored procedure ili UDF funkcije.

 
Odgovor na temu

vortex77

Član broj: 91694
Poruke: 124
*.dynamic.sbb.co.yu.



+1 Profil

icon Re: Cirilica u latinicu12.02.2007. u 12:50 - pre 208 meseci
pa... radim sa mySQL-om i problem je to sto uzimam podatke iz 4 povezane tabele i od njih pravim potrebnu selekciju podataka.
Pod "sporo" mislim na 15 min koje je potrebno da bi se konverzija izvrsila. Inace, sve radim u cache modu da bi samo opterecenje mreze prilikom rada bilo sto manje.

Da budem precizniji... potrebno je formirati izvod iz birackog spiska gradjana, zajedno sa imenima ulica, mesnih zajednica itd. (gde je svaki podatak u zasebnoj tabeli). Petlja izglega ovako:

for i := 1 to RecordCount do
for j := 1 to FieldCount do
for z := 1 to Length(string) do
konverzija

Mislim da bi sada trebalo da ti bude malo jasnije zasto je sporo :)
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Cirilica u latinicu12.02.2007. u 17:23 - pre 208 meseci
> pa... radim sa mySQL-om i problem je to sto uzimam podatke iz 4 povezane tabele i od njih pravim potrebnu selekciju podataka.
> Pod "sporo" mislim na 15 min koje je potrebno da bi se konverzija izvrsila.

Koji deo je najsporiji, samo preuzimanje podataka (probaj bez konverzije), iteracija, konverzija ili izmena u bazi?

> for i := 1 to RecordCount do

Zašto RecordCount, šta dalje sledi? Koju komponentu koristiš? Zašto ne, while not eof do Dataset.Next?
> for j := 1 to FieldCount do

Šta se dešava u ovoj petlji.

> for z := 1 to Length(string) do

Kako ti izgleda ova konverzija?
Kako snimaš podatke natrag u bazu?
 
Odgovor na temu

vortex77

Član broj: 91694
Poruke: 124
*.dialup.sezampro.yu.



+1 Profil

icon Re: Cirilica u latinicu12.02.2007. u 19:03 - pre 208 meseci
Ok, evo onda da pocnem pricu ispocetka :)

Pri radu koristim mySQL i Delphi 7 sa myDAC komponentama. myDAC predstavlja prosirenje delphi native komponenti ( TQuery, TTable... ) specijalizovane za rad sa mySQL bazom. Prihvat podataka radim preko TMyQuery-a (u cache modu), dok se sve promene nad podacima vrse u lokalnoj memoriji. Tek kada je obrada zavrsena, podatke saljem u bazu sa ApplyUpdate i CommitUpdate.

> Koji deo je najsporiji, samo preuzimanje podataka (probaj bez konverzije), iteracija, konverzija ili izmena u bazi?

S'obzirom da se izmena u bazi radi nakon kompletne obrade, mogu reci da je najsporiji deo sama iteracija.
Algoritam koji koristim (verovatno los) je :

za svaki slog u bazi (red) -> for i := 1 to RecordCount do
uzmi sva polja -> for j := 1 to FieldCount
i za svako polje uradi konverziju (slovo na slovo) -> for z := 1 to Length(string) do

Po mom iskustvu, while not EOF i for i := 1 to RecordCount rade isto, jel koliko znam oba izraza predstavljaju iteracije od prvog do poslednjeg.

Konverzija se svodi na detekciju i zamenu latinicnog u cirilicno slovo (i obrnuto).

Jedna od ideja koja bi mozda ubrzala rad jeste da napravim sql izraz koji bi direktno radio find & replace, ali ne znam kako da unutar select upita pristupim nekom od slova i zamenim ga.....

Posto sam stvarno ostao bez ideja bilo kakva pomoc bi mi bila vise nego dobrodosla.

HVALA
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Cirilica u latinicu12.02.2007. u 20:03 - pre 208 meseci
> Po mom iskustvu, while not EOF i for i := 1 to RecordCount rade isto, jel koliko znam oba izraza predstavljaju iteracije od prvog do poslednjeg.

Grubo rečeno, ali uz jedno veliko ALI. RecordCount implicira preuzimanje svih slogova, u tvom slučaju njihovo keširanje, povećanu upotrebu memorije i sporiji rad. Ne znam te komponente ni kako je implemntiran SetRecNo pa i to može biti problem. Uglavnom, tebi treba što niži nivo pristupa, što jednostavnija klasa, čak ako ima i neka koja nije TDataSet. I treba ti kretanje u jednom pravcu, od prvog do poslednjeg, bez keširanja i bez potrebe za povećanom memorijom, pretpostavljam da te komponente imaju neki takav parametar, UniDirectional ili sl.

> Posto sam stvarno ostao bez ideja bilo kakva pomoc bi mi bila vise nego dobrodosla.

Moraš uraditi preciznija merenja, recimo koristi GetTickCount. Moraš tačno znati šta je usko grlo, dakle uradi samo preuzimanje podataka, potom dodaj i iteraciju po poljima i sve to bez konverzije.
 
Odgovor na temu

vortex77

Član broj: 91694
Poruke: 124
*.dynamic.sbb.co.yu.



+1 Profil

icon Re: Cirilica u latinicu13.02.2007. u 07:40 - pre 208 meseci
Hvala savkic,

Probacu da istestiram za "uska grla".

Da li mozda mozes da mi predlozis neki algoritam kojom bih mogao da odradim ovu konverziju?
 
Odgovor na temu

aleksandarpopov
IT consultant
Senta

Član broj: 57172
Poruke: 484
*.sksyu.net.

Sajt: www.linkedin.com/in/aleks..


Profil

icon Re: Cirilica u latinicu13.02.2007. u 08:19 - pre 208 meseci
Ako koristis neku noviju verziju MySql-a, koliko znam ona podrzava stored procedure pa bi ti najpametnije bilo da uradis sa stored procedurom.
RTFM
 
Odgovor na temu

vortex77

Član broj: 91694
Poruke: 124
*.dynamic.sbb.co.yu.



+1 Profil

icon Re: Cirilica u latinicu13.02.2007. u 10:18 - pre 208 meseci
:))) Kako?
 
Odgovor na temu

aleksandarpopov
IT consultant
Senta

Član broj: 57172
Poruke: 484
*.sksyu.net.

Sajt: www.linkedin.com/in/aleks..


Profil

icon Re: Cirilica u latinicu13.02.2007. u 10:25 - pre 208 meseci
Procitaj malo dokumentaciju o stored procedurama - ne koristim MySql pa ti ne mogu mnogo pomoći, to ćeš morati sam malo da proučiš. Sve u svemu stored procedura je procedura koja je kompajlirana i izvršava se na serveru, možeš da koristiš petlje, uslovno grananje i sql - kad sve to izmixaš, dobiješ dosta moćnu stvar.
RTFM
 
Odgovor na temu

vortex77

Član broj: 91694
Poruke: 124
*.dynamic.sbb.co.yu.



+1 Profil

icon Re: Cirilica u latinicu13.02.2007. u 10:40 - pre 208 meseci
hahaha..... problem je malo drugaciji!
Naime, ja znam sta su procedure i kako one rade, ono sto ne znam jeste kako da napravim ALGORITAM koji bi ubrzao pretrazivanje.
Koristeci stored precedures ili procedure u Delphiju sve se svodi na isto - iteriranje kroz svaki karakter u bazi. Takodje mi je malo nejasno kako da pristupim konkretnom karakteru u slogu baze....

Posto smo se malo udaljili, ja bih radije da mi neko kaze kako mogu da AnsiReplaceStr ili StringReplace iskoriskim za koriscenje WideString-a? Trenutno ni jedna ne prepoznaje cirilicna slova....
Da li postoji delphi native ili neka druga "komponenta" koja bi ovo odradila?


Hvala
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Cirilica u latinicu13.02.2007. u 14:28 - pre 208 meseci
> Posto smo se malo udaljili, ja bih radije da mi neko kaze kako mogu da AnsiReplaceStr ili StringReplace iskoriskim za koriscenje WideString-a?
> Trenutno ni jedna ne prepoznaje cirilicna slova....

Ne pratim kakve veze ima ReplaceString sa time što ti radiš, nije valjda da njih koristiš za konverziju? Ni pod razno! Moj ti je savet da postuješ konkretan kod i one rezultate da bih ti mogao ukazati gde grešiš.



 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Cirilica u latinicu

[ Pregleda: 5614 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

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