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:
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
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);