Numeri di telefono e fax, come riorganizzarli?

di il
26 risposte

Numeri di telefono e fax, come riorganizzarli?

Premetto che nei lontani anni '80 mi organizzai un DB composto da un'unica tabella nella quale riversai una serie di informazioni riguardanti i miei contatti.
Fra i vari campi di questa tabella, erano presenti anche questi quattro campi alfanumerici:
- Telefono casa,
- Telefono ufficio,
- Fax casa,
- Fax ufficio.

Successivamente, questo primo DB fu trasformato in un BD relazionale, ma i sopracitati campi rimasero invariati, accogliendo nel tempo anche n.ri di cellulari, vari segni di divisione fra prefissi e numeri, fra un numero e l'altro, tipo / - + ecc. oltre a qualche nota sintetica tipo: Genitori, Moglie, Marito, Figlio, Segretaria ecc. spesso queste note sono state abbrevviate in G. M. F. S. ecc. i prefissi internazionali poi aggiungono altra approssimazione perchè in alcuni casi sono indicati, mentre in altri no, perchè scontati essendo di uso frequente.
Insomma, in assenza di regole precise, dopo oltre 30 anni di inserimento dati, il contenuto di questi campi è divenuto un vero casino!

Siccome mi sto accingendo a rimetter mano a questo DB, vi chiedo tre cose:

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.

2) una volta normalizzati i dati, converrebbe far confluire tutto quanto in un'unica tabella o tabelle diverse?

3) quali i campi e quali caratteristiche dovrebbero avere?

Grazie a tutti coloro che sapranno essermi di aiuto.

26 Risposte

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

    1) è un problema comune, basta fare un programmello di "pulizia"
    2) normalmente per questi usi singola tabella
    3) dipende ovviamente da quali attributi/campi vuoi mantenere
  • Re: Numeri di telefono e fax, come riorganizzarli?

    Ciao m2, grazie della risposta.

    1) Se fossi sicuro che il programmello di pulizia funziona correttamente senza fare danni, me lo farei fare questa sera.

    2) Sulla singola tabella concordo, anche perchè basta un campo preposto nel quale specificare la tipologia di numero, fax, tel, mobile ecc.

    Il terzo punto te lo espongo più tardi

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

    La regola e':

    COPIA in un db di servizio dei dati
    COPIA DI SALVATAGGIO DEI DATI
    CONTROLLO CHE SIA SEMPRE POSSIBILE RITORNARE ALLA SITUAZIONE PRECEDENTE

    Implementazione programmello e test FINO A CHE FUNZIONA A DOVERE sulla copia di servizio

    COPIA DI EMERGENZA dei dati VERI
    APPLICAZIONE del programmello SUOI DATI VERI

    SE QUALCOSA NON FUNZIONA RIPRISTINO SITUAZIONE PRECEDENTE
  • Re: Numeri di telefono e fax, come riorganizzarli?

    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.

    MTAccess ha scritto:


    2) una volta normalizzati i dati, converrebbe far confluire tutto quanto in un'unica tabella o tabelle diverse?
    Considerata la vasta "modernità" di dati "contatti" esistente oggi (telefono, cellulare, e-mail, web e molto altro ancora...), rispetto a 30 anni fa (telefono casa e telefono ufficio...), torna utile prevedere una soluzione di Persone uno-a-molti Contatti.

    MTAccess ha scritto:


    3) quali i campi e quali caratteristiche dovrebbero avere?
    Tu hai parlato prima di dati "alfanumerici". È una terminologia che mi ricorda la vecchissima informatica. Io direi semplicemente tipo "testo breve" (per dirla alla Access).
  • Re: Numeri di telefono e fax, come riorganizzarli?

    MTAccess ha scritto:


    Ciao m2, grazie della risposta.

    1) Se fossi sicuro che il programmello di pulizia funziona correttamente , me lo farei fare questa sera.
    E perchè non dovrebbe?
    E' un lavoro banale.
  • Re: Numeri di telefono e fax, come riorganizzarli?

    Ciao Migliorabile, grazie dei suggerimenti.
    E' ovvio che prima di apportare modifiche verrà fatta una copia del DB e si lavorerà soltanto su quella, anche se ho già copie dei backup mensili oltre a quelle annuali che rinnovo da decenni.
  • Re: Numeri di telefono e fax, come riorganizzarli?

    Ciao OsvaldoLaviosa, leggo volentieri il tuo punto di vista, anche se...

    OsvaldoLaviosa ha scritto:


    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.
    Questa è proprio la risposta che temevo di più!
    Anche perchè, nonostante la mia superficiale competenza in materia, in passato ho già affrontato altrove, insieme ad esperti, il problema della manutenzione/normalizzazione di dati...
    Nati da archivi cartacei creati nell'arco di un secolo, informatizzati in modo approssimativo nei primi anni '80, poi, dopo oltre vent'anni, si valutò la possibilità di normalizzare quella parte dei dati "storica", dopo una serie di valutazioni e prove, anche gli esperti di Oracle arrivarono alla conclusione che la normalizzazione era da farsi manualmente.
    E' doveroso precisare che in quel caso la situazione era molto più complessa ma hanno in comune che erano dati scritti senza precise regole e in campi diversi, più o meno come si faceva sulla carta.

    OsvaldoLaviosa ha scritto:


    Considerata la vasta "modernità" di dati "contatti" esistente oggi (telefono, cellulare, e-mail, web e molto altro ancora...), rispetto a 30 anni fa (telefono casa e telefono ufficio...), torna utile prevedere una soluzione di Persone uno-a-molti Contatti.
    Premesso che per me "Contatti" sono le persone o aziende/organizzazioni, avevo pensato a due tabelle diverse, una con i numeri di tel. cell. fax. ed un'altra con gli indirizzi e-mail, in entrambe la presenza di un IDContatti proprio per il collegamento uno a molti.

    OsvaldoLaviosa ha scritto:


    Tu hai parlato prima di dati "alfanumerici". È una terminologia che mi ricorda la vecchissima informatica. Io direi semplicemente tipo "testo breve" (per dirla alla Access).
    Hai azzeccato!
    Qualche volta mi dimentico del tempo che passa, ma c'è sempre qualche giovane attento che me lo ricorda
    Non molto tempo fa parlando con alcuni collaboratori portai un esempio che riuguardava i comandi del DOS, uno dei presenti mi guardò divertito ed esordì ricordandomi che lui a quei tempi non era ancora nato
  • Re: Numeri di telefono e fax, come riorganizzarli?

    Dati alfanumerici è oggi fuorviante, ma per motivi diversi (codifica utf-8 o 16 di unicode).

    comunque detto questo, il "dramma" mi sembra modesto (anche perchè ho fatto lavori assai più complessi di questo, per milioni di indirizzi).

    se te la vedi "brutta" e i dati non sono particolarmente sensibili carica l'archivio da qualche parte, mandami il link in locale e vediamo se davvero è così difficile. domani pomeriggio dovrei essere ragionevolmente libero.

    PS l'idea di due tabelle è del tutto fuorviante, non ha il minimo senso suddividere email da "resto del mondo" vado a casa
  • Re: Numeri di telefono e fax, come riorganizzarli?

    +m2+ ha scritto:


    1) è un problema comune, basta fare un programmello di "pulizia"
    2) normalmente per questi usi singola tabella
    3) dipende ovviamente da quali attributi/campi vuoi mantenere

    MTAccess ha scritto:


    Ciao m2, grazie della risposta.

    1) Se fossi sicuro che il programmello di pulizia funziona correttamente senza fare danni, me lo farei fare questa sera.

    2) Sulla singola tabella concordo, anche perchè basta un campo preposto nel quale specificare la tipologia di numero, fax, tel, mobile ecc.

    Il terzo punto te lo espongo più tardi

    Ciao
    MTA
    Ho cominciato soltanto ieri sera a pensare concretamente come convertire tutti i numeri di telefono e fax, oggi a distanza di un giorno il punto 3) lo vedrei così:

    3.1) creazione di una nuova tabella "TelefoniFax" contenente i seguenti campi e relativi dati:
    - gli ID della tabella "Contatti
    - Telefono cellulare,
    - Telefono casa,
    - Telefono ufficio,
    - Fax casa,
    - Fax ufficio.

    3.2) creazione di una nuova tabella "Numeri" con i seguenti campi:
    - ID,
    - IDContatti,
    - IDTipo (conterrà l'ID corrispondente al tipo: Telefono casa, Telefono ufficio, Cellulare ecc.)
    - IDPrefisso (conterrà l'ID del Prefisso internazionale e nazionale)
    - Numero,
    - Note,
    - NomeUtenteCreazione,
    - DataCreazioneRecord,
    - OraCreazioneRecord;
    - NomeUtenteModifica
    - DataModificaRecord,
    - OraModificaRecord;
    Gli ultimi sei campi saranno oggetto di complilazione automatica da parte del sistema.

    L'inserimento dei dati in questa tabella dovrebbe avvenire da parte del "Programmello" attingendo dalla tabella "TelefoniFax", facendo prima puliza di tutte le impurità, poi suddividendoli uno dall'altro, poi separando ogni numero dal proprio prefisso, quando presenti, ed infine attribuendogli il tipo di numero corretto.

    Io vorrei tanto che tu avessi la soluzione, ma quando in un campo il programmello troverà stringhe del tipo:
    - 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.

    Se ci riuscirà, alla fine basterà un collegamento uno a molti per poter visualizzare nella maschera dei "Contatti" i relativi numeri del singolo contatto, con visualizzata la tipologia, le note e tutti belli ordinati.
  • Re: Numeri di telefono e fax, come riorganizzarli?

    +m2+ ha scritto:


    Dati alfanumerici è oggi fuorviante, ma per motivi diversi (codifica utf-8 o 16 di unicode).

    comunque detto questo, il "dramma" mi sembra modesto (anche perchè ho fatto lavori assai più complessi di questo, per milioni di indirizzi).

    se te la vedi "brutta" e i dati non sono particolarmente sensibili carica l'archivio da qualche parte, mandami il link in locale e vediamo se davvero è così difficile. domani pomeriggio dovrei essere ragionevolmente libero.

    PS l'idea di due tabelle è del tutto fuorviante, non ha il minimo senso suddividere email da "resto del mondo" vado a casa
    M2, non si tratta di un "dramma" ma più semplicemente di tempi e costi.
    Ora supponiamo che in totale ci siano "soltanto" 50.000 numeri di telefono da ordinare a manina. Sai cosa vuol dire? Che probabilmente rimarranno come sono, perchè hanno assolto al loro compito fino ad oggi e continueranno a farlo.

    Non è mia intenzione farti perdere tempo inutilmente.
    Al massimo potrei estrarti una tabella con alcune decine di records tanto per farti fare qualche prova, ma secondo me bastano le due stringhe che ti ho scritto nel precedente post per mandare un confusione il "Programmello".
    Basta pensare come farà a distinguere quali sono i numeri fissi dai numeri di cellulare, se i "Contatti" presenti risiedono in un centinaio di paesi diversi. Procedi paese per paese con l'elenco dei prefissi dei cellulari?
    Poi lo stesso "Contatto" potrebbe avere numeri fissi e mobile di più paesi, ad esempio Italia, Regno Unito e Russia, una volta c'è scritto RU. una volta R. un'altra volta +7 e un'altra volta M. con solo il prefisso di Mosca preceduto dallo 0, cosa capirà se nel campo "Città" c'è scritto Londra?

    Io purtroppo non vedo una soluzione automatizzata per tutto il DB, nella migliore delle ipotesi solo diverse soluzioni parziali in grado di risolvere solo una parte delle esigenze, ad esempio una stringa semplice come potrebbe essere 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?

    Non ho compreso la tua considerazione sugli indirizzi e-mail, perchè inserirle nella stessa tabella dei numeri di tel.?

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

    Be', non e' impossibile: incasinato certamente.

    Di sicuro devi fare l'operazione per correzioni successive, come ti e' gia' stato detto:
    inizi dai casi semplici e ben identificabili, li rimuovi dalla stringa incasinata, e poi a mano a mano affronti i piu' complessi.

    1) il pasticcio e' stato fatto e non e' che miracolosamente lo si puo' risolvere
    2) l'idea non e' fare tutto in automatico, in un'unica passata, ma fare in manuale solo la parte definitivamente piu' rognosa

    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>

    cosi' puoi associare diverse tipologie di telefono ad ogni utente, ed il numero non e' prefissato a priori come nella descrizione della tabella precedente.

    Non servirebbe nemmeno la tabellina con le tipologie di telefoni: basterebbe un vettore di stringhe, tanto sono brevi e standardizzabili.

    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
  • Re: Numeri di telefono e fax, come riorganizzarli?

    La tabella 3.2, la puoi semplificare:

    - ID non serve, la chiave e' <idcontatto,idtipo>
    - IDprefisso fallo confluire direttamente in numero: piu' semplice da gestire
    - non ha senso avere DUE colonne per un TIMESTAMP: un timestamp e' un istante predefinito nel tempo ed e' composto ovviamente, da data ed ora. A meno che uno non voglia cercare i numeri che sono stati creati tra le 3 e le 4 di pomeriggio . (e comunque si puo' fare lo stesso )

    Le info su cui ha fatto le modiche su un certo record le manterrei in una tabella separata (in questo caso l'ID e' utile) del tipo:
    <id record>,<nome tabella>,<id utente>,<timestamp>[,<note>]

    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 )

    Nota: se vedi il numero di telefono SEMPLICEMENTE come una sequenza di caratteri, e NON come un numero vero e proprio, effettivamente l'idea di far confluire in una tabella TUTTO (numero di telefono, cellulare, fax, email, whatsapp, twitter, faccialibro, linkedin, ....) non e' totalmente da scartare.

    Tanto, il numero di telefono non lo cerchi per RANGE, quindi il valore NUMERICO non e' significativo.
    Vedasi il fatto che nelle pubblicita' americane, alcune cifre dei numeri di telefono sono sostituite con lettere dell'alfabeto, in modo da creare delle semplici parole.
    Quindi, alla fin fine, il numero di telefono e' semplicemente uan stringa!
  • Re: Numeri di telefono e fax, come riorganizzarli?

    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.

    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.

    Ma siamo nel campo delle ipotesi: bisognerebbe vedere come e' fatto l'elenco dei numeri, e studiare come affrontare un problema del genere!!!
    Pero' e' interessante!
  • Re: Numeri di telefono e fax, come riorganizzarli?

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

    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.

    Comunque tranquillo, si vede che i "magici consulenti Oracle" avevano ragione, non si può fare

    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"

    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.

    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.
Devi accedere o registrarti per scrivere nel forum
26 risposte