def getObjNrAusPfad(root, files, denkmalStrasse, denkmaleAdresse, denkmalHausnr, denkmaleObjNr, denkmalSachbegriff, denkmalName, typoSpellcheck, behoerdenDict): folderDict = {} exceptions = 0 pfadString = re.sub("[a-zA-Z äÄöÖüÜß]+", lambda ele: " " + ele[0] + " ", root) pfadString = pfadString.replace('\ ', '').replace('_', ' ') adressenAusPfad, adresse, adrName = extractAdresse.getAddress(pfadString, typoSpellcheck) summaryDict = {} if adressenAusPfad: summaryDict = getObjnrAdresse(adressenAusPfad, denkmalStrasse, denkmaleAdresse, denkmalHausnr, denkmaleObjNr, denkmalSachbegriff, denkmalName, behoerdenDict) if (summaryDict) and ('exact_match_adresse' in summaryDict['method']): # Adresse wurde exact gefunden. Es wird davon ausgegangen, dass alle Dateien in dem Ordner zu dieser Adresse gehören folderDict['pfadtreffer'] = summaryDict folderDict['dateien'] = files else: # kein Exakter Adressenmatch im Pfad folderDict['pfadtreffer'] = {} folderDict['dateien'] = {} return folderDict
def preprocessText(text: str, adresseMode=False, locSearch=False): nlpsp = spacy.load('de_core_news_lg') # Alternative nltk: https://towardsdatascience.com/text-normalization-with-spacy-and-nltk-1302ff430119 # Überflüssige Leerzeichen im Text entfernen textCleanSpace = re.sub( ' +', ' ', text.replace('\n', ' ').replace('\t', ' ').replace('\r', ' ').rstrip()) adressen = [] if adresseMode: adressen = extractAdresse.getAddress(text) doc = nlpsp(textCleanSpace) all_stopwords = nlpsp.Defaults.stop_words lemmas_without_sw = getLemmaRemvStopPunct(doc, all_stopwords) # Remove empty strings tokensNotEmpty = [] for word in lemmas_without_sw: if len(word) >= 3: tokensNotEmpty.append(word.lower()) #tokens_without_sw = list(filter(None, tokens_without_sw)) locations = [] if locSearch: locations = list( set([ent.text for ent in doc.ents if ent.label_ in ['LOC']])) return tokensNotEmpty, adressen, locations
def objnrDurchAdresseImInhalt(inhalt, deutsch, behoerden, denkmalStrasse, denkmaleAdresse, denkmalHausnr, denkmaleObjNr, denkmalSachbegriff, denkmalName, count, foundObjnrDatei): adressen, adresseInhalt, strassennameInhalt = extractAdresse.getAddress( inhalt.replace('\\', ' ').replace('_', ' '), deutsch) #inhalt = inhalt.split('§')[0] dictResult_singleInhalt = {} if adressen: dictResult_singleInhalt = getObjnr.getObjnrAdresse( adressen, denkmalStrasse, denkmaleAdresse, denkmalHausnr, denkmaleObjNr, denkmalSachbegriff, denkmalName, behoerden) if ('method' in dictResult_singleInhalt): deleteEmptyKey = [] for key in dictResult_singleInhalt.keys(): if key in ['method', 'behoerde']: continue #dictResult_singleInhalt = getObjnr.pruefenObBehoerde(dictResult_singleInhalt, key, behoerden) keepKey = [] keepKey2 = [] if (dictResult_singleInhalt[key]['treffer']['exact_match_adresse'] ): foundObjnrDatei = True keepKey = key elif (dictResult_singleInhalt[key]['treffer'] ['exact_match_strasse']): dictResult_singleInhalt, foundObjnrDatei, keepKey = getObjnr.pruefenGlaubwuerdigkeit( dictResult_singleInhalt, key, 'exact_match_strasse', inhalt, foundObjnrDatei) if (foundObjnrDatei == False) and (dictResult_singleInhalt[key]['treffer'] ['closest_match']): dictResult_singleInhalt, foundObjnrDatei, keepKey2 = getObjnr.pruefenGlaubwuerdigkeit( dictResult_singleInhalt, key, 'closest_match', inhalt, foundObjnrDatei) if (not keepKey) and (not keepKey2): deleteEmptyKey.append(key) if len(deleteEmptyKey) == len(dictResult_singleInhalt.keys()) - 2: # Keine gültigen Adressenkeys (= nur noch 'method' und 'behoerde' haben vielleicht eine Angabe) dictResult_singleInhalt['method'] = '' for keytopop in deleteEmptyKey: dictResult_singleInhalt.pop(keytopop) if (foundObjnrDatei == True): count += 1 return dictResult_singleInhalt, count, foundObjnrDatei
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 objnrDurchAdresseInDateiname(file, deutsch, denkmalStrasse, denkmaleAdresse, denkmalHausnr, denkmaleObjNr, denkmalSachbegriff, denkmalName, behoerdenDict, count, foundObjnrDatei): dateiName = re.sub("[a-zA-Z äÄöÖüÜß]+", lambda ele: " " + ele[0] + " ", file) dateiName = dateiName.replace('\ ', '').replace('_', ' ') adressenAusDateiName, adresseDateiname, strasseDateiname = extractAdresse.getAddress( dateiName, deutsch) summaryDictDatei = {} if adressenAusDateiName: summaryDictDatei = getObjnr.getObjnrAdresse( adressenAusDateiName, denkmalStrasse, denkmaleAdresse, denkmalHausnr, denkmaleObjNr, denkmalSachbegriff, denkmalName, behoerdenDict) summaryDictDatei, count, foundObjnrDatei = getObjnr.pruefenObExakt( summaryDictDatei, count, foundObjnrDatei) return summaryDictDatei, count, foundObjnrDatei
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