Exemplo n.º 1
0
def getObjnrDirekt(inhalt, denkmale, zaehler, foundObjnr):
    
    resultDict = {} 
    
    objnr_aus_datei = rex.getRegex(inhalt).objnr

    if objnr_aus_datei:
        zaehler += 1
        foundObjnr = True
        methodInhalt = 'inhalt_direct'

        if len(objnr_aus_datei) == 1:
            final_objnr = [objnr_aus_datei[0]]
        else:
            final_objnr = [helpers.most_frequent(objnr_aus_datei)]


        objDemo = list(final_objnr)                     
        nameDemoD =[]
        sachDemoD = []
        for demoitemI in range(0,len(objDemo)):
            demoitem = objDemo[demoitemI]
            if demoitem not in denkmale.keys():
                demoitem +=',T'
            if demoitem in denkmale.keys():
                if denkmale[demoitem]['Denkmalname']:
                    nameDemoD.append(denkmale[demoitem]['Denkmalname'])
                if denkmale[demoitem]['Sachbegriff']:
                    sachDemoD.append(denkmale[demoitem]['Sachbegriff'])
                objDemo[demoitemI] = demoitem

        resultDict = {'treffer': {methodInhalt : [objDemo, sachDemoD, nameDemoD]}, 'hausnummer': 'notInquired', 'behoerde': [], 'method': methodInhalt}         
        
    return resultDict, foundObjnr, zaehler
Exemplo n.º 2
0
def getDates(text):
    date_dmy = rex.getRegex(text).datum_dmy
    date_ymd = rex.getRegex(text).datum_ymd

    dtList = []
    # timestampList = []

    if text == '':
        return dtList

    if date_dmy:
        # day month year found --> (' ', '16', '.', 'Februar', ' ', '2011')
        for i in date_dmy:
            day = i[1]
            month = i[3]
            year = i[5]

            dt = datumConv(day, month, year)
            dtList.append(dt)

    if date_ymd:
        # year month day found --> (' ', '2011', '-', '02', '-', '17')
        for i in date_ymd:
            year = i[1]
            month = i[3]
            day = i[5]

            dt = datumConv(day, month, year)
            dtList.append(dt)

    if dtList:
        if max(dtList) - min(dtList) > datetime.timedelta(days=365 * 10):
            dtList.remove(min(dtList))

        dtList = list(set(dtList))
    else:
        dtList = [datetime.datetime(year=1000, month=1, day=1)]

    return dtList
Exemplo n.º 3
0
def getAdresse(text, typoSpellcheck):

    #text = re.sub(r"([0-9]+(\.[0-9]+)?(\-?)?([0-9]+(\.[0-9]+)?))",r" \1 ", text).strip()
    text_split = text.split()
    text_corr = []
    for word in text_split:
        text_corr.append(
            re.sub('str$|str.$|straße$|staße$|stasse$', 'strasse',
                   word).lower())

    text = ' '.join(text_corr)

    text = text.replace('.', ' ').lower()
    adrName = rex.getRegex(text).adresseUnvollstaendig
    adresse = rex.getRegex(text).adresse

    adressen = {}

    if adresse:
        for adr in adresse:
            try:
                ##########################
                # find Hausnummer first considering differen constellation such as 4,10-14,10/14,10\14,10a-17b, 16a/18b ...
                hausNummerList = re.findall(
                    '\d+[A-za-z]?[\s]*[^a-zA-Z0-9,/]{0,3}[\s]*[\d]+\d[A-za-z]?|\d+',
                    adr)
                indexRemoveHausNummer = adr.find(hausNummerList[0])
                strassenName = adr[:indexRemoveHausNummer]
                strassenName = ' '.join(strassenName.split())
                # if multiple matches# mostly one match
                for i in range(len(hausNummerList)):
                    hausNummerList[i] = hausNummerList[i].lower()
                    if '-' in hausNummerList[i]:
                        hausNummerList[i] = hausNummerList[i].replace(
                            '---', '-').replace('- -', '-').replace(
                                '--', '-').replace('+', ',').replace(' ', '')
                    hausNummerList[i] = ' '.join(hausNummerList[i].split())
                    hausNummerList[i] = hausNummerList[i].replace(' ', ',')
                    if ',' in hausNummerList[i]:
                        hausNummerList.extend(hausNummerList[i].split(','))
                        hausNummerList.remove(hausNummerList[i])
                ##########################
                strassenName = corrAdresseTypo(strassenName, typoSpellcheck)
                #########################
                hausNummerList2 = []
                for hausNummer in hausNummerList:
                    if re.search(r'[-]\d{1,3}', hausNummer) and re.search(
                            r'[a-z]', hausNummer):
                        abc = list('abcdefghijklmnopqrstuvwxyz')
                        findDigit = re.findall('\d+', hausNummer)
                        findLetter = re.findall('[a-z]', hausNummer)
                        if len(list(set(findDigit))) == 1 and len(
                                list(set(findLetter))) == 2:
                            index1 = abc.index(findLetter[0])
                            index2 = abc.index(findLetter[1]) + 1
                            hausNummer2 = [
                                findDigit[0] + abc[i]
                                for i in range(index1, index2)
                            ]
                        else:
                            findDigitLetter = re.findall(
                                '\d+[a-z]', hausNummer)
                            for remElement in findDigitLetter:
                                hausNummer = hausNummer.replace(remElement, '')
                            findOnlyDigit = re.findall('\d+[^a-z^-]',
                                                       hausNummer)
                            hausNummer2 = list(set(findDigitLetter))
                            hausNummer2.extend(findOnlyDigit)
                        hausNummerList2.extend(hausNummer2)
                    elif re.search(r'-\d{1,3}$', hausNummer):
                        # Adresse beinhaltet mehrere Hausnummer: deshalb range aufsplitten und auflisten
                        hausNummerRange = hausNummer.rsplit(' ', 1)[-1].rsplit(
                            '-', 1)
                        if int(hausNummerRange[1]) - int(
                                hausNummerRange[0]) > 0:
                            nr_range = np.arange(int(hausNummerRange[0]),
                                                 int(hausNummerRange[1]) + 1)
                            hausNummer2 = [
                                item for item in nr_range.astype(str)
                            ]
                            hausNummerList2.extend(hausNummer2)
                            hausNummerList2.remove(hausNummer)
                    elif '-' in hausNummer:
                        indStrich = hausNummer.find('-')
                        hausNummerRange = [
                            hausNummer[:indStrich],
                            re.findall(r'\d+', hausNummer[indStrich + 1:])[0]
                        ]
                        if int(hausNummerRange[1]) - int(
                                hausNummerRange[0]) > 0:
                            nr_range = np.arange(int(hausNummerRange[0]),
                                                 int(hausNummerRange[1]) + 1)
                            hausNummer2 = [
                                item for item in nr_range.astype(str)
                            ]
                            hausNummerList2.extend(hausNummer2)
                    else:
                        hausNummerList2.append(hausNummer)
                #???hausNummerList = [hausNummer] if isinstance(hausNummer, str) else hausNummer
                hausNummerStr = ''.join(hausNummerList)
                if (strassenName in adressen) and (hausNummerStr
                                                   in adressen[strassenName]):
                    adressen[strassenName][hausNummerStr]['hausnummer'].extend(
                        hausNummerList2)
                else:
                    adressen[strassenName] = {
                        hausNummerStr: {
                            'hausnummer': hausNummerList2
                        }
                    }
            except:
                dummy = 99999

    elif adrName:
        for adn in adrName:
            if adn not in adressen:
                adressen[adn] = {'none': {'hausnummer': []}}

    for key in adressen.keys():
        for innerKey in adressen[key].keys():
            adressen[key][innerKey]['hausnummer'] = list(
                set(adressen[key][innerKey]['hausnummer']))

    return adressen, adresse, adrName
Exemplo n.º 4
0
def getAddress(textRaw: str):

    textString: str = re.sub("[a-zA-Z äÄöÖüÜß]+",
                             lambda ele: " " + ele[0] + " ", textRaw)
    text: str = textString.replace('\\', ' ').replace('\ ',
                                                      '').replace('_', ' ')

    typoSpellcheck: SpellChecker = getSpellcheck()

    text_split = text.split()
    text_corr = []
    for word in text_split:
        text_corr.append(
            re.sub('str$|str.$|straße$|staße$|stasse$', 'strasse',
                   word).lower())

    text = ' '.join(text_corr)

    text = text.replace('.', ' ').lower()
    adrName = rex.getRegex(text).adresseUnvollstaendig
    adresse = rex.getRegex(text).adresse

    adressen = {}

    if (type(adresse) is list) and (adresse):
        for adr in adresse:
            try:
                # TODO: "/" und "-" haben in der Adressenangabe unterschiedliche Bedeutungen. In diesem Skript
                # wird das aber noch nicht berücktichtigt
                adr = adr.replace('/', '-')
                strassenNameOrig = re.findall('([a-zA-Z äÄöÖüÜß-]*)\d*.*',
                                              adr)[0].rstrip()
                strassenName = re.sub('str$|str.$|straße$|staße$|stasse$',
                                      'strasse', strassenNameOrig)
                hausNummer = adr.replace(strassenNameOrig,
                                         '').replace(' ',
                                                     '').replace('.',
                                                                 ' ').lstrip()

                strassenName = corrAdresseTypo(strassenName, typoSpellcheck)

                if re.search(r'-\d{1,3}$', hausNummer):
                    # Adresse beinhaltet mehrere Hausnummer: deshalb range aufsplitten und auflisten
                    hausNummerRange = hausNummer.rsplit(' ',
                                                        1)[-1].rsplit('-', 1)

                    if int(hausNummerRange[1]) - int(hausNummerRange[0]) > 0:
                        nr_range = np.arange(int(hausNummerRange[0]),
                                             int(hausNummerRange[1]) +
                                             2)  # WARNINg: +1 probably right
                        hausNummer = [item for item in nr_range.astype(str)]

                elif '-' in hausNummer:
                    indStrich = hausNummer.find('-')
                    hausNummerRange = [
                        hausNummer[:indStrich],
                        re.findall(r'\d+', hausNummer[indStrich + 1:])[0]
                    ]

                    if int(hausNummerRange[1]) - int(hausNummerRange[0]) > 0:
                        nr_range = np.arange(int(hausNummerRange[0]),
                                             int(hausNummerRange[1]) +
                                             2)  # WARNINg: +1 probably right
                        hausNummer = [item for item in nr_range.astype(str)]

                hausNummerList = [hausNummer] if isinstance(
                    hausNummer, str) else hausNummer
                hausNummerStr = ''.join(hausNummerList)
                if (strassenName in adressen) and (hausNummerStr
                                                   in adressen[strassenName]):
                    adressen[strassenName][hausNummerStr]['hausnummer'].extend(
                        hausNummerList)
                else:
                    adressen[strassenName] = {
                        hausNummerStr: {
                            'hausnummer': hausNummerList
                        }
                    }
            except:
                pass
                dummy = 99999

    elif (type(adrName) is list) and (adrName):
        for adn in adrName:
            if adn not in adressen:
                adressen[adn] = {'none': {'hausnummer': []}}

    for key in adressen.keys():
        for innerKey in adressen[key].keys():
            adressen[key][innerKey]['hausnummer'] = list(
                set(adressen[key][innerKey]['hausnummer']))

    return adressen, adresse, adrName
Exemplo n.º 5
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