/[webpac-proto]/isis2stream.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /isis2stream.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by dpavlin, Sun Jun 16 14:37:43 2002 UTC revision 1.8 by dpavlin, Sun Jun 16 19:39:42 2002 UTC
# Line 3  Line 3 
3  use strict;  use strict;
4  use OpenIsis;  use OpenIsis;
5  use Getopt::Std;  use Getopt::Std;
6  #use Data::Dumper;  use Data::Dumper;
7  require "common.pl";  use common;
   
 my $install_dir="/local/index";  
 my $mpsindex="/local/mps-5.3/bin/mpsindex -l 9 -b";  
 my $isis_data="/var/autofs/misc/isis_data/";  
 #my $isis_data="/mnt/20020606/Isis/Data/";      # doma  
8    
9  my %opts;  my %opts;
10    
11  getopt('dD', \%opts);  getopt('dm', \%opts);
12    
13  die "usage: $0 -d [database_dir] " if (! $opts{d});  die "usage: $0 -d [database_dir] -m [database1,database2] " if (! %opts);
14    
15  my $db_dir = $opts{d};  my $db_dir = $opts{d};
16    
17  mkdir "$install_dir/$db_dir" if (!-e "$install_dir/$db_dir");  mkdir "$common::install_dir/$db_dir" if (!-e "$common::install_dir/$db_dir");
18  mkdir "$install_dir/$db_dir/data" if (!-e "$install_dir/$db_dir/data");  mkdir "$common::install_dir/$db_dir/data" if (!-e "$common::install_dir/$db_dir/data");
19    
20  my $dir="$install_dir/$db_dir/data";  my $dir="$common::install_dir/$db_dir/data";
21    
22    
23  open(S,"> $dir/stream") || die "can't open output $dir/stram: $!";  open(S,"> $dir/stream") || die "can't open output $dir/stream: $!";
24  open(R,"> $dir/bib") || die "can't open output $dir/bib: $!";  open(R,"> $dir/bib") || die "can't open output $dir/bib: $!";
25  open(MPS,"| $mpsindex -d $install_dir/$db_dir -autokey") || die "can't start MPS indexer $mpsindex: $!";  open(MPS,"| $common::mpsindex -d $common::install_dir/$db_dir -autokey") || die "can't start MPS indexer $common::mpsindex: $!";
26  #open(MPS,"> /tmp/mpsindex") || die "mps: $!";  #open(MPS,"> /tmp/mpsindex") || die "mps: $!";
27    
28  my $s="V 5 3  print S $common::mps_header;
29  L hr-HR  print MPS $common::mps_header;
30  F 700+ 1 Autor  
31  F 200+ 2 Naslov  #--------------------------------------------------------------------
32  F 210 3 Izdavanje  # init array in_mps_header for config checks later
 F 225 4 Nakladnika cjelina  
 F 300+ 5 Napomene  
 F 330 6 Sadraj  
 F 464 7 Analitiki radovi  
 F 610 8 Kljune rijei  
 F 675 9 UDK  
 F 686 10 CC  
 F 990 11 Signatura  
 F 991 12 Inventarni broj  
 F 10 13 ISBN  
 ";  
33    
34  print S $s;  my %in_mps_header;
35  print MPS $s;  foreach (split(/\n/,$common::mps_header)) {
36            if (/^F /) {
37                    my (undef,$isis,$mps,undef) = split(/ /,$_,4);
38                    $in_mps_header{$mps}=$isis;
39            }
40    }
41    require "./search/config.pm";
42    
43    #--------------------------------------------------------------------
44  #  #
45  # expand(nr,"space separated string");  # expand(nr,"space separated string");
46  #  #
47    
48  sub expand {  sub expand {
49          my $nr = shift @_;          my $nr = shift @_;
50            die "$nr is not in mps_header" if (!$in_mps_header{$nr});
51          my $out = "";          my $out = "";
52          while (my $fld = c_852_iso(shift @_)) {          while (my $fld = c_852_iso(shift @_)) {
53                  my @words=split(/\s+/,$fld);                  my @words=split(/\s+/,$fld);
# Line 72  sub expand { Line 64  sub expand {
64    
65  #--------------------------------------------------------------------  #--------------------------------------------------------------------
66    
 ################### ERASE###############3  
   
 # expand sub-fileds from ISIS field  
 # (^a.....^b....)  
 my %data;       # FIX  
 sub ex_sf {  
         %data = ();  
         my $in = $_[0];  
         if (my $tmp = $in) {  
 #               $tmp =~ tr/џ/ƾ/; # ISIS -> iso-8859-2  
                 $tmp =~ tr//ܫꔼȺ̪㍐슂ٝ/;  
                 if ($in =~ m/^\^/) {  
                         my @sub = split(/\^/,$in);  
                         foreach my $fld (@sub) {  
                                 $data{$1} = $2 if ($fld =~ m/^(\w+)(.+)$/)  
                         }  
                 } else {  
                         $data{all} = $in."<-- iz polja bez podpolja";  
                 }  
         }  
 }  
   
 # dump all sub-fields  
 sub all_sf {  
         my $nr = shift @_;  
         my $out="";  
         foreach my $k (sort keys %data) {  
                 $out.=expand($nr,$data{$k});  
         }  
         return $out;  
 }  
   
 sub all_sf_r {  
         my $nr = shift @_;  
         my $out="";  
         foreach my $k (sort {$b cmp $a} keys %data) {  
                 $out.=expand($nr,$data{$k});  
         }  
         return $out;  
 }  
   
 sub all_sf2bib {  
         my $nr = shift @_;  
         my $max_in_line=shift @_ || 0;  
         my $sep = shift @_ || ' ';  
         my $out;  
         my $i=0;  
         my $bib = "";  
         foreach my $k (sort keys %data) {  
                 if ($out) {  
                         $out.= $sep.$data{$k};  
                 } else {  
                         $out = $data{$k};  
                 }  
                 $i++;  
                 if ($i == $max_in_line) {  
                         $bib .= $nr." ".$out."\n" if ($out);  
                         $i=0;  
                         $out="";  
                 }  
         }  
         $bib .= $nr." ".$out."\n" if ($out);  
         return $bib;  
 }  
   
 sub all_sf2bib_r {  
         my $nr = shift @_;  
         my $max_in_line=shift @_ || 0;  
         my $sep = shift @_ || ' ';  
         my $out;  
         my $i=0;  
         my $bib = "";  
         foreach my $k (sort {$b cmp $a} keys %data) {  
                 if ($out) {  
                         $out.= $sep.$data{$k};  
                 } else {  
                         $out = $data{$k};  
                 }  
                 $i++;  
                 if ($i == $max_in_line) {  
                         $bib .= $nr." ".$out."\n" if ($out);  
                         $i=0;  
                         $out="";  
                 }  
         }  
         $bib .= $nr." ".$out."\n" if ($out);  
         return $bib;  
 }  
   
 #--------------------------------------------------------------------  
   
67  sub c_852_iso {  sub c_852_iso {
68          my $tmp = $_[0];          my $tmp = $_[0];
69          $tmp =~ tr//ܫꔼȺ̪㍐슂ٝ/ if ($tmp);          $tmp =~ tr//ܫꔼȺ̪㍐슂ٝ/ if ($tmp);
# Line 179  sub c_852_czs { Line 80  sub c_852_czs {
80    
81  #--------------------------------------------------------------------  #--------------------------------------------------------------------
82    
83  # $mps .= sf_to_mps($subfiled_hash,"subfields",mps_id);  # $mps .= sf_to_mps("subfields",$subfiled_hash)
84  #  #
85  # subfields options:  # subfields options:
86  #       * - all (no sort)  #       * - all (no sort)
# Line 210  sub subfields_str_2_arr { Line 111  sub subfields_str_2_arr {
111    
112  sub sf_to_mps {  sub sf_to_mps {
113          my ($sf_hash,$subfields,$mps_id) = @_;          my ($sf_hash,$subfields,$mps_id) = @_;
114            die "$mps_id is not in mps_header" if (!$in_mps_header{$mps_id});
115          my $out="";          my $out="";
116          my @sf_arr = subfields_str_2_arr($subfields,$sf_hash);          my @sf_arr = subfields_str_2_arr($subfields,$sf_hash);
117    
# Line 229  sub isis_to_mps { Line 131  sub isis_to_mps {
131          my $mps_id = shift @_ || die;          my $mps_id = shift @_ || die;
132          my $subfields = shift @_;          my $subfields = shift @_;
133    
134            die "$mps_id is not in mps_header" if (!$in_mps_header{$mps_id});
135    
136          my $i=0;          my $i=0;
137          my $out = "";          my $out = "";
138    
# Line 272  sub isis_to_bib { Line 176  sub isis_to_bib {
176          my $group_sort = shift @_ || '';          my $group_sort = shift @_ || '';
177          my $sep = shift @_ || ' ';          my $sep = shift @_ || ' ';
178    
179            my $fld = $bib_id; $fld =~ s/^%//;
180            die "$fld is not in FieldNames" if (!$default::FieldNames{$fld});
181    
182          my $i=0;          my $i=0;
183    
184          my $bib="";          my $bib="";
# Line 329  sub isis_to_bib { Line 236  sub isis_to_bib {
236  sub isis_sf {  sub isis_sf {
237          my $row = shift @_;          my $row = shift @_;
238          my $isis_id = shift @_;          my $isis_id = shift @_;
239          my $subfield = shift @_ || 'a';          my $subfield = shift @_;
240          my $prefix = shift @_ || '';          my $prefix = shift @_ || '';
241          my $postfix = shift @_ || '';          my $postfix = shift @_ || '';
242    
# Line 337  sub isis_sf { Line 244  sub isis_sf {
244    
245          if ($row->{$isis_id}->[0]) {          if ($row->{$isis_id}->[0]) {
246                  my $sf = OpenIsis::subfields($row->{$isis_id}->[0]);                  my $sf = OpenIsis::subfields($row->{$isis_id}->[0]);
247                  if (length($subfield) == 1) {                  if (! defined $subfield || length($subfield) == 0) {
248                            # subfield list undef, empty or no defined subfields for this record
249                            return $prefix . $row->{$isis_id}->[0] . $postfix;
250                    } elsif (length($subfield) == 1) {
251                          if ($sf->{$subfield}) {                          if ($sf->{$subfield}) {
252                                  return $prefix . $sf->{$subfield} . $postfix;                                  return $prefix . $sf->{$subfield} . $postfix;
253                          } else {                          } else {
# Line 361  sub isis_sf { Line 271  sub isis_sf {
271  }  }
272    
273  #--------------------------------------------------------------------  #--------------------------------------------------------------------
 #--------------------------------------------------------------------  
   
274    
275  my $last_tell=0;  my $last_tell=0;
276    
277  my $db = OpenIsis::open( "$isis_data/$db_dir/LIBRI/LIBRI" );  my @isis_dirs = ( '.' );        # use dirname as database name
278    
279  my $max_rowid = OpenIsis::maxRowid( $db );  if ($opts{m}) {
280            @isis_dirs = split(/,/,$opts{m});
281    }
282    
283  my $last_pcnt = 0;  my @isis_dbs;
284    
285  for (my $row_id = 1; $row_id <= $max_rowid; $row_id++ ) {  foreach (@isis_dirs) {
286            if (-e "$common::isis_data/$db_dir/$_/LIBRI") {
287                    push @isis_dbs,"$common::isis_data/$db_dir/$_/LIBRI/LIBRI";
288            }
289            if (-e "$common::isis_data/$db_dir/$_/PERI") {
290                    push @isis_dbs,"$common::isis_data/$db_dir/$_/PERI/PERI";
291            }
292    }
293    
294    foreach my $isis_db (@isis_dbs) {
295    
296      print MPS "M reading ISIS from '$isis_db'...\n";
297    
298      my $db = OpenIsis::open( "$isis_db" );
299    
300      my $max_rowid = OpenIsis::maxRowid( $db );
301    
302      my $last_pcnt = 0;
303    
304      for (my $row_id = 1; $row_id <= $max_rowid; $row_id++ ) {
305          my $row = OpenIsis::read( $db, $row_id );          my $row = OpenIsis::read( $db, $row_id );
306          if (my $tmp = $row->{'200'}->[0]) {          if (my $tmp = $row->{'200'}->[0]) {
307    
308                  my $bib = "%MFN $row->{mfn}\n";                  my $bib = "%MFN $row->{mfn}\n";
309                  my $mps;                  my $mps = "W $row->{mfn} 14\n";
310    
311                  my $pcnt = int($row->{mfn} * 100 / $max_rowid);                  my $pcnt = int($row->{mfn} * 100 / $max_rowid);
312                  if ($pcnt != $last_pcnt) {                  if ($pcnt != $last_pcnt) {
# Line 402  for (my $row_id = 1; $row_id <= $max_row Line 331  for (my $row_id = 1; $row_id <= $max_row
331                  $mps .= isis_to_mps($row,'711',1);                  $mps .= isis_to_mps($row,'711',1);
332                  $mps .= isis_to_mps($row,'503',1);                  $mps .= isis_to_mps($row,'503',1);
333                  $mps .= isis_to_mps($row,'702',1);                  $mps .= isis_to_mps($row,'702',1);
334                    $mps .= isis_to_mps($row,'200',1,"fg");
335    
336                  $bib .= isis_to_bib($row,'205','%205');                  $bib .= isis_to_bib($row,'205','%205');
337    
# Line 417  for (my $row_id = 1; $row_id <= $max_row Line 347  for (my $row_id = 1; $row_id <= $max_row
347                  $book .= ". ".$sf->{c} if ($sf->{c});                  $book .= ". ".$sf->{c} if ($sf->{c});
348                  $book .= " / ".$sf->{x} if ($sf->{x});                  $book .= " / ".$sf->{x} if ($sf->{x});
349                  $book .= " ; ".$sf->{y} if ($sf->{y});                  $book .= " ; ".$sf->{y} if ($sf->{y});
350                  $bib .= "%200 $book\n" if ($book);                  $bib .= "%200+ $book\n" if ($book);
351    
352                  $mps .= isis_to_mps($row,'200',2,"akcde");                  $mps .= isis_to_mps($row,'200',2,"akcde");
353                  $mps .= isis_to_mps($row,'532',2);                  $mps .= isis_to_mps($row,'532',2);
354                  $mps .= isis_to_mps($row,'424',2);                  $mps .= isis_to_mps($row,'424',2);
355    
356                    $mps .= isis_to_mps($row,'230',2,"ae");
357                    $mps .= isis_to_mps($row,'231',2,"ae");
358                    $mps .= isis_to_mps($row,'232',2,"ae");
359                    $mps .= isis_to_mps($row,'233',2,"ae");
360    
361    
362                    my $tmp;
363                    $tmp =  isis_sf($row,'230','v').
364                            isis_sf($row,'230','a',' : ').
365                            isis_sf($row,'250',undef,'. - ').
366                            isis_sf($row,'260',undef,'. - ').
367                            isis_sf($row,'290',undef,'<br>ISBN ');
368                    $bib .= "%sv $tmp\n" if ($tmp);
369            
370                    $tmp =  isis_sf($row,'231','v','<br>').
371                            isis_sf($row,'231','a',' : ').
372                            isis_sf($row,'251',undef,'. - ').
373                            isis_sf($row,'261',undef,'. - ').
374                            isis_sf($row,'291',undef,'<br>ISBN ');
375                    $bib .= "%sv $tmp\n" if ($tmp);
376                    
377                    $tmp =  isis_sf($row,'232','v','<br>').
378                            isis_sf($row,'232','a',' : ').
379                            isis_sf($row,'252',undef,'. - ').
380                            isis_sf($row,'262',undef,'. - ').
381                            isis_sf($row,'292',undef,'<br>ISBN ');
382                    $bib .= "%sv $tmp\n" if ($tmp);
383    
384                    $tmp =  isis_sf($row,'233','v','<br>').
385                            isis_sf($row,'233','a',' : ').
386                            isis_sf($row,'253',undef,'. - ').
387                            isis_sf($row,'263',undef,'. - ').
388                            isis_sf($row,'293',undef,'<br>ISBN ');
389    
390                    $mps .= isis_to_mps($row,'270',2);
391                    $mps .= isis_to_mps($row,'271',2);
392                    $mps .= isis_to_mps($row,'272',2);
393                    $mps .= isis_to_mps($row,'273',2);
394    
395                  $headline .= isis_sf($row,'700','b'," ");                  $headline .= isis_sf($row,'700','b'," ");
396                  $headline .= isis_sf($row,'700','a'," ");                  $headline .= isis_sf($row,'700','a'," ");
397    
398                  # izdavac                  # izdavac
399                  $mps .= isis_to_mps($row,'210',3);                  $mps .= isis_to_mps($row,'210',3);
400                    $mps .= isis_to_mps($row,'250',3);
401                    $mps .= isis_to_mps($row,'251',3);
402                    $mps .= isis_to_mps($row,'252',3);
403                    $mps .= isis_to_mps($row,'253',3);
404  #               if (my $sf = OpenIsis::subfields($row->{'210'}->[0])) {  #               if (my $sf = OpenIsis::subfields($row->{'210'}->[0])) {
405  #                       my $tmp;  #                       my $tmp;
406  #                       $tmp .= $sf->{a} if ($sf->{a});  #                       $tmp .= $sf->{a} if ($sf->{a});
# Line 435  for (my $row_id = 1; $row_id <= $max_row Line 408  for (my $row_id = 1; $row_id <= $max_row
408  #                       $tmp .= ", ".$sf->{d} if ($sf->{d});  #                       $tmp .= ", ".$sf->{d} if ($sf->{d});
409  #                       $bib .= "%210 $tmp\n" if ($tmp);  #                       $bib .= "%210 $tmp\n" if ($tmp);
410  #               }  #               }
411                  $bib .= "%210 ".isis_sf($row,'210','acd', '','', ('',' : ',', ') )."\n";                  $bib .= "%210+ ".isis_sf($row,'210','acd', '','', ('',' : ',', ') )."\n";
412    
413                  if (my $year = isis_sf($row,'210','d')) {                  if (my $year = isis_sf($row,'210','d')) {
414                          $year =~ s/^\s*cop\.*\s*//i;                          $year =~ s/^\s*cop\.*\s*//i;
# Line 444  for (my $row_id = 1; $row_id <= $max_row Line 417  for (my $row_id = 1; $row_id <= $max_row
417                          $headline .= " ($year)";                          $headline .= " ($year)";
418                  }                  }
419    
420                  $bib .= isis_to_bib($row,'215','%215', '*', undef, undef, ', ');                  $mps .= isis_to_mps($row,'215',15);
421                    $mps .= isis_to_mps($row,'260',15);
422                    $mps .= isis_to_mps($row,'261',15);
423                    $mps .= isis_to_mps($row,'262',15);
424                    $mps .= isis_to_mps($row,'263',15);
425                    $bib .= isis_to_bib($row,'215','%215+', '*', undef, undef, ', ');
426    
427  #               $bib .= isis_to_bib($row,'225','%225', 'aehivw');  #               $bib .= isis_to_bib($row,'225','%225', 'aehivw');
428                  $bib .= "%225 ".isis_sf($row,'225','aevhiw', '(',')', ('',' : ',' ; ','. ',', ',' ; '))."\n";                  $bib .= "%225 ".isis_sf($row,'225','aevhiw', '(',')', ('',' : ',' ; ','. ',', ',' ; '))."\n";
# Line 456  for (my $row_id = 1; $row_id <= $max_row Line 434  for (my $row_id = 1; $row_id <= $max_row
434                  $mps .= isis_to_mps($row,'300',5);                  $mps .= isis_to_mps($row,'300',5);
435                  $mps .= isis_to_mps($row,'320',5);                  $mps .= isis_to_mps($row,'320',5);
436                  $mps .= isis_to_mps($row,'327',5);                  $mps .= isis_to_mps($row,'327',5);
437                    $mps .= isis_to_mps($row,'280',5);
438                    $mps .= isis_to_mps($row,'281',5);
439                    $mps .= isis_to_mps($row,'282',5);
440                    $mps .= isis_to_mps($row,'283',5);
441    
442                  $bib .= isis_to_bib($row,'330','%330');                  $bib .= isis_to_bib($row,'330','%330');
443                  $mps .= isis_to_mps($row,'330',6);                  $mps .= isis_to_mps($row,'330',6);
# Line 477  for (my $row_id = 1; $row_id <= $max_row Line 459  for (my $row_id = 1; $row_id <= $max_row
459                  $bib .= isis_to_bib($row,'991','%991');                  $bib .= isis_to_bib($row,'991','%991');
460                  $mps .= isis_to_mps($row,'991',12);                  $mps .= isis_to_mps($row,'991',12);
461    
462                  # ISBN                  sub store_isn {
463                  if (my $isbn = $row->{10}->[0]) {                          if (my $isn = shift @_) {
464                          $isbn =~ s/ +//g;       # remove spaces                                  my $nr = shift @_;
465                          $mps .= "W $isbn 13\n";                                  my $tag = shift @_;
466                          $bib .= "%ISBN $isbn\n";                                  $isn =~ s/ +//g;        # remove spaces
467                          $isbn =~ s/-//g;                                  $mps .= "W $isn $nr\n";
468                          $mps .= "W $isbn 13\n";                                  $bib .= "$tag $isn\n";
469                                    if ($isn =~ s/-//g) {
470                                            $mps .= "W $isn $nr\n";
471                                    }
472                            }
473                  }                  }
474                  $mps .= isis_to_mps($row,'10',12);  
475                    # ISBN
476                    store_isn($row->{10}->[0],13,'%ISBN');
477                    $mps .= isis_to_mps($row,'290',13);
478                    $mps .= isis_to_mps($row,'291',13);
479                    $mps .= isis_to_mps($row,'292',13);
480                    $mps .= isis_to_mps($row,'293',13);
481    
482                    # ISSN
483                    #store_isn($row->{11}->[0],14,'%ISSN');
484    
485                  $mps .= isis_to_mps($row,'532',1);                  $mps .= isis_to_mps($row,'532',1);
486    
# Line 494  for (my $row_id = 1; $row_id <= $max_row Line 489  for (my $row_id = 1; $row_id <= $max_row
489                  # headline                  # headline
490                  if ($headline) {                  if ($headline) {
491                          $headline .= " [".$row->{mfn}."]";      ## debug MFN!                          $headline .= " [".$row->{mfn}."]";      ## debug MFN!
492                            $headline =~ s/&/&and;/g;
493                            $headline =~ s/</&lt;/g;
494                            $headline =~ s/>/&gt;/g;
495                          $mps .= "H ".c_852_iso($headline)."\n";                          $mps .= "H ".c_852_iso($headline)."\n";
496                  } else {                  } else {
497                          $mps .= "H nepoznato\n";                          $mps .= "H nepoznato\n";
# Line 509  for (my $row_id = 1; $row_id <= $max_row Line 507  for (my $row_id = 1; $row_id <= $max_row
507    
508                  print R c_852_iso($bib);                  print R c_852_iso($bib);
509    
510                    # check if all fields are defined
511                    foreach (split(/\n/,$bib)) {
512                            if (/^%(\w+)\s/ && !$default::FieldNames{$1}) {
513                                    die "field $1 used but not in FieldNames";
514                            }
515                    }
516    
517    #               print R "%perl ".Dumper($row)."\n";
518    
519                  $mps .= "T document text/plain ".(tell(R) - $last_tell)." $dir/bib $last_tell ".tell(R)."\n";                  $mps .= "T document text/plain ".(tell(R) - $last_tell)." $dir/bib $last_tell ".tell(R)."\n";
520                  $last_tell=tell(R);                  $last_tell=tell(R);
521    
# Line 520  for (my $row_id = 1; $row_id <= $max_row Line 527  for (my $row_id = 1; $row_id <= $max_row
527                  print S $mps;                  print S $mps;
528                  print MPS $mps;                  print MPS $mps;
529          }          }
530      }
531  }  }
532  print S "M over and out\nX\n";  print S "M over and out\nX\n";
533  print MPS "M over and out\nX\n";  print MPS "M over and out\nX\n";

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.8

  ViewVC Help
Powered by ViewVC 1.1.26