Quick jump:  What's new

 
Go to:
 
Weblog: alati weblog   
in Konverzija podataka
Jednostavna detekcija krivih podataka u poljima

Najprije treba napraviti dump svih podataka. Za to postoji skripta dump_libri.sh u kojoj su naredbe za dump podataka za svaku pojedinačnu knjižnicu, npr. za anglistiku:

dump_isisdb.pl /backup/isis_backup/A105-1/isisdata/latest/LIBRI/LIBRI > /data/isis_data/an/dump.fflibri

na taj smo dobili tekstualne datoteke koje možemo dalje procesirati.

Ovdje ćemo navesti linux shell komande uz pomoć kojih možemo dobiti upotrebljive i jednostavne ispise podataka:

Detekcija krivih datuma unosa

naredbom

grep ^994.*^c /data/isis_data/*/dump.fflibri | sed -e 's/.*^c\(.*\)/\1/g' | sort -nr | uniq -c

dobiva se popsi svih podataka u polju 994^c

Rezultat spremimo u datoteku, izbrišemo sve slučajeve koji su dobri, a ostavimo krive i snimimo to u tablicu krivi_datum_unosa.xls

U conf/mjesec.yml dodamo ove linije:

za tablicu s greskama:

  datumi:
    name: 'Nevaljali datumi'
    input:
      - name: tablica                                                                                                          
        type: excel
        path: '/data/isis_data/greske/datum_unosa.xls'
        encoding: 'windows-1250'
        normalize:
          - path: 'conf/normalize/common.pl'

i za svaku pojedinačnu bazu:

  ffiz:
    name: 'Informacijske znanosti, Filozofski fakultet u Zagrebu'
    input:
      - name: libri
        type: isis
        path: '/backup/isis_backup/A129-2/isisdata/latest/LIBRI/LIBRI'
        encoding: 'cp852'
        normalize:
          - path: 'conf/normalize/report-sorted-txt.pl'
    output:
      - module: 'Sorted'
        path: 'out/report/mfn/iz/'

u normalizacijskoj datoteci treba stajati ovaj kod:

my $datum =
        lookup(
                sub { 1 },
                'datumi','tablica',
                sub { rec('A') },
                sub { rec('994','c') } 
        );
    
if ( $datum ) {
        sorted('mfn s krivim datumom',
                join_with(' - ',
                        prefix('MFN ',
                                rec('000'),
                        ),
                        rec('994','c'),                                                                     
                )                                                                                                              
        );
}



Detekcija krivih godina

Naredbom:

grep ^210.*^d /data/isis_data/*/dump.fflibri | sed -e 's/.*^d\(.*\)/\1/g' | sort -nr | uniq -c

dobivamo popis svih podataka u polju 210^d

ostatak postupka isti je kao i za datume, s odgovarajućim konfiguracijskim parametrima

Detekcija krivih ISBN-ova

comment - permalink
Kombinacije i redosljed potpolja

Prije konverzije, važno je najprije se upoznati sa stanjem u originalnim zapisima. U ovom slučaju, zanima nas redoslijed korištenih potpolja u nekom polju, sa ili bez interponkcija.

To ćemo u webpacu2 učiniti ovako:

U `conf/hostname.yml' popisati baze iz kojih treba izvući izvještaj. Moguće je gledati u više baza odjednom.

  ffge:
    name: 'Germanistika, Filozofski fakultet u Zagrebu'
    input:
      - name: libri
        type: isis
        path: '/backup/isis_backup/novi-40166/isisdata/latest/LIBRI/LIBRI'
        encoding: 'cp852'

U istoj datoteci se definiraju i delimiteri za validaciju. Drugim riječima, tu možemo popisati interpunkcije korištene u zapisima.

  delimiters:
    - ' ; '
    - ' : '
    - ' / '
    - ' = '

Ako želimo dobiti samo popis potpolja, bez delimitera:

  delimiters:
    - ''

Nekad te interpunkcije treba pretvoriti u potpolja, nekad treba potpolja treba pretvoriti u interpunkcije.

Za dobivanje izvjestaja pokrećemo komandu:

./run.pl --validate-delimiters conf/validate/delimiters/baza.txt

comment - permalink
webpac2 i DBF konverzija

Iz programa SAND (za obradu časopisa) moguće je dobiti podatke u formatu DBF.

Primjer minimalne konfiguracije u conf/hostname.yml:

  sand:
    name: 'SAND'
    input:
      name: casopisi
      type: dbf
      path: 't/data/cas2000.dbf'
      normalize:
        path: 'conf/normalize/common.pl'
        mapping_path: 'conf/input/dbf/cas2000.yml'

conf/normalize/common.pl - pravila za konverziju u željeni izlazni format

conf/input/dbf/cas2000.yml - mapiranje polja iz DBF-a u MARC tagove

comment - permalink
podpolja i interpunkcije prema redosljedu korištenja

Zapravo nam nije dovoljno da pogledamo koja podpolja su korištena u bazi u kojem redoslijedu, već želimo vidjeti i interpunkcije:

grep ^200 dump.libri | sed -e 's/\(\^[a-z]\)[^\^:;/]*/ \1/g' -e 's/\([:;/]\)[^\^:;/]*/ \1/g' | sort | uniq -c | sort -nr

rezultat:

Frekv. polje redosljed pp
2305 200 ^a^f
1882 200 ^a^e^f
388 200 ^a^f^g
318 200 ^a^e^f^g
145 200 ^a^e
144 200 ^a^e : ^f
60 200 ^a
22 200 ^a^e : ^f^g
17 200 ^a^f^g ;
17 200 ^a^e^f^g ;
17 200 ^a^e^e^f
11 200 ^a^e :
10 200 ^a^g
10 200 ^a^e^g
9 200 ^a^e : : ^f
7 200 ^a^e^f ;
6 200 ^a^e^e
6 200 ^a^d^f
5 200 ^a : ^f
5 200 ^a^e / ^f
5 200 ^a^e : : : ^f
... ... ...
comment - permalink
shell komande i malo perla za zgodne statistike

Trebamo u podacima vidjeti koja se točno podpolja nalaze u pojedinim poljima. Podaci su text dump iz ISIS datoteke.

Za elegantno rješenje, ne moramo se maknuti iz Linux shell-a:

Dovoljna je ova naredba:

grep ^200 dump.libri | sed 's/\(\^[a-z]\)[^\^]*/\1/g' | sort | uniq -c | sort -rn

za sljedeći rezultat:

Frekv. polje redosljed pp
2319 200 ^a^f
2064 200 ^a^e^f
409 200 ^a^f^g
372 200 ^a^e^f^g
163 200 ^a^e
64 200 ^a
17 200 ^a^e^e^f
12 200 ^a^e^g
10 200 ^a^g
7 200 ^a^d^f
6 200 ^a^e^e
5 200 ^a^e^e^f^g
4 200 ^a^f^g^g
4 200 ^a^e^e^e^f
3 200 ^a^f^v
3 200 ^a^e^d^e^f
2 200 ^a^g^f
2 200 ^a^e^f^g^g
2 200 ^a^e^e^g
2 200 ^a^d^e^f
2 200 ^a^b^f
2 200 ^a^b
... ... ...

Za istu stvar moguće je iskoristiti i malo perla:

#!/usr/bin/perl
while(<>) {
chomp;
s/(\^[a-z])[^\^]*/$1/g;
print "$_\n";
}

onda to izgleda ovako:

grep ^200 dump.libri | ./filter.pl | sort | uniq -c | sort -rn

comment - permalink
Weblog Navigation
Loading...
Weblog Archives
  • Loading...