Home > telefonbuch-parser

telefonbuch-parser

Telefonbuch-parser is a project mainly written in ..., it's free.

Parser and repair script for dumps of the German phonebook 'Das Telefonbuch'.

Der hier vorhandene Satz Skripte parsed die exportierten Telefonbuchdatenbanken von 'Das Telefonbuch' und importiert die Daten in eine Postgresql-DB. Dabei werden zahlreiche Probleme automatisiert gefixt.

Siehe auch:

  • Erdgeist: "Reverse-Engineering für Ortsfremde", Datenschleuder 77, http://ds.ccc.de/pdfs/ds077.pdf
  • https://erdgeist.org/cvsweb/Telefonbuch/#dirlist

Wie man eine Telefonbuchdatenbank aufbaut

Hinweis: Eine Zeile im Telefonbuch wird meist als 'Zeile' oder 'line' bezeichnet. Eine Continuation ist ein Satz von Zeilen, die irgendwie semantisch zu einem Telefonbucheintrag dazugehoeren. Die Continuations werden in der DB abgebildet.

  • Datenbank vorbereiten

  • createdb phonebook createuser pbookuser

    psql phonebook

    ... und dann die folgenden Zeilen SQL-Code pasten

    -- -- Tabellenlayout fuer die gemergten Eintraege

    drop table tb_eintrag; create table tb_eintrag ( id serial not null, -- ID des Eintrags

      cont_id integer,   -- ID der Continuation
      cont_pos smallint, -- Position innerhalb der Continuation
    
      -- bit 0 - contains URL
      -- bit 1 - unused
      -- bit 2 - Darf Inverse gesucht werden
      -- bit 3 - Juristische Person
    
      inverse_allowed boolean,
      is_corporation boolean,
    
          nachname varchar,
          vorname varchar,
          namenszusatz varchar,
      detail varchar,
    
          strasse varchar,
          hausnummer varchar,
      adresszusatz varchar,
    
          plz char(5),
          ort varchar,
      ortszusatz varchar,
    
      lvw char(2),
          vorwahl varchar,
          rufnummer varchar,
    
      is_phone bool,     -- zwei Flags, um Fax=Fon abbilden zu koennen
      is_fax bool,
    
      email varchar,
      webadresse varchar,
    
          version bigint

    );

    -- Wesentliche Indizes fuer den Aufbau

    create unique index idx_tb_eintrag_id on tb_eintrag(id); create index idx_tb_eintrag_cont_id on tb_eintrag(cont_id); create index idx_tb_eintrag_completenumber on tb_eintrag(lvw, vorwahl, rufnummer);

    -- Sequence fuer die Continuations drop sequence seq_cont_id; create sequence seq_cont_id start with 1;

  • Telefonbuchdaten parsen

  • Zum Parsen, Reparieren, Importieren, Mergen der Telefonbuchdaten gibt es das Skript tb_parser.pl . Der letzte Parameter gibt den Modus an.

    sh process_all_pbooks.sh fixmelater sh process_all_pbooks.sh repair sh process_all_pbooks.sh import

    Der Modus fixmelater laesst zunaechst das Programm laufen. Anhand der Programmausgaben kann man abschaetzen, welche Probleme automatisiert fixbar waeren, wenn man entsprechend den Code anpasst. Der Modus 'repair' fragt den Benutzer nach der Eingabe eines manuellen Fixes. Dieser wird in einer lokalen Datei gespeichert und steht fuer spaetere Durchlaeufe zur Verfuegung. Bis inkl. Fruehjahr 2007 sind Patchsets vorhanden. Die kann ich aus naeheliegenden Gruenden natuerlich nicht oeffentlich machen.

    Anzahl der Fixes/Ignores pro Telefonbuch:

    243 .1998_Herbst.patch 13 .1999_Fruehjahr.patch 108 .1999_Herbst.patch 193 .2000_Fruehjahr.patch 163 .2000_Herbst.patch 208 .2001_Fruehjahr.patch 303 .2001_Herbst.patch 132 .2002_Fruehjahr.patch 86 .2002_Herbst.patch 90 .2003_Fruehjahr.patch 71 .2003_Herbst.patch 137 .2004_Fruehjahr.patch 145 .2004_Herbst.patch 145 .2005_Fruehjahr.patch 40 .2005_Herbst.patch 232 .2006_Fruehjahr.patch 359 .2006_Herbst.patch 783 .2007_Fruehjahr.patch

    Beispiele fuer Patch-Eintraege:

    13111046;action=ignore;test=cleanup_number

    Bedeutet, dass in Zeile 13111046 der Code fuer die Rufnummernbereinigung scheitert, und das Tool beim naechsten Run die Zeile in Bezug auf den Rufnummern-Check ignorieren soll.

    30831702;action=fixlater;test=cleanup_number

    Testfall schlug fehl. Das soll bei einem spaeteren Lauf repariert werden.

    14803957;action=replace;test=check_number;rufnummer=568XXXXX

    In der Zeile muss eine Rufnummer ersetzt werden (hier anonymisiert).

  • Volltextindex erzeugen (fuer Arme-Leute-Datenbanken)

  • for i in nachname vorname strasse ort ortszusatz namenszusatz adresszusatz detail; do time perl fti_dbi.pl --db phonebook --table tb_eintrag --columns $i; done

  • Die restlichen Indizes Anlegen

  • psql phonebook

    create index idx_tb_eintrag_plz on tb_eintrag(plz); create index idx_tb_eintrag_prefix on tb_eintrag(vorwahl);

    create index idx_tb_eintrag_nummer on tb_eintrag(rufnummer);

Previous:instant-eol