Citat:
Aleksandar Ružičić: nadji dva kineza koja znaju da citaju srpski i plati im po 50e mesecno, i problem resen :D
:) Problem resen? Problem se svodi na "Naci dva kineza koji znaju da citaju srpski ... " :D
Citat:
Aleksandar Ružičić: elem, mislim da je to sto hoces preterano... mislim, ok ti je prvi deo (sa regularnim izrazima) ali da hvatas telefonske brojeve izdeljene u nekakve "podatke"... mislim da stvarno nema potrebe, mada...
Originalno resenje i jeste usvojeno zato sto je ovo sto sam poceo da mozgam preambiciozno, ali kad je vec ostala ideja, rekoh daj da je prodiskutijemo ...
Citat:
Aleksandar Ružičić: mozes da povadish sve brojeve iz poruke (znaci izbrises sve sto nije [0-9]) i onda da proverish, mislim da ti je to najjednostavnije resenje...
Da, to je bio jedan od pravaca kojim sam se kretao ali pogledaj premer, ukoliko se tako nesto uradi onda primer pod 1 i 2 spadaju u istu kategoriju ...
Cisto da napomenem, originalno resenje je tipa:
(Napomena, ovo je neki pseudo c++ kod)
Code:
String sms; // sms - string sms-a
String ref; // referentni broj ...
String test = RegexReplace( "[\\/\\ \\-\\+\\'\\\\\\\"\\_\\[\\]\\(\\)\\#\\$\\%\\^\\&\\@\\!]*" ,sms ,"");
// Ovde se "kondenzuju" telefonski brojevi odnosno izbacuje se sve sto bi ljudima palo na pamet da koriste da razdvoje cifre
test = RegexReplace( "[^0-9]*" ,test, "**");
// Ovde se sve sto nije cifra menja sa ** pa se u opstem slucaju dobija nesto poput **132123**23432**2342343**
test = ReplaceRegExpr( "(^|[*])[0-9]{1,5}($|[*])" ,test, "*");
// Izbacujemo sekvence koje su krace od 6 cifara ... pod pretpostavkom da validan telefonski broj ima bar 6 cifara
String tel_filter = "([*]|(("+ref.SubString(1,3)+")?0?"+ref.SubString(4,tn.Length()-3)+"))*";
// formiranje regularnog izraza u obliku ([*]|((XXX)?0?YYZZZZZZ))* - videti prvi post za XXX,YY i ZZZZZZ
test = RegexReplace(tel_filter ,test, "");
if(test!=""){
Message("Poruka verovatno sadrzi neprihvatiljiv telefonski broj ...");
}
Citat:
karas: Ako sam dobro razumeo, treba ti prepoznavanje telefonskog broja koji se sastoji od cifara ali među njima može biti razmaka, crtica i drugih znakova, mogu biti grupisani proizvoljno i tome slično. Npr. kada pogrešno ukucaš u Google neku reč, onda on izbaci
Did you mean... Dakle, potrebno je pronaći sve što sledi šablon nekog telefonskog broja.
Mislim da bi trebalo tražiti edit rastojanje između odgovarajućih reči, to je tzv. Levenštajnova metrika. Ako je broj edit operacija manji od nekog zadatog broja, onda su te reči suviše slične i SMS poruka se ne šalje.
PHP poseduje funkciju
levenshtein() koja to računa, mislim i da
MySQL ima tako nešto. Sa teorijske strane, to je problem dinamičkog programiranja, ima literature i na srpskom.
Nije problem i implementirati datu funkciju ako se razvije dobra metrika ...
No koliko sam shvatio ti to predlazes za "izvlacenje" tel broja ...
Izvlacenje je jednostavnije sa regularnim izrazima ...
Ali, apsolutno ti nije losa ideja u sledecem smislu
telefonski brojevi ipak imaju odredjenu strukturu ... odnosno minimalni i maksimalni broj cifara koji je logican kao i pozicije nekih cifara (recimo 0 je prvi
broj pozivnog broja a ne sme biti prvi broj niza cifara koji predstavljaju broj u lokalu, slicno ide za broj 9)
Ono gde bi se moglo upotrebiti je sledece:
Ako postoji broj dovoljno blizu (u smislu definisane metrike), broju koji se dobija grupisanjem grupa cifara izmedju teksta (ono iz primera)
koji odgovara nekom regularnom izrazu koji bi se konstruisao za proveru telefonskih brojeva onda postoji verovatnoca da je uradjeno ono iz primera.
Metrika bi se uglavnom konstruisala od funkcija zamene mesta grupa cifara (nema potrebe za umetanjem, menjanjem ili brisanjem jer to
menja znacenje broja, odnosno sam tel broj)
Pitanje je samo da li je u tom slucaju potrebna metrika, odnosno da li ce postojati veca verovatnoca da se broj u pokusaju maskiranja
zapise kao "XXX bla bla bla YY bla bla bla ZZZ bla bla ZZZZ" ili "bla bla YY bla bla ZZ bla ZZ bla ZZZ i pozivni (ili opet bla bla :) ) XXX"
Ukoliko nema neke posebne raspodele verovatnoce, odnosno ona nam nije bitna onda se prica svodi na
permutovanu konkatanaciju grupa cifara sa proverom (odnosno proveriti sve moguce rasporede i spajanja koja daju vise od 6 cifara u krajnjem nizu)
Elem, dao si mi odlicnu ideju za "nadogradnju" citave price ...
Ovo zapravo moze biti jako korisno zato sto je tesko da ce neko navoditi bilo koji podatak (u smislu grupe cifara) u SMS-u koji ce pocinjati
sa 0 sto znaci da ako nadjemo nesto oblika 0XX onda to definitivno moze biti pozivni broj ...
Ima li smisla ovo sto sam ja sad izblebetao?