Numeri di telefono e fax, come riorganizzarli?

di il
26 risposte

26 Risposte - Pagina 2

  • Re: Numeri di telefono e fax, come riorganizzarli?

    migliorabile ha scritto:


    C'e' sempre la solita regola: tempo/danaro, o se vuoi serve/non serve.
    Se serve e sa' da fare, si fa'.
    Altrimenti cosi' e' e cosi' rimarra per sempre. E peggiorera' pure, ovviamente
    Ciao Migliorabile, hai azzeccato, ma oltre al tempo/denaro aggiungerei anche il rischio di possibili danni che invece di semplificare potrebbero anche peggiorare le cose, come hai giustamente accennato tu in conclusione

    Per farti soltanto un esempio, se un numero con prefisso 335 viene scambiato per un cellulare italiano, quando invece in quel caso è il prefisso internazionale dell'Albania, alla fine c'è il rischio che per una buona parte dei numeri non ci si capisca più nulla, se non attraverso la consultazione dei vecchi dati.

    Condivido la tua ipotesi di procedere per gradi, bisognerà valutare tempi, costi e risultati... non vorrei trovarmi nella condizione di spendere più tempo a fare manutenzione ai dati già trattati, rispetto ad una manutenzione 100% manuale.

    Molto interessanti tutte le altre tue considerazioni, anche se non ho le competenze adeguate per farne una valutazione, ma saranno comunque utili spunti per approfondimenti.

    Ciao
    MTA
  • Re: Numeri di telefono e fax, come riorganizzarli?

    +m2+ ha scritto:


    Maddaaaiiii... adesso non voglio fare esageratamente lo sborrone, ma quello che descrivete come "dramma drammatico" per me è routine quotidiana, banalità.
    Gestisco l'invio di avvisi a centinaia di migliaia di indirizzi
    Ciao m2,
    comprendo ed apprezzo la sicurezza che dimostri nell'affrontare l'argomento, ma a volte può essere utile anche qualche riflessione in più...

    +m2+ ha scritto:


    - 02/20605012-380/10615789 L. 380/0642529983,
    - 79867563195 Fiona 7095/2302538 VI. 0432/2589569
    Cosa capirà il programmello?
    Saprà distinguere i telefoni fissi dai cellulari?
    Come farà a capire quale parte del numero è prefisso e quale numero di telefono?
    Dove mancano i prefissi corretti, come farà ad attribuirli automaticamente?
    Ecc. ecc.
    Capirà perfettamente tutto, distinguerà banalmente i cellulari (iniziano per 3, così per inciso, se non ci hai mai pensato, ed hanno due lunghezze possibili) dai fissi.
    La prima stringa contiene due numeri con prefisso 380, nel primo caso potrebbe (condizionale) trattarsi di un cellulare italiano, ma nel secondo caso si tratta di un numero fisso di Lugansk ex Ukraina.
    Nella seconda stringa i primi due numeri sono russi, uno un cell. e l'altro un fisso di Mosca, mentre il terzo numero non è del Veneto ma di Vinnycja, Ucraina.
    Non esistono solo numeri di telefono italiani ma anche altri di tutto il resto del mondo.

    +m2+ ha scritto:


    Quello che non si può fare è porre il prefisso se esso manca, e non c'è l'indicazione del prefisso.
    Tizio tel 777123 non potrà diventare magicamente 02777123 se non c'è da qualche parte l'indicazione che sta a milano. Se invece c'è => magicamente può apparire anche il prefisso.
    Mi dispiace ma anche in questo caso non è così, non sempre i numeri di telefono sono relativi alla località indicata nell'indirizzo, in questi casi aggiungere un prefisso sbagliato creerebbe non pochi problemi in seguito, renderebbe quel numero inutilizzabile.

    +m2+ ha scritto:


    questa "06/1234567-340/0855887" di un "Contatto" italiano è facile stabilire che si tratti di un numero fisso di Roma e di un cellulare, ma se quella stringa cambia in "06/1234567-340/0855887 K 380/612653072" cosa succede?
    Succede che le interpreti correttamente.
    Quale sarebbe la difficoltà dell'esempio che hai messo?
    Nessuna.
    La difficoltà sta nel fatto che il programmello non è riuscito a capire che il terzo numero è di Kiev, Ucraina.

    +m2+ ha scritto:


    Non servono librerie, non servono espressioni regolari, non serve sti.zzzi, basta un po' di kung-fu di manipolazione stringhe, un riconoscitore ad hoc che affini progressivamente man mano che elimini i casi già riconosciuti (essendo l'insieme finito è ovviamente ricorsivo, quindi banale in ultima istanza).
    Insomma routine.
    Almeno per me.
    Con il Kung-fu non vorrei ritrovarmi un elevato numero di dati incomprensibili che poi mi richiederebbero molto più tempo per sistemarli, rispetto a quanto ne impiegherei nel fare una preventiva ed accutara manutenzione manuale di tutto quanto
    Sulla banalità ho qualche dubbio, consentimelo

    +m2+ ha scritto:


    Aggiungo: ovviamente non con Access, mi riferisco in concreto a un programma Delphi specifico (Pascal ha una gestione delle stringhe "umana", quindi niente C o C++ o Java), adatto proprio al tuo caso, e senza alcuna velleità di universalità o chissà che.
    Un classico esempio di intelligenza artificiale (coi paroloni di oggi), in realtà nulla più che "artigianato informatico professionale"
    Sono sicuro di non essere né il primo né l'unico a dover affrontare un problema del genere, sono altrettanto certo che esistono soluzioni efficaci, anche se non in grado di risolvere il 100% dei casi, ma anche risolverne un 70% CORRETTAMENTE sarebbe un bel vantaggio.

    +m2+ ha scritto:


    Conclusione: qualsiasi cosa possa fare un "umano", nel "sistemare" il tuo elenco di numeri di telefono, può benissimo farlo un programmello.
    Quello che l' "umano" non potrebbe fare (inventarsi prefissi assenti, distinguere casi in cui non ci sono possibilità di discriminazione) non lo può fare neppure il programmello.
    Avendo un numero finito di casi ed essendo il database fisso è ovvio che la situazione è banalmente risolvibile.
    Ti basta enumerarli, uno per uno, tanti o pochi che siano.
    Non è vero! Anche gli umani possono sbagliare e sopra ti ho dimostrato come un'interpretazione superficiale del problema può portare a diversi errori. Il programmello fatto da altri umani non potrà certo fare di meglio.

    +m2+ ha scritto:


    Il "dramma" nasce nel momento in cui hai un archivio DINAMICO, dove possono "saltar fuori" nuovi casi, non previsti, e lì la questione si fa difficile, talvolta addirittura impossibile.

    Ma con un archivio statico?
    Banale.
    Mi fa piacere che per te sia tutto molto banale, ma vedrai che qualche approfondimento ti sarà utile.

    Ciao e buona giornata
    MTA
  • Re: Numeri di telefono e fax, come riorganizzarli?

    Mah... francamente mi pare che ti stai un pochino arrampicando sugli specchi.

    Se un dato non c'è, non c'è nè per me, nè per te, nè per il computer.
    Se un numero di telefono è ucraino, non lo saprai tu, non lo saprò io, non lo saprà il computer.
    Se il dato, cioè l'informazione, che specifica a chi "appartiene" il numero non c'è, non te lo puoi inventare.
    Neppure tu (inteso come "umano").

    Nel caso specifico il numero indicato non è ovviamente un cellulare italiano, è troppo lungo.
    Te l'avevo già scritto prima, ma evidentemente non ci hai fatto caso.

    In estrema sintesi, te lo ribadisco.
    Un programmello può fare, in questo caso, tutto (e solo) quello che farebbe un "umano".
    Se il risultato è da arricchire, con informazioni che non ci sono, non lo potrà fare il programma, nè l'umano.
    Se le informazioni CI SONO, in altre tabelle ad esempio, ci si può lavorare.

    E' ovvio che se il numero 3393333333 è sia un cellulare italiano che un numero fisso di Bozambo, e non c'è scritto da nessuna parte se il Bozambese casomai ha un cellulare italiano, nè tu, nè io, nè alcun programma potrà discriminare i due casi.
    Un Bozambese ben potrebbe comprare una SIM italiana.

    Spero di essere stato chiaro.
    ---
    Riguardo a come si affronta un banale problema del genere
    1) non importa quante righe ci sono. importa che siano in numero finito. e che quindi sia finito il numero dei modi in cui si sono "inventati"

    2) si opera per approssimazioni successive.
    si inizia con un riconoscitore dei casi "facili", e questo riduce da poniamo 50.000 a 30.000 le righe.
    poi si esaminano i rimanenti casi.
    e si scrive un nuovo riconoscitore, che lo riduce poniamo da 30.000 a 20.000.
    poi si ripete per un numero tipicamente variabile tra 5 e 20, fino ad arrivare a uno "zoccolo duro" di una 50ina di righe scritte in modo pazzesco, magari con abbreviazioni (capita).
    Lì tipicamente si fa un file Excel e le si corregge una per una, più che altro perchè ci vuol meno tempo.

    3) quindi ribadisco che per TE sembrerà chissà cosa, per ME è banale.
    Così come per ME trapiantare un rene è impossibile, per un primario chirurgo magari è ordinaria amministrazione, banale.
    Se mi avessi mandato il file lo avresti già avuto convertito, a quest'ora.
    Ma tranquillo, mi sto rendendo conto che è un problema che è bene lasciarti affrontare come meglio credi.

    4) "banale" in informatica ha vari significati.
    - qualcosa di cui si sa già esistere una soluzione
    - qualcosa di cui si sa come scrivere la soluzione
    - qualcosa che non richiede tempi o risorse troppo grandi
    Il tuo problema è quindi ontologicamente banale.
  • Re: Numeri di telefono e fax, come riorganizzarli?

    +m2+ ha scritto:


    Mah... francamente mi pare che ti stai un pochino arrampicando sugli specchi.
    Se ti ho dato questa impressione mi dispiace, non era certo questa la mie intenzioni, ho solo voluto spiegarmi.

    +m2+ ha scritto:


    Se un numero di telefono è ucraino, non lo saprai tu, non lo saprò io, non lo saprà il computer.
    Anche qui ti sbagli, io so chi sono le persone, cosa fanno, dove vivono e so pure che quella "K." vuo dire che quello è il suo numero di Kiev, lo so io perchè quelle note le ho scritte io e quasi sempre so riconoscerne il significato, altri non saprebbero farlo, tantomeno il programmello

    +m2+ ha scritto:


    In estrema sintesi, te lo ribadisco.
    Un programmello può fare, in questo caso, tutto (e solo) quello che farebbe un "umano".
    Se il risultato è da arricchire, con informazioni che non ci sono, non lo potrà fare il programma, nè l'umano.
    Se le informazioni CI SONO, in altre tabelle ad esempio, ci si può lavorare.
    Anche questo non è vero!!!
    Questi dati li ho messi insieme in oltre 40 anni, le persone presenti in questo DB le conosco TUTTE, personalmente, se qualcosa mi sfugge mi basta un click per visualizzare molte altre informazioni e note che li riguardano.
    Quale programmello potrebbe attingere alla mia menoria? Nessuno!


    M2, sono sicuro che con il programmello si possano ottenere dei risultati, sono altrettanto sicuro che possa fare anche molti errori.

    Ora si tratta di capire:
    - quanto tempo e costi servono per realizzare il programmello;
    - quanti errori commetterà e quanto tempo servirà per correggere i suoi errori;
    - quanto tempo servirà per lavorare le stringhe che non è riuscito a trattare.

    Se vuoi puoi anche fornirmi indicazioni tramite MP.


    Ciao
    MTA


    P.S.: forse converrebbe realizzare prima un procedura/programma di manutenzione dei dati, per arrivare ad una normalizzazione degli stessi, soltanto dopo il programmello saprà trattare il 100% dei dati in modo appropriato.
  • Re: Numeri di telefono e fax, come riorganizzarli?

    ... mi ero preparato uno spiegone/rispostone, ma penso sia inutile e lo risparmio.
    se le note le ha scritte una sola persona, è ancora più facile, a meno che non ci siano note tipo "è il marito di polina" ( K più 380 più 12 cifre ? => ucraina)

    per quanto mi riguarda tempi stimabili: editato su richiesta

    concludo con un'osservazione: quando "passerai" una per una le 50.000 voci, pensi di non commettere errori?
    mi spiace darti questa delusione, ma anche se commettessi un errore ogni 1.000, diciamo anche solo di copia-incolla, ne totalizzerai 50 (realisticamente molti di più).

    come vedi non c'è "magia", o "bacchetta magica"... solo ... tecnologia.
  • Re: Numeri di telefono e fax, come riorganizzarli?

    Nell'arco di alcuni decenni le note nei campi tel/fax sono state scritte da più persone, cinque per l'esattezza, ma seguendo gli stessi criteri, per cui non c'è differenza fra le note scritte da una o dall'altra.

    Ovvio che anche manualmente si commettono errori, non so se di più o di meno rispetto ad un programmello.
    Ad ogni modo penso che la cosa più sensata da fare sia una normalizzazione preventiva dei dati, tramite un'apposita procedura e l'intervento manuale, soltanto dopo questa fase il programmello funzionerà alla perfezione.


    Posta pure il tuo spiegone/rispostone

    Ciao
  • Re: Numeri di telefono e fax, come riorganizzarli?

    OsvaldoLaviosa ha scritto:


    MTAccess ha scritto:


    1) in una situazione come quella sommariamente descritta, secondo voi esiste una qualche possibilità di normalizzazione automatica di questi dati o non esiste altra via se non la mantenzione manuale? Sto parlando di decine di migliaia di numeri.
    Io ci vedo solo la strada della "normalizzazione manuale". Si tratterebbe di andare avanti per piccoli passi, sfruttando filtri vari che accomunano i dati con trattino, dai dati col prefisso, dai dati con indicazione G. M. F. S....ecc...e correggere via via, caso per caso.
    Ciao Osvaldo, dopo diverse valutazioni e riflessioni credo che questo sia un passaggio obbligato, per poter poi processare automaticamente i dati con le migliori garanzie di ottenere risultati corretti.
  • Re: Numeri di telefono e fax, come riorganizzarli?

    Ciao Migliorabile,
    rileggendo i tuoi tre post di ieri mattina mi è sorto qualche dubbio, dovuto probabilmente alla mia scarsa competenza in materia, sarebbe utile un tuo chiarimento. Grazie

    migliorabile ha scritto:


    In questo senso una grossa mano la puo' dare le espressioni regolari, un linguaggio fatto apposta per cercare stringhe all'interno di un testo.

    Non ti serve NEMMENO lavorare sul database: esporti tutto su un file CSV e processi il file.
    Il risultato dovrebbe essere una tripla del tipo:
    <id utente>,<tipo telefono>,<numero telefono>
    Perchè suggerisci il ricorso alle "espressioni regolari", ritieni che gli strumenti disponibili in Access non siano sufficienti per ottenere un buon risultato?

    migliorabile ha scritto:


    cosi' puoi associare diverse tipologie di telefono ad ogni utente, ed il numero non e' prefissato a priori come nella descrizione della tabella precedente.
    Qualcosa mi sfugge... un numero non prefissato potrebbe essere inutilizzabile, basta pensare a quelli dei cellulari.
    Qualora sino già presenti i prefissi, sia internazionali sia locali, questi andrebbero scorporati e salvati negli appositi campi della tabella di destinazione, oltre che in una tabella di servizio dalla quale attingere in seguito.

    migliorabile ha scritto:


    Non servirebbe nemmeno la tabellina con le tipologie di telefoni: basterebbe un vettore di stringhe, tanto sono brevi e standardizzabili.
    Immagino tu ti stia riferendo soltanto al processo di conversione dei dati e non all'utilizzo quotidiano di Access. Giusto?

    migliorabile ha scritto:


    La tabella 3.2, la puoi semplificare:

    - ID non serve, la chiave e' <idcontatto,idtipo>
    Sei sicuro che la chiave <idcontatto,idtipo> possa sostituire adeguatamente l'ID del record? Ci potrebbero essere molti duplicati, come ad esempio lo stesso IDcontatto con più IDtipo identici perchè sono più numeri di cellulari.

    migliorabile ha scritto:


    Poiche' c'e' un timestamp, e' OVVIO che il timestamp piu'vecchio corrispondera' alla data di creazione. Inoltre si tiene traccia dell'intera storia delle modifiche e non solo dell'ultimo (vabbe, e' sempre colpa dell'ultimo )
    Non conosco questo campo/funzione, sai dirmi se è presente nella versione 2003 di Access?
    Come funziona, in che modo mantiene traccia di tutte le modifiche appostate al record?

    migliorabile ha scritto:


    Ho pensato anche a tecniche di Machine Leraning: il tuo e' un problema Semi Supervised, nel senso:
    - NON E' supervisionato, perche' non c'e' un dataset di numeri di telefono con l'indicazione precisa: questo e' buono, questo no
    - NON E' NON-supervisionato, perche' esistono delle regole ben definite (anche se incasinate) che identificano un numero di telefono

    quello che servirebbe e' una cosa del tipo:
    - ciapa qua', algoritmo, questi sono un insieme di possibili formati di numeri di telefono, tu, algoritmo-schiavetto, tira fuori tutti quegli che gli assomigliano
    - fatto questo, si analizza quello che resta e si aggiungono nuove regolette.
    Non ho competenze in merito, pertanto non mi è facile capire in che misura questo sistema potrebbe avere successo, posso però ricopiare di seguito il contenuto di qualche stringa attuale:

    021/7625846-856 27/11/8806975 AP 012-4255351 F. 12 247 56 91 78 340-5566771

    812 5539387 73512518769 ???. 3824571620 A 1/757/8271679-8516881

    migliorabile ha scritto:


    Se il sistema e' sufficientemente intelligente, e' in grado di trovare anche regole "simili" da solo.

    Ma alla fin fine, e' simile al processo iterativo descritto precedentemente.
    Se il sistema è in grado di eseguire prima una serie di "esercizi di apprendimento" in tutti i campi che saranno oggetto di trasformazione e su tutti i records, avrà imparato/memorizzato tutte le istruzioni che gli abbiamo fornito, allora penso che dopo questo training saprà risolvere correttamete oltre il 90% delle stringhe.
  • Re: Numeri di telefono e fax, come riorganizzarli?

    Proprio fuori strada.
    Non servono espressioni regolari, nè training.
    Va "trasfusa" l'intelligenza della persona (cioè il programmatore) in un banale riconoscitore.
    Il quale lavora su alcune funzioncelle di servizio
    - prendistringatesta
    - mangiastringatesta
    - iscellulare
    - isprefisso
    - isnumerofisso
    - isnumeroucraino
    - isdigit
    - isspazio
    - isseparatore
    ...
    L'elaborazione opera banalmente su ogni carattere della stringa, da sinistra verso destra
    812 5539387 73512518769 ???. 3824571620 A 1/757/8271679-8516881
    In questo caso si parte con prendistringatesta

    la quale è grosso modo fatta così (la scrivo senza provarla)
    
    function prendistringatesta(i_stringa:string;i_separatore:char=' '):string;
    var
     i:integer;
     s:string;
    
    begin
      result:='';
      if i_stringa='' then exit;
      if i_separatore='' then exit;
     i:=1;
     while (i<=length(i_stringa)) do
     begin
       if (i_stringa[i]<>i_separatore) then
          s:=s+i_stringa[i]
      else
       break;
       inc(i);
     end;
    
     result:=s;
    end;
    
    Quindi prendi la prima stringa fino al separatore (tipicamente spazio, ma in realtà puoi fare anche dei piccoli set, tipo /.-)
    a quel punto vedi quanto è lunga.
    E' lunga 3, ed è composta solo da interi? => è un prefisso (o il prefisso di un cellulare)
    Quindi la "mangi", e prendi la stringa seguente.
    Se esso è tutto interi, allora è un numero di telefono
    Di che tipo? Dipende da quanto è lungo, e dal prefisso iniziale => compila i dati

    Non è tutto interi? Dentro c'è una stringa (un gatto, nell'esempio).
    Decodifica e così via.

    man mano che decodifichi "mangia" (stringreplace con '')
    Trovi qualcosa fatto così?
    1/757/8271679-8516881
    Cioè isdigit(i_stringa[1]) and (isbarra(i_stringa[2]) and (isnumeri(i_stringa,3,3)) and isbarra(i_stringa,6) ?
    Allora è un "numerone" con tanto di vari prefissi.
    Se trovi uno o più meno dentro splitta i vari numeri, uscendo con
    1.757.8271679 e 1.757.8516881 o qualsiasi cosa si voglia.

    Ovviamente la questione può essere
    numeri/numeri/numeri-numeri-numeri-numeri-numeri e così via.
    In tal caso ci vorrà un banale riconoscitore che conta i numeri in testa, poi dopo la barra e così via.
    un "contanumeri(i_stringa;i_inizio;i_separatore):integer"
    In questo modo puoi gestire i numeri internazionali con l'indicazione del paese.
    Mettendoci magari anche una verifica per un eventuale "+"


    ... insomma... così.
    Avendo addirittura la persona (le persone) che hanno inserito i dati è ancora più banale, basta mandare una email con
    "cheminchiavuoldire 1/757/8271679-8516881" ?
    E ti risponderanno... blablabla
    Niente di che, ?????

    E' assai più divertente quando bisogna fare il reverse engineering di un centinaio di persone diverse che scrivono ognuno come zzzo gli pare.
    Come già accennato il mio top è stato "moglie di tizio"
  • Re: Numeri di telefono e fax, come riorganizzarli?

    M2, grazie del postone

    Considerata la tua esperienza in materia, secondo te quale percentuale di errori sfornerebbe il programmello?
  • Re: Numeri di telefono e fax, come riorganizzarli?

    MTAccess ha scritto:


    M2, grazie del postone

    Considerata la tua esperienza in materia, secondo te quale percentuale di errori sfornerebbe il programmello?
    CPD?
    Chi Può Dirlo?
    Dipende essenzialmente da come sono i dati da elaborare, secondo la famosa regola
    GIGO garbage in-garbage out
    Comunque in generale estremamente bassa, se si ha la facoltà di interrogare direttamente chi ha fatto il "macello".
    Perchè per quanta fantasia (malefica) abbia, difficilmente riesce a "partorire" più di una dozzina di regole.
    Il punto-chiave resta: operando per passi successivi, divide et impera si circoscrivono sempre più i casi non riconosciuti.
    Che, dopo essere stati studiati, divengono... riconoscibili.

    Come già scritto quello che NON puoi fare, in assenza di dati al contorno (prelevabili da altre tabelle, a cominciare dai dati anagrafici per determinare l'alfabeto e quindi suddividere almeno alla grossa tra cirillici-similcirillici, latini e resto del mondo) è distinguere i casi davvero indistinguibili.

    Ma in tale circostanza o l'umano si ricorda a memoria il numero di telefono della riga, oppure sbaglierebbe anch'esso.

    Rammento inoltre che è sempre possibile NON normalizzare i dati, cioè tenere sia la versione "vecchia" che "nuova". In tal modo, secondo necessità, si possono confrontare "de visu" per vagliare eventuali errori.
    Non su base totale (cioè tutto l'archivio), ma su base di necessità (cioè ogni volta che serve davvero).

    "Miracoli" non si possono fare: è tecnologia, non magia.
  • Re: Numeri di telefono e fax, come riorganizzarli?

    Tranquillo, i testi presenti in questi campi sono tutti in alfabeto latino, tranne poche rare eccezioni in cirillico.

    Scontato che una copia dei dati originali con relativo campo ID del contatto saranno conservati, per poter rimediare un futuro ad eventuali errori dei programmelli
Devi accedere o registrarti per scrivere nel forum
26 risposte