-
Notifications
You must be signed in to change notification settings - Fork 1
nitram2342/telefonbuch-parser
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
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);
About
Parser and repair script for dumps of the German phonebook 'Das Telefonbuch'.
Topics
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published