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

Prepoznavanje telefonskog broja

[es] :: Art of Programming :: Prepoznavanje telefonskog broja

[ Pregleda: 5088 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vlaiv
Vladimir Vlaisavljevic
Novi Sad

Član broj: 15993
Poruke: 352
212.200.249.*



+1 Profil

icon Prepoznavanje telefonskog broja02.04.2007. u 11:31 - pre 207 meseci
Evo o cemu se radi ...

Pre nekog vremena sam naisao na sledeci problem ...

Kako prepoznati da li je u tekstu naveden telefonski broj koji se razlikuje od zadate referentne vrednosti?

znaci imamo

RefTel u obliku (XXX)YY/ZZ-ZZ-ZZZ

mada je zapisan bez zagrada i znakova /-

odnosno XXXYYZZZZZZZ

(Z -ova ima 6 ili vise ...)

i poruku od 160 karaktera - u pitanju je SMS

Potrebno je izdvojiti slucajeve (filter) kada se navodi telefonski broj koji je razlicit od onog sa koga je SMS poslat
(Zastita od zloupotrebe tudjih tel brojeva)

Koristeci regularne izraze dosao sam do sledeceg:

Ukoliko je tel broj naveden u sms poruci jednom ili vise puta i zapisan u nekom od standardnih oblika za zapis tel broja

XXX YY ZZZZZZZ ili 0YY ZZ ZZ ZZZ ili 0YY/ZZ ZZ ZZZ ili bilo koja kombinacija sa razmacima - i / ili slicno ...

uspevam izdvojiti broj i jednostavnim poredjenjem sa regularnim izrazom (XXX)?0?YYZZZZZZ sa referentnom vrednoscu
saznajemo da li je broj odgovarajuci ...

Problem nastaje u sledecim primerima:

(Svi akteri u porukama su izmisljene licnosti i svaka slicnost sa realnoscu, bla bla ... :) )

1. Devojka 28 godina, visoka 170, trazi mladica do 30 god viseg od 175 ....

2. Posaljite uznemiravajuci SMS, ukucajte 28 pa zatim 170 i na kraju 30, ali ne zaboravite pozivni 175 ...

Primeri daju opsti oblik kako je moguce zapisati telefonski broj navodeci grupe cifara odvojene proizvoljnim tekstom i to
isto uraditi sa proizvoljnim podacima koji ne predstavljaju telefonski broj ...

Znaci mozgalica je sledece prirode:

Naci opsti oblik zapisa telefonskog broja u poruci a da je on razumljiv za oko 95% populacije (ne racunajuci tu enigmaticare i
resavace rebusa :) )

i razlikovati ga od proizvoljnih podataka u istom ili slicnom obliku.

Po mogucnosti ne ukljucivati semanticku analizu recenice u procesu prepoznavanja :))))

Ima li iko kakve ideje?
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Prepoznavanje telefonskog broja02.04.2007. u 13:15 - pre 207 meseci
Citat:
Ima li iko kakve ideje?

nadji dva kineza koja znaju da citaju srpski i plati im po 50e mesecno, i problem resen :D


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...

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...
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.routotelecom.com.



+1 Profil

icon Re: Prepoznavanje telefonskog broja03.04.2007. u 08:22 - pre 207 meseci
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.
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

vlaiv
Vladimir Vlaisavljevic
Novi Sad

Član broj: 15993
Poruke: 352
212.200.249.*



+1 Profil

icon Re: Prepoznavanje telefonskog broja03.04.2007. u 13:00 - pre 207 meseci
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?
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.routotelecom.com.



+1 Profil

icon Re: Prepoznavanje telefonskog broja03.04.2007. u 15:04 - pre 207 meseci
Imao sam na umu prostiju ideju, bez permutacija i verovatnoće, samo se koriste edit operacije.
Smisleno je pretpostaviti da telefonskom broju u SMS-u ne sme da se menja raspored cifara, već se samo mogu umetati beline, crtice ili neki drugi znaci između cifara (kako inače rekonstruisati polazni broj). Edit operacije za transformaciju stringa su dodavanje, brisanje ili umetanje znaka. Levenštajnova metrika je minimalan broj edit operacija koje prevode jedan string u drugi. Dakle, treba naći string u SMS-u koji počinje cifrom i završava se cifrom tako da pre i posle te dve cifre nema drugih cifara (string-kandidat za telefonski broj). Za tako određen string i broj telefona pošiljaoca izračuna se Levenštajnovo rastojanje. Ako je ono suviše malo, onda se poruka ne šalje. Treba još videti koje rastojanje je dovoljno malo.

Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

[es] :: Art of Programming :: Prepoznavanje telefonskog broja

[ Pregleda: 5088 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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