[ usernameAlias @ 20.04.2019. 09:31 ] @
Pozdrav svima!

Postojeca baza podataka ima tabelu sa korisnicima usluga. Nazalost zbog loseg dizajna u jednoj koloni su zajedno: titula, ime i prezime. Mene interesuje nacin ne gotovo resenje :) kako mogu da odvojim prvenstveno ime iz baze i upisem u novu kolonu.

Ukoliko ima nekoga sa istim ili slicnim iskustvom/problemom da razmenimo misljenja :)
[ bokinet @ 20.04.2019. 14:16 ] @
Niste naveli koji DBMS je u pitanju.

Ako je MySQL onda:

Videti MySQL f-je za rad sa stringovima ako je u pitanju MySQL

Kao na primer:

LOCATE
SUBSTRING
SUBSTRING_INDEX
SPLIT_STR

Code:

SELECT
    SUBSTRING_INDEX(`imeprezime`, ' ', 1) AS `ime`,
    SUBSTRING_INDEX(`imeprezime`, ' ', -1) AS `prezime`
;


Code:

SELECT Substring(imeprezime, 1, Locate(' ', imeprezime) - 1) AS imeosobe,
       Substring(imeprezime, Locate(' ', imeprezime) + 1)    AS prezimeosobe 
FROM kontakti


Takodje ovo moze da bude performance killer i zato je bolje da se odradi dorada topologije DBMS.

[ Branimir Maksimovic @ 20.04.2019. 14:52 ] @
Citat:
usernameAlias:
Pozdrav svima!

Postojeca baza podataka ima tabelu sa korisnicima usluga. Nazalost zbog loseg dizajna u jednoj koloni su zajedno: titula, ime i prezime. Mene interesuje nacin ne gotovo resenje :) kako mogu da odvojim prvenstveno ime iz baze i upisem u novu kolonu.

Ukoliko ima nekoga sa istim ili slicnim iskustvom/problemom da razmenimo misljenja :)


Svaki programski jezik ima osnovne operacije sa stringovima, dakle ucitati kolonu, parsovati i onda insert ili update (zavisi da li ide alter ili u drugu tabelu).
[ usernameAlias @ 20.04.2019. 16:58 ] @
OK hvala na brzim odgovorima, ovo sa string funkcijama je jasno. Zaboravio sam da dodam(Mea culpa) da prilikom upisa u tabelu nema pravila na kome mestu je ime ili prezime. jednostavno je jedan string, i tu je dozvoljena "umetnicka sloboda", i Bogami se poprilicno koristi :) . Evo par primera:
marko kraljevic ing
kraljevic ing marko
ing. marko kraljevic
....
tako da su sve kombinacije zastupljene.



[ bogdan.kecman @ 20.04.2019. 17:13 ] @
kupis onda jednu staklenu, idealno kristalnu, kuglu, nadjes onog ko je
dizajnirao sistem i uguras mu je u ....
[ jablan @ 20.04.2019. 17:18 ] @
Dobar projekat za machine learning. :)
[ usernameAlias @ 20.04.2019. 17:22 ] @
@bogdan_kecman
Kugla nabavljena ... ;)

Ostaje nabavka neke baze sa imenima pa uporedjivanje ...
[ bokinet @ 20.04.2019. 21:53 ] @
ima da se nadje po netu spisak imena za skoro sve drzave sveta... treba se samo malo potruditi.
[ nkrgovic @ 21.04.2019. 08:14 ] @
Ima ima, samo sto ako i ime i prezime nisu u svakoj listi i nisu unique, onda imas problem. Ima gomila imena koja se koriste kao prezimena, posebno u zapadnoj Bosni, Liki, Krajini.... Da ne imenujem kolege koje poznajem, nije lepo bez pitanja. Znam za slucaj da covek ima istu rec kao ime i kao prezime. :)

Listama mozes da proredis problem, pa onda da rucno (mozda) resis ostatak. Ali ceka te BRDO posla.

Onaj Bogijev savet za kuglu je najbolji ;)
[ mjanjic @ 21.04.2019. 12:31 ] @
Sortiraš tabelu po tom stringu, pa onda lepo rešiš korak po korak po grupama gde se ponavlja prvi deo stringa (ko većine će biti titula pa je premestiš u kolongu za titulu). Proces ponoviš na istoj koloni čime ćeš rešiti preostala 2 dela stringa.

U principu, čak i Excel 2016 ima neku "pametnu" logiku kad takav string prekucaš u naredne 3 kolone pa "kopiraš" metodu naniže, on automatski popuni ostale vrste sa ta 3 odvojena stringa, tako da nema toliko potrebe za potezanjem nekih previše naprednih rešenja, ako u toj koloni nisu eventualno upisivani zarezi (mada bi to olakšalo posao).

Najjeftinije ti je da eksportuješ u Excel i pošalješ nekom u Indiji ili Maleziji da to sredi ručno ;)
[ nkrgovic @ 21.04.2019. 18:22 ] @
Nema sanse... Pazi probleme :

- Batrić Luka - imaš 50% šansi da pogodiš šta je ime šta prezime, jer oba mogu da budu oba...
- Pola njih nema titulu. Garant. Oni koji imaju mogu imati "prof dr sci med" na primer, sa ili bez tackica.... to je kucao ko je stigao, a i ovo je realna titula.
- Dva prezimena, sa ili bez crtice. Možda i tri, imao sam poznanicu koja je imala tri prezimena.... (devojacko, od prvog, pokojnog muza, sa kojim je imala dete, i od drugog muza).
- Dva imena, spojeno ili odvojeno. Znao sam jednu Ana Mariju na primer....

Na sve to, tu nema sanse da to radi neko iz Indije, ko ne zna jezicke norme jezika koji se obradjuje. Za svaki jezik mora neko ko je native speaker.

Otprilike algoritam:

- Privhatiti da ce biti par procenata greske
- Izbaciti duplikate iz ime/prezime, ako ih nije previse.
- Izabrati sve koje imaju dva stringa, proveriti da li su oba u wordlistama za ime i prezime. Ako jesu, obraditi tako (da, bice greski...)
- Izabrati sva prezimena koja nisu od ovakvih, proveriti da li ima crtica. Ako ima probati da li odvojeni delovi imaju smisla u listi prezimena, ili listi imena.
- Izabrati tri stringa, probati da li ima dva prezimena, ili dva imena.
- Iz preostalih sa tri stringa proveriti da li ima jedna titula, sa spiska titula. Spisak napuniti svim kombinacijama (mala, velika, sa i bez tacke, ing i inž....)
- Izabrati 4 stringa, probati varijante "titula, ime, dva prezimena", jer to nije toliko retko.
- Proveriti multi-string "multi whitespaces" titule u preostalima, i videti da li ostaju samo smisleno ime i prezime, ili ime prezime-prezime ili ime prezime prezime.
- Sve ostalo ostaviti za rucnu obradu, nekome ko je native speaker, ako ume da pogodi... Najbolje onome sto je sistem dizajnirao, poneti gorepomenutu kuglu. :D

Ocekivati greske. :D

[ bokinet @ 21.04.2019. 18:39 ] @
- Podeli se trenutna vrednost iz baze na vrednosti gde je delimiter recimo prazno mesto;

- Od toga napravis jedinstvenu listu gde ce biti sadrzani svi zapisi iz prethodno dobijenih vrednosti;

- Za svaki zapis dodeliti pokazivac, da li je ime, prezime ili titula - moze biti pokazivac tipa integer ili string stvar volje;

- Raspisati onda deo koji vrsi parsovanja i formiranje potrebnog oblika (zasebno/posebno ime, prezime i titula i/ili celovitih vrednosti u razlicitim oblicima) na osnovu jedinstvene liste koja je identifikator nad podacima koji vec postoje u bazi i potom formirati novu tabelu ili izlazni skup podataka u zeljenom formatu. Pri poredjenju za trenutni zapis tj. osobu, a gde se vrsi identifikacija vrednosti naspram jeidnstvene tabele, dodavati vrednosti a ne prepisivati kada je rec o individualnim vrednostima za ime, prezime i titulu osobe... znaci ime += ' ' + deo predvidjene vrednosti za ovo polje, prezime +=' ' + deo vrednosti predvidjeno za ovo polje;