Suchworte in Allegro "fett" anzeigen lassen

Christoph Deblon Deblon at MH-TROSSINGEN.DE
Sa Mär 15 21:01:25 CET 2003


Von:            	GDachnowsky at t-online.de
An:             	"Diskussionsliste Allegro-C" <allegro at buch.biblio.etc.tu-bs.de>
Betreff:        	Suchworte in Allegro "fett" anzeigen lassen
Datum:   	Mon, 24 Feb 2003 11:33:44 +0100 (CET)
Antwort an:     	allegro at buch.biblio.etc.tu-bs.de

> Das Deutsche Volksliedarchiv will seine Datenbestände in
> eine Allegro Datenbank überführen.
> 
> Als Praktikant in der Wissenschaftlichen Dokumentation kümmere
> ich mich um Datailfragen.
> 
> Ein Wunsch von den meisten Mitarbeitern ist es, dass Suchworte in
> der Ergebnisanzeige "fett" erscheinen. Wie lässt sich dies mit Allegro
> verwirklichen.
> 
> Gruss,
> 
> Gangolf-T. Dachnowsky
> Deutsches Volksliedarchiv


Lieber Herr Dachnowsky,

ich hatte schon mal kurz geantwortet, aber das war nicht viel mehr 
als die Behauptung "es geht".

Inzwischen habe ich mich nochmals etwas mit der Frage befasst 
und kann ihnen nun eine Art Parametrier-Geruest schicken, das 
vielleicht Anregungen bietet. 
Es sollen die Suchworte markiert werden, die man bei einer 
Suchfrage im Findmenue eingegeben hat, aber es wird auch ein 
Indexeintrag, ueber den man zugegriffen hat, im Text markiert, 
sofern er dort vorkommt.

Die Parametrierung war fuer eine Volltext-Datenbank entworfen, 
als eigentliche auszugebende Kategorien daher hier nur #20.
Das kann aber natuerlich erweitert werden.

Wie schon gesagt - ein Zeitproblem entstand bei mir durch die 
"zerhackte" Ausgabe nicht.

Hoffentlich kommen die Zeilen einigermassen ueber.

Mit freundlichen Gruessen
Christoph Deblon

--------

Und hier zur Sache:

Zunaechst kommt in die _start.flx:

var "x var f\\asci\\ins #ufi"\ins #uX=

Diese Zeile haette ich allein auch nicht hingekriegt, sie stammt von 
Herrn Eger (vgl. Emails in der Liste von 12.6. bis 13.6.2002 mit 
Betreff "Findmenue Eingaben").

Der Effekt ist, das vor jeder Ausgabe der Autoflex #uX= augefuehrt 
wird, und die im Findmenue eingegebenen Suchworte in #ufi 
stehen, d.h. es ist noch etwas komplizierter - dazu siehe die 
Kommentare zu den Parametern.




			Parametrier-Geruest fuer Ausgabe mit markierten 		
			Suchworten
		      *********************************************************

                     ** Bei Zugriff ueber den Index ist #uxa mit der
                     ** letzten Zugriffszeile belegt.
                     ** Bei Zugriff ueber das Findmenue ist #ufi
                     ** mit der Suchfrage belegt, die sich aus den 
				   ** Eintraegen ergibt.					
                     ** (Das muss in _start.flx veranlasst werden.)

#dt df0 df1 df2 df3 dfx dtw Z

				    ** Alle Variablen loeschen ausser
				    ** #ufi, #uxa, #ucf, #ucx	


#ufi +#uxa c"STI" p>f Z
#ufi c"PER" p>f Z

			    ** Falls (1) #ufi belegt ist und (2)
			    ** der Inhalt von #ufi wenigstens eine der	
			    ** in den Indexparametern vorgegebenen Kuerzel fuer das
			    ** Findmenue (wie z.B. STI, PER usw.) enthaelt, handelt es
			    ** sich um einen Zugriff ueber das Findmenue.
			    **(#ufi ist auch dann belegt, wenn bei einem Zugriff ueber
			    ** den Index eine mehrfach belegte Indexzeile gewaehlt
			    ** wurde, d.h. eine Ergebnismenge entsteht; daher die
			    ** Pruefung mit "STI", "PER" usw.). 	
                     
  			   ** Falls beide Bedingungen zutreffen, werden                  
           	   ** im UP f die einzelnen Suchbegriffe aus dem 
			   ** Ergebnismengentitel herausgezogen und in
			   ** #uf1, #uf2, #uf3 gespeichert.#
	  

#uxa y0 p"qq" P"qq" dfx afx   	** Falls #uxa belegt ist, wird diese in #ufx 
							** gespeichert.

							** (Da der Indexzeileninhalt im Text _genau_,
                             	** (nicht trunkiert) verglichen werden soll,
                             	** wird "qq" vor- _und_ nachgestellt.)
                              
					** Nicht umkodieren, im Index ist ja schon
                    	** umkodiert (anders die Findmenue-Suchworte
					** im UP f).

                       ** #ufi und #uxa koennen nicht geloescht werden,
                       ** da Sie ja ggf. bei einem Zugriff fuer mehrere
                       ** Titelanzeigen gelten koennten.

                       ** Wenn ein neuer Zugriff ueber denselben
                       ** Suchweg (Index/Findmenue) erfolgt, ist das
                       ** unproblematisch, da sie dann neu belegt
                       ** werden.

                       ** Erfolgt aber ein neuer Zugriff ueber den
                       ** jeweils anderen Suchweg, so bleibt die
                       ** Variable des vorhergehenden Zugriffs
                       ** bestehen. Daher:

#ufi +#dt =cf Z		** Wurde #ufi NEU belegt?
					** (#ucf dient zum Vergleich).
      				** Wenn ja, zu Zeile #dt (#dt als Hilfskat.)

#uxa +#nr =cx Z       	** Wurde #uxa NEU belegt?
					** (#ucx dient zum Vergleich).
                      	** Wenn ja, zu Zeile #nr (#nr = Hilfskat.)

#dts +#20. Z          	** Wenn weder #ufi noch #uxa neu, dann weiter 		
					** zur Ausgabe 

#dt +#20. dfx Z        ** War #ufi neu, wird die aus #uxa gebildete
                       ** #ufx mit Suchwort geloescht, dann weiter zur
                       ** Ausgabe

#nr df0 df1 df2 df3 Z        	
					 ** War #uxa neu, werden die aus #ufi gebildeten
                      	 ** #uf0, #uf1, #uf2, #uf3 geloescht (vgl. UP f)		


					***********************************************

					** Die folgende Zeile vertritt die 					
					** "Kategorienliste", dh. hier muessen alle 			
					** auszugebenden Kategorien folgen einschliesslich 	
					** eventueller Formatierungen. 
					** Die Kategorien, die dabei auf Suchwort hin 		
					** geprüft werden sollen, werden dabei uber das 		
					** Unterprogramm T ausgegeben.
                              

#20. ++ p>T m>T Z            	** Ausgabe #20. ueber Unterprogramm T      


					***********************************************
                         

#+#                     	** HAUPTTEIL ENDE

          		    -----------------------------------------------


                       	   UNTERPROGRAMME

                        

#(T                   		 ** UP fuer Ausgabe 



#cc dtw atw		     ** Die aktuelle Kategorie kommt in #utw

		** #utw wird in einer Schleife in einzelne Worte zerlegt und mit der
		** Eingabe verglichen.

		** (Die Eingabe-Suchworte stehen in #ufx (Indexeintrag)
		** bzw. #uf1, #uf2, #uf3 (Suchworte im Findmenue). Daher vier
		** Zerlegungs- und Vergleichszeilen.
		** Einem Indexeintrag wurde "qq" vor- und nachgestellt, damit er
		** _genau_ verglichen werden kann.
		** Den Suchworten wurde "qq" vorgestellt, damit sie rechts-, aber
		** nicht linkstrunkiert verglichen werden koennen.	

		** Faellt einer der Vergleiche positiv aus, wird zum 
		** UP W gegangen, und dort das Wort _markiert_ 
		** ausgegeben.

		** Andernfalls wird das Wort _unmarkiert_ ausgegeben.

		** In e"[...]" die gewuenschten Trennzeichen eintragen

		** Wg. Korrektheit des Vergleichs sofortige Umkodierung mit y2

#-t				** Schleife Einsprung

!utw +#dt e"[ .,:;/-=()!?<>]" y2 f34 F34 p"qq" P"qq" c"~#ufx" p>w

!utw +#dt e"[ .,:;/-=()!?<>]" y2 f34 p"qq" c"~#uf1" p>w
!utw +#dt e"[ .,:;/-=()!?<>]" y2 f34 p"qq" c"~#uf2" p>w
!utw +#dt e"[ .,:;/-=()!?<>]" y2 f34 p"qq" c"~#uf3" p>w

				** Nicht gueltige #ufx bzw. #uf1. #uf2, #uf3 
				** wurden oben geloescht.


#utw E"[ .,:;/-=()!?<>]"		** Ausgabe _unmarkiertes_ Wort

							** (wg. "E" geschieht die Ausgabe
							** mit folgendem Trennzeichen, z.B. 
							** Leer, Komma, Punkt usw.)	

#dt Z						** Sprungmarke	

#utw +t b"[ .,:;/-=()!?<>]" =tw Z    ** Schleifendende; #utw wird um das
								 ** jeweils erste WOrt verkuerzt, dann
 								 ** Ruecksprung nach #-t

#)T				** UP T ENDE

                                          

				** UP fuer Ausgabe markiertes Wort
#(w

#utw E"[ .,:;/-=()!?<>]" p99 P98
                  
							** Gewuenschtes Zwischenteil fuer
							** Markierung (z.B. fett oder farbig
							** als Praefix, die jeweilige 
							** Aufhebung als Postfix

							** (wg. "E" geschieht die Ausgabe
							** mit folgendem Trennzeichen, z.B. 
							** Leer, Komma, Punkt usw.)	

#)w				** UP w ENDE


				** UP zur Ermittlung der Suchbegriffe
#)f
#ufi y0 ,"_(__" ,"_)__" ,"_STI _ _" ,"_PER _ _" df0 af0
#uf0 y0 ,"_ and __" ,"_ or __" ,"_ not __" ,"_?__" df0 af0

				** in #ufi ist die formulierte Suchfrage gespeichert.
				** Die Kuerzel fuer die Suchaspekte (STI, PER usw.)
				** sowie die syntaktischen Ausdruecke (and, or , not, ()
				** usw.) werden eliminiert, so dass die Suchworte
				** uebrigbleiben und jetzt in #uf0 stehen. 

!uf0 y2 f" " e" " p"qq" df1 af1
!uf0 y2 f" " b" " f" " e" " p"qq" df2 af2
!uf0 y2 f" " b" " f" " b" " p"qq" df3 af3

			** Jetzt stehen die Suchworte in #uf1, #uf2, #uf3.
			** Durch Voranstellen von "qq" wird erreicht, dass sie fuer die
			** Markierung rechts-, aber nicht linkstrunkiert verglichen
			** werden.

			** Wg. Korrektheit des Vergleichs sofortige Umkodierung mit y2	


#(f			** UP f ENDE


Einschlaegige Codiertabelle nicht vergessen!









Mehr Informationen über die Mailingliste Allegro