Suchmaschinentechnik in der EEZB

In der EEZB soll eine Bestandsliste von über 14000 Datensätzen durchsucht werden. Jeder Datensatz besteht aus dem Zeitschriftentitel in Grossbuchstaben, dem Fachthema, der ISSN und den Kennzeichen der besitzenden Bibliotheken, ggf. (d.h. bei den grösseren Verlagen) auch aus dem Verlagskennzeichen. Jeder Datensatz wird mit dem Zeichen > eingeleitet, z.B.:

>J OF FORECASTING=econ=02776693=WILEY*BHU*DD*FHM*FHR*GÖ*TIB*TUM

(JOURNAL mit J abgekürzt!)

Um diese Liste zu durchsuchen, muss sie in die einzelnen Elemente = Datensätze zerlegt werden und jedes einzelne Element muss nach den eingegebenen Suchbegriffen (Stichwort oder Zeichfolge, Fachthema oder Fachgebiet, besitzende Bibliothek und Verlag) abgefragt werden. Die Liste wird also durch die Split-Metheode mit dem Trennungmerkmal > in ein Array zerlegt:

Ga=G.split(">")

Anschliessend erfolgt in einer For-Schleife die Abfrage der Suchbegiffe.

Wenn nun jedes einzelne Element aus einem Bestand von über 14000 Titeln auf diese Weise abgefragt wird, kann es zu vielen negativen Abfragen kommen, die den Suchvorgang sehr verlangsamen. Dieses ist besonders der Fall, wenn nach Stichwörtern bzw. Zeichenfolgen oder nach Fachthemen gesucht wird, die verhältnismässig wenig Treffer ergeben. Um diese Suchvorgänge zu beschleunigen, wird, wenn es sich um eine der genannten Sucharten handelt, vor dem eigentlichen Suchvorgang ein vorbereitender Suchvorgang eingeschaltet. Wenn z.B. nach einer Zeichenfolge oder einem Stichwort gesucht werden soll, wird die folgende Codierung vorgeschaltet:

1) eaa=new RegExp("...."+Ea[0]+"........","g");
2) eaan=G.match(eaa);
3) if(eaan.length>0&&eaan.length<500)
4) {
5) for(i=0;i<eaan.length;i++)
6) {
7) pa1=G.indexOf(eaan[i]);
8) pa2=G.indexOf(">",pa1+4);
9) Gs1a=G.substring(pa1-200,pa2);
10) pa3=Gs1a.lastIndexOf(">");
11) Gs1=Gs1a.slice(pa3);
12) a=document.forma2.Gs.value;
13) document.forma2.Gs.value=a+Gs1;
14) }
15) Gs=document.forma2.Gs.value+">XXXXXX";

In 1) wird aus Ea[0] der reguläre Ausdruck eaa gebildet: das 1. Stichwort und 4 Zeichen vorher und 7 folgende Zeichen, dies global. Bei der Suche nach "abnormal" z.B. ist dies:

Ea[0] = ABNORMAL, eaa = /....ABNORMAL......../g

in 2) In der gesamten Bestandsliste G wird dieser Ausdruck global mit der Match-Methode gesucht. Es entsteht das Array eaan:

OF ABNORMAL CHILD P, OF ABNORMAL PSYCHOL (2 Treffer, jeweils 3 Zeichen vor und 4 Zeichen hinter Ea[0])

3ff Das Array wird in der Schleife abgearbeitet

7) Die Position des Elements eaan[i] wird in G mit der Index-Methode ermittelt, Position pa1 =460272

8) Das folgende Zeichen > wird nach pa1+4 ermittelt, Position pa2 = 460356

9) Der Teilstring Gs1a wird mit der Substring-Methode gebildet, wobei pa1-200:

J NATIONAL MEDICAL ASSOCIATION=med=00279684*FREI >J NEW YORK ENTOMOLOGICAL SOCIETY=00287199*TUM >J NORTH AMERICAN BENTHOLOGICAL SOCIETY=poll=08873593*TIB(ALT*TUM(AKT >J OF AAPOS=ped=oph=10918531*GÖ >J OF ABNORMAL CHILD PSYCHOLOGY=ped=psy=00910627=SPRING*AA*BHU*FHM*GÖ*HL*J*RE*TIB*TUM

10) Das letzte > aus diesem String wird gesucht, Position pa3 = 198

11) Der Teilstring Gs1 mit der Slice-Methode entsteht:

>J OF ABNORMAL CHILD PSYCHOLOGY=ped=psy=00910627=SPRING*AA*BHU*FHM*GÖ*HL*J*RE*TIB*TUM >J OF ABNORMAL PSYCHOLOGY=0021843X*GÖ >XXXXXX

12 und 13) Dieser String wird fortlaufend in das versteckte Formularfeld document.forma2.Gs als Wert zugefügt.

14) Nach Durchlauf der Schleife wird der gesamte Wert als Gs ausgelesen.

Gs enthält damit alle (hier 2) Titel, in denen der Suchbegriff Ea[0] vorkommt:

Gs =>J OF ABNORMAL CHILD PSYCHOLOGY=ped=psy=00910627=SPRING*AA*BHU*FHM*GÖ*HL*J*RE*TIB*TUM >J OF ABNORMAL PSYCHOLOGY=0021843X*GÖ >XXXXXX

Aus Gs wird das o.g. Array Ga gebildet (hier mit 2 Elementen). In der For-Schleife werden dann die weiteren Suchbegriffe abgefragt.

 

Bei der Suche nach Fachthemen wird ein entspechender regulärer Ausdruck gebildet:

faa=new RegExp("...."+Faa1+"........","g");

wobei Faa1 das gesuchte Fachthema ist.

Die weitere Codierung im Prinzip wie oben!

 

counter