https://github.com/nitram2342/telefonbuch-parser
Parser and repair script for dumps of the German phonebook 'Das Telefonbuch'.
https://github.com/nitram2342/telefonbuch-parser
database phonebooks
Last synced: over 1 year ago
JSON representation
Parser and repair script for dumps of the German phonebook 'Das Telefonbuch'.
- Host: GitHub
- URL: https://github.com/nitram2342/telefonbuch-parser
- Owner: nitram2342
- Created: 2011-05-25T23:40:57.000Z (about 15 years ago)
- Default Branch: master
- Last Pushed: 2011-05-26T07:37:28.000Z (about 15 years ago)
- Last Synced: 2025-01-08T15:27:29.385Z (over 1 year ago)
- Topics: database, phonebooks
- Homepage:
- Size: 146 KB
- Stars: 4
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README
Awesome Lists containing this project
README
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);