# -------------------------------------------------------------
# Projekt : Digitale Bibliotheken Projekt
# Uni-Frankfurt/M, Professur Telematik und
# verteilte Systeme, Prof. O. Drobnik
# Diplomarbeit, Matzen,Hans, 1997
#
# Dateiname : p_bitstream.py
# Datum : 03.11.1997
# letzte Änderung :
# Autor : Hans Matzen, 1997, Frankfurt/M, Deutschland
# Sprache : Python v1.4
# Beschreibung : Paket Bitstream, fasst alle Bitstrompaket
# Klassen zusammen
#
# Anmerkungen :
#
# -------------------------------------------------------------
import c_store
import c_bsio
import c_search
import c_glimpsearch
Klasse c_store
# -------------------------------------------------------------
# Projekt : Digitale Bibliotheken Projekt
# Uni-Frankfurt/M, Professur Telematik und
# verteilte Systeme, Prof. O. Drobnik
# Diplomarbeit, Matzen,Hans, 1998
# Dateiname : c_store.py
# Datum : 09.12.1997
# letzte Änderung :
# Autor : Hans Matzen, 1997, Frankfurt/M, Deutschland
# Sprache : Python v1.4
# Beschreibung : Klasse c_store bietet Methoden, um
# Dokumente in Form eines Bitstroms im
# Speicher abzulegen.
# Anmerkungen : Die Variablen CURRENT_INFILE und NEWDOCID
# werden von der Ablaufumgebung gesetzt.
#
# -------------------------------------------------------------
class c_store:
infile=""
outfile=""
docid=0
fd_in=0
fd_out=0
#
# Konstruktor, setzt alle notwendigen Variablen
# CURRENT_INFILE und NEWDOCID, werden von der
# Ablaufumgebung gesetzt
#
def __init__(self):
self.infile=sc_globals.DL_INPATH+CURRENT_INFILE
#self.docid=class_funcs.get_newdocid()
self.docid=NEWDOCID
if self.docid== -1:
print "Bekomme keine neue Doc Id."
raise KeyboardInterrupt
self.outfile=sc_globals.DL_BSOUTPATH+str(self.docid)+".bs"
#
# oeffnet den Eingabebitstrom
#
def open_in(self):
self.fd_in=open(self.infile,"r")
#
# oeffnet den Ausgabebitstrom
#
def open_out(self):
self.fd_out=open(self.outfile,"a+")
#
# schliesst den Eingabebitsrom
#
def close_in(self):
self.fd_in.close()
#
# schliesst den Ausgabebitstrom
#
def close_out(self):
self.fd_out.close()
#
# liest size Bytes aus dem Eeingabebitstrom
#
def read_in(self,size):
return self.fd_in.read(size)
#
# schreibt outstr in den Ausgabebitstrom
#
def write_out(self,outstr):
self.fd_out.write(outstr)
#
# setzt die Position der Lese-/Schreibmarke
# des Eingabebitstroms Syntax: wie Python seek Befehl
#
def seek_in(self,offset,whence):
return self.fd_in.seek(offset,whence)
#
# setzt die Position der Lese-/Schreibmarke
# des Ausgabebitstroms Syntax: wie Python seek Befehl
#
def seek_out(self,offset,whence):
return self.fd_out.seek(offset,whence)
#
# liefert die Position der Lese-/Schreibmarke
# des Eingabebitstroms zurueck
#
def tell_in(self):
return self.fd_in.tell()
#
# liefert die Position der Lese-/Schreibmarke
# des Ausgabebitstroms zurueck
#
def tell_out(self):
return self.fd_out.tell()
#
# vermerkt in den Metadaten des Dokuments, dass es als
# Bitstrom im Speicher abgelegt wurde.
#
def register_store(self):
query="update doc_description set bs_stored='t' where docnr="
query=query+str(self.docid)+";"
res=self.conn.exec_query(query)
if res.commandstatus()[0:6]!="UPDATE":
print "Fehler bei Update in register_sgmlstore"
return -1
else:
return 0
Klasse c_search
# -------------------------------------------------------------
# Projekt : Digitale Bibliotheken Projekt
# Uni-Frankfurt/M, Professur Telematik und
# verteilte Systeme, Prof. O. Drobnik
# Diplomarbeit, Matzen,Hans, 1998
# Dateiname : c_search.py
# Datum : 09.12.1997
# letzte Änderung : 15.01.98
# Autor : Hans Matzen, 1997, Frankfurt/M, Deutschland
# Sprache : Python v1.4
# Beschreibung : Klasse zum Volltextsuche in einem bestimmten
# Dokument
# Anmerkungen :
#
# -------------------------------------------------------------
class c_search:
#
# Konstruktor, initialisert Variable
#
def __init__(self,docid):
from sc_globals import *
self.dir=DL_FULLTEXT_DIR
self.docid=docid
#
# Durchsucht das Dokument nach dem durch searchstr
# gegebenen und/oder-verknuepften Begriffen
# Dabei steht "; fuer oder" und "& fuer und"
# Ergebnis ist eine Liste von Zeilen, in denen
# der Ausdruck vorkommt
#
def search(self,searchstr):
slist=string.split(searchstr,"&")
erglist=[]
for i in slist:
erglist.append(self.searchor(i))
erg=[]
for i in erglist[0]:
flag=1
for j in erglist[1:]:
if not (i in j):
flag=0
break
if flag==1:
erg.append(i)
return erg
#
# Wei search nur werden lediglich veroderter
# Ausdruecke verabreitet
#
def searchor(self,searchstr):
slist=string.split(searchstr,";")
fd=open(self.dir+self.docid,"r")
buff=" "
while buff!="":
buff=fd.readline()
for i in slist:
if string.find(buff,i):
erg.append(buff)
fd.close()
return erg
Klasse c_glimpsearch
# -------------------------------------------------------------
# Projekt : Digitale Bibliotheken Projekt
# Uni-Frankfurt/M, Professur Telematik und
# verteilte Systeme, Prof. O. Drobnik
# Diplomarbeit, Matzen,Hans, 1998
# Dateiname : c_glimpsearch.py
# Datum : 09.12.1997
# letzte Änderung :
# Autor : Hans Matzen, 1997, Frankfurt/M, Deutschland
# Sprache : Python v1.4
# Beschreibung : Eine Klasse um mit glimpse eine Volltext-
# recherche durchzufuehren.
# Anmerkungen :
#
# -------------------------------------------------------------
class c_glimp_search:
#
# Konstruktor, initialisert Variable
#
def __init__(self,sparams):
import string
from sc_globals import *
self.dir=DL_FULLTEXT_DIR
self.params=sparams
self.resfile=DL_FULLTEXT_RESULTS
#
# Durchsucht alle als Bitstrom gespeicherten Dokumente
# nach dem durch searchstr
# gegebenen und/oder-verknuepften Begriffen
# Dabei steht "; fuer oder" und "& fuer und"
# Ergebnis ist eine Liste von Zeilen, in denen
# der Ausdruck vorkommt
#
def glimp_search(self,searchstr):
slist=string.split(searchstr,"&")
erglist=[]
for i in slist:
erglist.append(self.glimp_searchor(i))
erg=[]
for i in erglist[0]:
flag=1
for j in erglist[1:]:
if not (i in j):
flag=0
break
if flag==1:
erg.append(i)
return erg
#
# Wie glimp_search es werden aber lediglich veroderter
# Ausdruecke verarbeitet
#
def glimp_searchor(self,searchstr):
import os
erg=[]
os.system("glimpse -y -H "+self.dir+" "+self.params+" "+searchstr+" >"+self.resfile)
fd=open(self.resfile,"r")
buff=" "
while buff!="":
buff=fd.readline()
erg.append(buff[:-1])