def datum(metadata: dict, parser: str): pfad = next(iter(metadata)) datei = next(iter(metadata[pfad])) inhalt = metadata[pfad][datei]['inhalt'] if inhalt == '': inhalt = extractText.getTextContent(metadata, parser) datenDateiAll = extractDatum.getDates(inhalt) daten = helpers.convertDate(datenDateiAll) return daten
def relateObjnr(metadata: dict, parser: str = 'tika'): pfad = next(iter(metadata)) datei = next(iter(metadata[pfad])) inhalt = metadata[pfad][datei]['inhalt'] adressen = metadata[pfad][datei]['adrDict'] if adressen == {}: adressen, adresse, adrName = relateAdresse.findAddress( metadata, parser) if inhalt == '': inhalt = extractText.getTextContent(metadata, parser) objnr, behoerde, objnrMethode = getObjnr.getObjnr(adressen, inhalt) return objnr, behoerde, objnrMethode
def findAddress(metadata: dict, parser: str): pfad = next(iter(metadata)) datei = next(iter(metadata[pfad])) inhalt = metadata[pfad][datei]['inhalt'] # Pfad adressen, adresse, adrName = extractAdresse.getAddress(pfad) # Dateiname if not adressen: adressen, adresse, adrName = extractAdresse.getAddress(datei) # Inhalt if not adressen: if inhalt == '': inhalt = extractText.getTextContent(metadata, parser) adressen, adresse, adrName = extractAdresse.getAddress( inhalt) #inhalt = inhalt.split('§')[0] return adressen, adresse, adrName
def vorhaben(metadata, directories, ordnerStruktur, methode): target_dir = next(iter(metadata)) datei = next(iter(metadata[target_dir])) dateidir = metadata[target_dir][datei]['pfadAktuell'] inhalt = metadata[target_dir][datei]['inhalt'] adressenDict = metadata[target_dir][datei]['adrDict'] datenStr = metadata[target_dir][datei]['daten'] if adressenDict == {}: adressenDict, adresse, adrName = relateAdresse.findAddress( metadata, methode) if inhalt == '': inhalt = extractText.getTextContent(metadata, methode) if datenStr == []: datenStr = relateDatum.datum(metadata, methode) daten = [helpers.convertstring2date(i) for i in datenStr] if ordnerStruktur == []: vorhVars = initVorhaben(directories, methode) else: outermost_dir = directories[0] vorhVars = initVorhaben_OROS(ordnerStruktur, dateidir, directories, methode) moeglVorhList, moeglOrtList = getVorhabenListFuerDirectory( target_dir, vorhVars.vorhDict, vorhVars.subdirs) try: vorhabenBestMatch, score = getVorhabenBestMatch(inhalt.split('§')[0], adressenDict, daten, moeglVorhList, \ moeglOrtList, vorhVars.vorhDict[target_dir], vorhVars.vorhOntologie, \ vorhVars.vorhDict_dir, datei) except: vorhabenBestMatch = [] score = 9999 return vorhabenBestMatch, score
def objnrByFileName(root: str, file: str, pfadDictFile, parser: str, docxVorhanden, deutsch, denkmale, denkmalStrasse, denkmaleAdresse, denkmalHausnr, denkmaleObjNr, denkmalSachbegriff, denkmalName, behoerden, foundObjnrPfad, countDateiname, countInhalt, considerPfadundName=True): dictObjnr = {} foundObjnrDatei = False # Diese Angabe wird für die entsprechende Datei geändert, sobald eine Adresse mit # Objektnummer (durch Dateiname, Pfad, oder Inhalt erkannt wird) inhaltVorhanden = True # Annahme. Wenn die Datei keinen lesbaren Inhalt hat, wird diese Angabe im folgenden korrigiert inhalt = extractText.getTextContent(root, file, parser, docxVorhanden) if inhalt == None or inhalt == '': inhaltVorhanden = False inhalt = '' dirstr = '' for elem in pfadDictFile['pfad']: dirstr = dirstr + ' ' + elem inhaltMitPfad = root + ' ' + file + ' ' + inhalt + ' ' + dirstr if foundObjnrPfad == True: foundObjnrDatei = True else: if considerPfadundName: # Versuch 2: Adresse aus Dateiname entnehmen, da Infos aus Pfad nicht ausreichend dictObjnr, countDateiname, foundObjnrDatei = objnrDurchAdresseInDateiname( file, deutsch, denkmalStrasse, denkmaleAdresse, denkmalHausnr, denkmaleObjNr, denkmalSachbegriff, denkmalName, behoerden, countDateiname, foundObjnrDatei) if (foundObjnrDatei == False) and (inhaltVorhanden == True): # Versuch 3: Adresse bzw. Objektnummer aus Inhalt entnehmen, da Infos aus Pfad und Dateiname nicht ausreichend # Versuch 3.1.: Objektnummer aus Datei extrahieren dictObjnr, countInhalt, foundObjnrDatei = objnrImInhalt( inhalt, denkmale, countInhalt, foundObjnrDatei) if (foundObjnrDatei == False) and (inhaltVorhanden == True): # Versuch 3.2.: Adresse(n) aus Datei-Inhalt extrahieren dictObjnr, countInhalt, foundObjnrDatei = objnrDurchAdresseImInhalt( inhalt, deutsch, behoerden, denkmalStrasse, denkmaleAdresse, denkmalHausnr, denkmaleObjNr, denkmalSachbegriff, denkmalName, countInhalt, foundObjnrDatei) try: saveObjnr(root, dictObjnr, file) except: return dictObjnr, inhaltMitPfad, countDateiname, countInhalt, foundObjnrDatei, inhaltVorhanden return dictObjnr, inhaltMitPfad, countDateiname, countInhalt, foundObjnrDatei, inhaltVorhanden
def extrahierenAlleVorhaben_OROS(files, directory, directoryOrdnerStruktur, ontologie, methode): listeVorhaben = [] dateienVorhaben = [] preprocessedVorhaben = [] listeOrt = [] vorhabenDict = {} adresseVorhabenDict = {} for i in range(0, len(files)): if not os.path.isfile(directory + '\\' + files[i]): #print(files[i] + ' --> not in directory') continue pfadDatei = [files[i], directory] inhalt = extractText.getTextContent(pfadDatei, methode) if (inhalt == None) or (inhalt == ""): continue inhalt = inhalt.split('§')[0] vorhaben, delimit = getVorhaben(inhalt) if vorhaben == '': continue preprocVorhabenInit, [], [] = extractText.preprocessText(vorhaben) preprocVorhabenAdresse = [c for c in preprocVorhabenInit if c not in rex.getRegex(' '.join(preprocVorhabenInit)).adresseUnvollstaendig] preprocVorhaben = entfernenWennFürVorhabenGleichhueltig(preprocVorhabenAdresse) vorhOberbegriffe = [] for item in preprocVorhaben: if item in ontologie['words'].keys(): itemsList = [itemUpper.lower() for itemUpper in ontologie['words'][item]] vorhOberbegriffe.extend(itemsList) start_grundstück = inhalt.find("Grundstück") if start_grundstück != -1: index = len('Grundstück') + 1 else: start_grundstück = inhalt.find("Grundstücke") index = len('Grundstücke') + 1 delimLine = 0 adresseVorhaben = '' while len(adresseVorhaben) <= 1: adresseVorhaben = inhalt[start_grundstück+index:].split(delimit)[delimLine] delimLine += 1 # Es gab einen Delimiter vor dem eigentlichen Adresse #adresseVorhaben = inhalt[start_grundstück+index:].split(delimit)[onefurther] #if len(adresseVorhaben) <= 1: # # Es gab einen weiteren Delimiter vor dem eigentlichen Adresse # adresseVorhaben = inhalt[start_grundstück+index:].split(delimit)[1] adressenDict, dummy1, dummy2 = extractAdresse.getAddress(adresseVorhaben) #rex.getRegex(adresseVorhaben).adresseUnvollstaendig textCleanSpace = re.sub(' +', ' ', inhalt.replace('\n', ' ').replace('\t', ' ').replace('\r', ' ').rstrip()) datesList = helpers.convertDate(extractDatum.getDates(textCleanSpace)) adresseVorhabenDict = mergeVorhabenDicts(adressenDict, adresseVorhabenDict, vorhaben, preprocVorhaben, vorhOberbegriffe, files[i], datesList) vorhabenDict[directoryOrdnerStruktur] = adresseVorhabenDict return vorhabenDict # dateienVorhaben, listeVorhaben, preprocessedVorhaben, listeOrt
vorhabenScore = '' vorgang = '' inhalt = '' daten = [] adrDict = {} metadata = {pfad: {datei: {'objnr': objnr, 'adresse': adresse, 'denkmalname': denkmalname, 'sachbegriff': sachbegriff, \ 'objnrMethode': objnrMethode, 'behoerde': behoerde, 'vorhaben': vorhaben, 'vorhabenScore': vorhabenScore, \ 'vorgang': vorgang, 'daten': daten, 'inhalt': inhalt, 'adrDict': adrDict, 'pfadAktuell': dateidir}}} parser = 'tika' # 'docx' for item in metadataToExtract: print(item) if item == 'inhalt': # Inhalt extrahieren content: any = extractText.getTextContent(metadata, parser) metadata[pfad][datei]['inhalt'] = content if item == 'adresse': # Adresse identifizieren metadata[pfad][datei]['adrDict'], \ metadata[pfad][datei]['adresse'], adrName = relateAdresse.findAddress(metadata, parser) if item == 'objnr': # Objektnummer identifizieren metadata[pfad][datei]['objnr'], \ metadata[pfad][datei]['behoerde'], \ metadata[pfad][datei]['objnrMethode'] = relateObjnr.relateObjnr(metadata, parser) if item == 'daten': # Daten identifizieren metadata[pfad][datei]['daten'] = relateDatum.datum(metadata, parser)