Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
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
Example #5
0
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
Example #6
0
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