/[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.2 by dpavlin, Fri Jun 14 18:24:05 2002 UTC revision 1.7 by dpavlin, Sun Jun 16 18:11:14 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    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;
 F 700+ 1 Autor  
 F 200+ 2 Naslov  
 F 210 3 Izdavanje  
 F 225 4 Nakladnička cjelina  
 F 300+ 5 Napomene  
 F 330 6 Sadržaj  
 F 464 7 Analitički radovi  
 F 610 8 Ključne riječi  
 F 675 9 UDK  
 F 686 10 CC  
 F 990 11 Signatura  
 F 991 12 Inventarni broj  
 F 10 13 ISBN  
 ";  
   
 print S $s;  
 print MPS $s;  
30    
31  #  #
32  # expand(nr,"space separated string");  # expand(nr,"space separated string");
# Line 177  sub c_852_czs { Line 156  sub c_852_czs {
156  }  }
157    
158  #--------------------------------------------------------------------  #--------------------------------------------------------------------
 #  
 # mps_expand(nr,"space separated string");  
 #  
   
 sub mps_expand {  
         my $nr = shift @_;  
         my $out = "";  
         while (my $fld = shift @_) {  
                 if ($fld =~ s/\s*[,;\.!?'"<>\[\]]*\s+/ /g) {  
                         foreach my $w (split(/\s+/,$fld)) {  
                                 # FIX: this should be replaced by stemmer!  
                                 $out .= "W $w $nr\n";  
                         }  
                 } else {  
                         $out .= "W $fld $nr\n";  
                 }  
         }  
         return c_852_czs($out);  
 }  
   
 #--------------------------------------------------------------------  
159    
160  # $mps .= sf_to_mps($subfiled_hash,"subfields",mps_id);  # $mps .= sf_to_mps($subfiled_hash,"subfields",mps_id);
161  #  #
# Line 349  sub isis_to_bib { Line 307  sub isis_to_bib {
307  sub isis_sf {  sub isis_sf {
308          my $row = shift @_;          my $row = shift @_;
309          my $isis_id = shift @_;          my $isis_id = shift @_;
310          my $subfield = shift @_ || 'a';          my $subfield = shift @_;
311          my $prefix = shift @_ || '';          my $prefix = shift @_ || '';
312          my $postfix = shift @_ || '';          my $postfix = shift @_ || '';
313    
# Line 357  sub isis_sf { Line 315  sub isis_sf {
315    
316          if ($row->{$isis_id}->[0]) {          if ($row->{$isis_id}->[0]) {
317                  my $sf = OpenIsis::subfields($row->{$isis_id}->[0]);                  my $sf = OpenIsis::subfields($row->{$isis_id}->[0]);
318                  if (length($subfield) == 1) {                  if (! defined $subfield || length($subfield) == 0) {
319                            # subfield list undef, empty or no defined subfields for this record
320                            return $prefix . $row->{$isis_id}->[0] . $postfix;
321                    } elsif (length($subfield) == 1) {
322                          if ($sf->{$subfield}) {                          if ($sf->{$subfield}) {
323                                  return $prefix . $sf->{$subfield} . $postfix;                                  return $prefix . $sf->{$subfield} . $postfix;
324                          } else {                          } else {
# Line 386  sub isis_sf { Line 347  sub isis_sf {
347    
348  my $last_tell=0;  my $last_tell=0;
349    
350  my $db = OpenIsis::open( "$isis_data/$db_dir/LIBRI/LIBRI" );  my @isis_dirs = ( '.' );        # use dirname as database name
351    
352  my $max_rowid = OpenIsis::maxRowid( $db );  if ($opts{m}) {
353            @isis_dirs = split(/,/,$opts{m});
354    }
355    
356  my $last_pcnt = 0;  my @isis_dbs;
357    
358  for (my $row_id = 1; $row_id <= $max_rowid; $row_id++ ) {  foreach (@isis_dirs) {
359            if (-e "$common::isis_data/$db_dir/$_/LIBRI") {
360                    push @isis_dbs,"$common::isis_data/$db_dir/$_/LIBRI/LIBRI";
361            }
362            if (-e "$common::isis_data/$db_dir/$_/PERI") {
363                    push @isis_dbs,"$common::isis_data/$db_dir/$_/PERI/PERI";
364            }
365    }
366    
367    foreach my $isis_db (@isis_dbs) {
368    
369      print MPS "M reading ISIS from '$isis_db'...\n";
370    
371      my $db = OpenIsis::open( "$isis_db" );
372    
373      my $max_rowid = OpenIsis::maxRowid( $db );
374    
375      my $last_pcnt = 0;
376    
377      for (my $row_id = 1; $row_id <= $max_rowid; $row_id++ ) {
378          my $row = OpenIsis::read( $db, $row_id );          my $row = OpenIsis::read( $db, $row_id );
379          if (my $tmp = $row->{'200'}->[0]) {          if (my $tmp = $row->{'200'}->[0]) {
380    
381                  my $bib = "%MFN $row->{mfn}\n";                  my $bib = "%MFN $row->{mfn}\n";
382                  my $mps;                  my $mps = "W $row->{mfn} 14\n";
383    
384                  my $pcnt = int($row->{mfn} * 100 / $max_rowid);                  my $pcnt = int($row->{mfn} * 100 / $max_rowid);
385                  if ($pcnt != $last_pcnt) {                  if ($pcnt != $last_pcnt) {
# Line 422  for (my $row_id = 1; $row_id <= $max_row Line 404  for (my $row_id = 1; $row_id <= $max_row
404                  $mps .= isis_to_mps($row,'711',1);                  $mps .= isis_to_mps($row,'711',1);
405                  $mps .= isis_to_mps($row,'503',1);                  $mps .= isis_to_mps($row,'503',1);
406                  $mps .= isis_to_mps($row,'702',1);                  $mps .= isis_to_mps($row,'702',1);
407                    $mps .= isis_to_mps($row,'200',1,"fg");
408    
409                  $bib .= isis_to_bib($row,'205','%205');                  $bib .= isis_to_bib($row,'205','%205');
410    
# Line 443  for (my $row_id = 1; $row_id <= $max_row Line 426  for (my $row_id = 1; $row_id <= $max_row
426                  $mps .= isis_to_mps($row,'532',2);                  $mps .= isis_to_mps($row,'532',2);
427                  $mps .= isis_to_mps($row,'424',2);                  $mps .= isis_to_mps($row,'424',2);
428    
429                    $mps .= isis_to_mps($row,'230',2,"ae");
430                    $mps .= isis_to_mps($row,'231',2,"ae");
431                    $mps .= isis_to_mps($row,'232',2,"ae");
432                    $mps .= isis_to_mps($row,'233',2,"ae");
433    
434    
435                    $bib .= "%sv ".isis_sf($row,'230','v').
436                            isis_sf($row,'230','a',' : ').
437                            isis_sf($row,'250',undef,'. - ').
438                            isis_sf($row,'260',undef,'. - ').
439                            isis_sf($row,'290',undef,'<br>ISBN ').
440                            "\n";
441                    $bib .= "%sv ".isis_sf($row,'231','v','<br>').
442                            isis_sf($row,'231','a',' : ').
443                            isis_sf($row,'251',undef,'. - ').
444                            isis_sf($row,'261',undef,'. - ').
445                            isis_sf($row,'291',undef,'<br>ISBN ').
446                            "\n";
447                    $bib .= "%sv ".isis_sf($row,'232','v','<br>').
448                            isis_sf($row,'232','a',' : ').
449                            isis_sf($row,'252',undef,'. - ').
450                            isis_sf($row,'262',undef,'. - ').
451                            isis_sf($row,'292',undef,'<br>ISBN ').
452                            "\n";
453                    $bib .= "%sv ".isis_sf($row,'233','v','<br>').
454                            isis_sf($row,'233','a',' : ').
455                            isis_sf($row,'253',undef,'. - ').
456                            isis_sf($row,'263',undef,'. - ').
457                            isis_sf($row,'293',undef,'<br>ISBN ').
458                            "\n";
459    
460                    $mps .= isis_to_mps($row,'270',2);
461                    $mps .= isis_to_mps($row,'271',2);
462                    $mps .= isis_to_mps($row,'272',2);
463                    $mps .= isis_to_mps($row,'273',2);
464    
465                  $headline .= isis_sf($row,'700','b'," ");                  $headline .= isis_sf($row,'700','b'," ");
466                  $headline .= isis_sf($row,'700','a'," ");                  $headline .= isis_sf($row,'700','a'," ");
467    
468                  # izdavac                  # izdavac
469                  $mps .= isis_to_mps($row,'210',3);                  $mps .= isis_to_mps($row,'210',3);
470                    $mps .= isis_to_mps($row,'250',3);
471                    $mps .= isis_to_mps($row,'251',3);
472                    $mps .= isis_to_mps($row,'252',3);
473                    $mps .= isis_to_mps($row,'253',3);
474  #               if (my $sf = OpenIsis::subfields($row->{'210'}->[0])) {  #               if (my $sf = OpenIsis::subfields($row->{'210'}->[0])) {
475  #                       my $tmp;  #                       my $tmp;
476  #                       $tmp .= $sf->{a} if ($sf->{a});  #                       $tmp .= $sf->{a} if ($sf->{a});
# Line 455  for (my $row_id = 1; $row_id <= $max_row Line 478  for (my $row_id = 1; $row_id <= $max_row
478  #                       $tmp .= ", ".$sf->{d} if ($sf->{d});  #                       $tmp .= ", ".$sf->{d} if ($sf->{d});
479  #                       $bib .= "%210 $tmp\n" if ($tmp);  #                       $bib .= "%210 $tmp\n" if ($tmp);
480  #               }  #               }
481                  $bib .= "%210 ".isis_sf($row,'210','acd', '','', ('',' : ',', ') )."\n";                  $bib .= "%210+ ".isis_sf($row,'210','acd', '','', ('',' : ',', ') )."\n";
482    
483                  if (my $year = isis_sf($row,'210','d')) {                  if (my $year = isis_sf($row,'210','d')) {
484                          $year =~ s/^\s*cop\.*\s*//i;                          $year =~ s/^\s*cop\.*\s*//i;
# Line 464  for (my $row_id = 1; $row_id <= $max_row Line 487  for (my $row_id = 1; $row_id <= $max_row
487                          $headline .= " ($year)";                          $headline .= " ($year)";
488                  }                  }
489    
490                  $bib .= isis_to_bib($row,'215','%215', '*', undef, undef, ', ');                  $mps .= isis_to_mps($row,'215',15);
491                    $mps .= isis_to_mps($row,'260',15);
492                    $mps .= isis_to_mps($row,'261',15);
493                    $mps .= isis_to_mps($row,'262',15);
494                    $mps .= isis_to_mps($row,'263',15);
495                    $bib .= isis_to_bib($row,'215','%215+', '*', undef, undef, ', ');
496    
497  #               $bib .= isis_to_bib($row,'225','%225', 'aehivw');  #               $bib .= isis_to_bib($row,'225','%225', 'aehivw');
498                  $bib .= "%225 ".isis_sf($row,'225','aevhiw', '(',')', ('',' : ',' ; ','. ',', ',' ; '))."\n";                  $bib .= "%225 ".isis_sf($row,'225','aevhiw', '(',')', ('',' : ',' ; ','. ',', ',' ; '))."\n";
# Line 476  for (my $row_id = 1; $row_id <= $max_row Line 504  for (my $row_id = 1; $row_id <= $max_row
504                  $mps .= isis_to_mps($row,'300',5);                  $mps .= isis_to_mps($row,'300',5);
505                  $mps .= isis_to_mps($row,'320',5);                  $mps .= isis_to_mps($row,'320',5);
506                  $mps .= isis_to_mps($row,'327',5);                  $mps .= isis_to_mps($row,'327',5);
507                    $mps .= isis_to_mps($row,'280',5);
508                    $mps .= isis_to_mps($row,'281',5);
509                    $mps .= isis_to_mps($row,'282',5);
510                    $mps .= isis_to_mps($row,'283',5);
511    
512                  $bib .= isis_to_bib($row,'330','%330');                  $bib .= isis_to_bib($row,'330','%330');
513                  $mps .= isis_to_mps($row,'330',6);                  $mps .= isis_to_mps($row,'330',6);
# Line 497  for (my $row_id = 1; $row_id <= $max_row Line 529  for (my $row_id = 1; $row_id <= $max_row
529                  $bib .= isis_to_bib($row,'991','%991');                  $bib .= isis_to_bib($row,'991','%991');
530                  $mps .= isis_to_mps($row,'991',12);                  $mps .= isis_to_mps($row,'991',12);
531    
532                  # ISBN                  sub store_isn {
533                  if (my $isbn = $row->{10}->[0]) {                          if (my $isn = shift @_) {
534                          $isbn =~ s/ +//g;       # remove spaces                                  my $nr = shift @_;
535                          $mps .= "W $isbn 13\n";                                  my $tag = shift @_;
536                          $bib .= "%ISBN $isbn\n";                                  $isn =~ s/ +//g;        # remove spaces
537                          $isbn =~ s/-//g;                                  $mps .= "W $isn $nr\n";
538                          $mps .= "W $isbn 13\n";                                  $bib .= "$tag $isn\n";
539                                    if ($isn =~ s/-//g) {
540                                            $mps .= "W $isn $nr\n";
541                                    }
542                            }
543                  }                  }
544                  $mps .= isis_to_mps($row,'10',12);  
545                    # ISBN
546                    store_isn($row->{10}->[0],13,'%ISBN');
547                    $mps .= isis_to_mps($row,'290',13);
548                    $mps .= isis_to_mps($row,'291',13);
549                    $mps .= isis_to_mps($row,'292',13);
550                    $mps .= isis_to_mps($row,'293',13);
551    
552                    # ISSN
553                    #store_isn($row->{11}->[0],14,'%ISSN');
554    
555                  $mps .= isis_to_mps($row,'532',1);                  $mps .= isis_to_mps($row,'532',1);
556    
# Line 528  for (my $row_id = 1; $row_id <= $max_row Line 573  for (my $row_id = 1; $row_id <= $max_row
573  #}  #}
574    
575                  print R c_852_iso($bib);                  print R c_852_iso($bib);
576                    print R "%perl ".Dumper($row)."\n";
577    
578                  $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";
579                  $last_tell=tell(R);                  $last_tell=tell(R);
# Line 540  for (my $row_id = 1; $row_id <= $max_row Line 586  for (my $row_id = 1; $row_id <= $max_row
586                  print S $mps;                  print S $mps;
587                  print MPS $mps;                  print MPS $mps;
588          }          }
589      }
590  }  }
591  print S "M over and out\nX\n";  print S "M over and out\nX\n";
592  print MPS "M over and out\nX\n";  print MPS "M over and out\nX\n";

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.7

  ViewVC Help
Powered by ViewVC 1.1.26