[ gotivac @ 26.04.2012. 09:44 ] @
Imam jedan problem, pokušavam da ga rešim na različite načine, pa su svi predlozi dobrodošli.

Naime, imam nekoliko baza, neke su u Access2003, neke u MSSQL2005 formatu, struktura im je ista.
U svakoj se nalazi tabela "Poseta" u kojoj postoje polja "Ime" i "Prezime".
Imam posebno tabelu "Personal" koju sam importovao u svaku od ovih baza sa imenima i prezimenima (ima 109 lica, odnosno slogova).

Cilj je iz tabele "Poseta" iz svih baza (i ovih u Access2003 i MSSQL formatu) izvući sve ljude koji se nalaze u tabeli "Personal", reklo bi se ništa lakše od toga, idemo jednu po jednu bazu sa kverijem i gotovo.

U čemu je problem?

U tabeli "Personal" korišćeni su dijakritici (šđčćž), pa je tako Đorđe Petrović zaista Đorđe Petrović.

Međutim, u tabelama "Poseta" u bazama (a tabele "Poseta" imaju po nekoliko desetina hiljada slogova) su podaci bez ikakvog pravila -

Đorđe Petrović je negde ĐORĐE PETROVIĆ, negde DJORDJE PETROVIC, negde je ĐORĐE PETROVIC, negde je DJORDJE PETROVIĆ i sve ostale moguće i nemoguće kombinacije, pošto su aplikaciju za popunjavanje koristile tokom par godina različiti ljudi različitog stepena pismenosti raspoređeni na ta radna mesta.

Sad, ja sam primetio kod nekih search engine-a (Google, npr.), da kada je uslov za pretragu "Petrović" ili "Petrovic" daje kao rezultate pretrage i "Petrovic" i "Petrović". Suština mog pitanja je kako to oni rade?

Kako biste vi rešavali ovaj problem? Mislio sam da napravim još dva polja za ime i prezime u tabeli "Personal" sa imenima bez dijakritika, pa da pustim dva puta više upita, ali ni to ne garantuje dobar rezultat, baš zbog korišćenja slova Đ (negde su koristili DJ iako su pisali ĆŠŽČ), a postoje i nekonzistentnosti tipa MIŠKOVIC, MISKOVIĆ...

Sve ideje su dobrodošle.
[ djoka_l @ 26.04.2012. 10:38 ] @
Evo baš juče se pojavilo slično pitanje na ovom istom forumu http://www.elitesecurity.org/t441956-Stemmer-za-srpski-jezik
Šta Wikipedija kaže http://en.wikipedia.org/wiki/Stemming

Drugim rečima, razrešenje tvog problema se nalazi u raznoraznim algoritmima koji treba da porede dva stringa.
Nema jednostavnog odgovora, nema tog upita koji će ti dati zadovoljavajuće rezultate.

Recimo, tvoj primer za, na primer, Đorđa Petrovića koji je u tabeli personal. Kako ćeš da znaš da je posetilac Đorđe Petrović baš tvoj zaposleni, a ne neko koji se isto tako zove. Kako ćeš da znaš da je nečije ime Mihailo a ne Mihajlo, da je prezime Mihajlović, a ne Mihailović kada su sve varijante ispravne. Kako da znaš da je ispravno precime Mičić, a ne Micić kada oba prezimena postoje i da li je Micic u stvari Mičić ili Micić.

Dakle. univerzalno rešenje ne postoji, ono što možeš da uradiš je da "ošišaš" slova u imenima iz tabele personal, da isti algoritam primeniš na slova iz tabele poseta i da onda to porediš...
[ gotivac @ 26.04.2012. 23:08 ] @
Bravo!

Vidi, nema tu nekih velikih problema oko "otkrivanja" pravih lica, podaci će kasnije ići na ručnu obradu, reč je o nekom naučno-istraživačkom projektu, izabraće se od tih ~109 (pošto ne znam da li su i svi evidentirani) nekoliko nad čijim podacima će se vršiti neke analize.

Bitno mi je da povučem što više "pravih", a to će savršeno raditi uz ovu ideju da ošišam slova u obe tabele, i moram priznati da sam zapanjen kako se toga nisam setio.