SERPland Blog

PL/SQL Programm: Ort Erkennung - Auseinandertrennen von Ortschaften aus einem String

· 1001 words · 5 minutes to read

-- Auseinandertrennen von Ortschaften aus einem String – Beispiel String: “St. Arbogast, Götzis/St. Gallenkirch/St. Gerold” – Soll Resultat1 : St. Arbogast – Soll Resultat1 : Götzis – Soll Resultat1 : St. Gallenkirch – Soll Resultat1 : St. Gerold

create table mig2005_temp_orte (item_nr number ,item_jahr number ,item_semester varchar2(20) ,ausb_ort varchar2(200) ,ort_oid number ,ort_name varchar2(200) )

declare cursor cAusb is select a.item_nr, a.item_jahr, a.item_semester – , a.ausb_ziel , a.ausb_schule , a.ausb_ort from tabelle_ausb a where 1=1 and rownum <35 –test and ausb_ort like ‘%Arb%/%/%’ –test – order by a.ausb_ort ; –*************************************************************************** vOrt varchar2(200); vSonder varchar2(1) := ‘$’; vLastPos pls_integer; vPos pls_integer; vLoopCount pls_integer; vString varchar2(200); vTemp varchar2(200); vAnzahlSonderzeichen pls_integer; vOrtLookupOid number; istErstesMalGefunden boolean; istMehrfachGefunden boolean; –*************************************************************************** function glb_ort_lookup(pString in varchar2) return number is nextVersuch boolean := false; rHauptort glb_hauptorte_vie%ROWTYPE; vCountMatch pls_integer := 0; vCountFehler pls_integer := 0; vOrtOid number; begin nextVersuch := false; –init «LookupOrte» begin select * into rHauptort from glb_hauptorte_vie where ort_name = pString ; dbms_output.put_line(’[1] Match: ’ ||pString); vCountMatch := vCountMatch +1; vOrtOid := rHauptort.ort_oid; exception when too_many_rows then nextVersuch := true; when others then dbms_output.put_line(’[1] Fehler: ’ ||pString ||’ ==> ’ ||SQLERRM ); vCountFehler := vCountFehler +1; vOrtOid := -1; end LookupOrte; –

if nextVersuch then «LookupOrteMitKanton» begin select * into rHauptort from glb_hauptorte_vie where ort_name = pString and kanton is not null ; dbms_output.put_line(’[2] Match: ’ ||pString); vCountMatch := vCountMatch +1; vOrtOid := rHauptort.ort_oid; exception when too_many_rows then dbms_output.put_line(’[2] Fehler: ’ ||pString ||’ ==> ’ ||SQLERRM ); vCountFehler := vCountFehler +1; vOrtOid := -999; when others then dbms_output.put_line(’[2] Fehler: ’ ||pString ||’ ==> ’ ||SQLERRM ); vCountFehler := vCountFehler +1; vOrtOid := -1; end LookupOrteMitKanton; end if; return vOrtOid; end glb_ort_lookup; –*************************************************************************** begin dbms_output.put_line(’————START————- ‘); for rAusb in cAusb loop – init für jede item_NR vOrtLookupOid := null; istErstesMalGefunden := false; istMehrfachGefunden := false; – Identifizieren Sonderzeichen welche Worttrennder darstellen vOrt := rAusb.ausb_ort; vOrt := replace(vOrt,’/’,vSonder); vOrt := replace(vOrt,’,’,vSonder); vOrt := replace(vOrt,’+’,vSonder); vOrt := replace(vOrt,‘u.’,vSonder); vOrt := replace(vOrt,‘und’,vSonder); – Blanks um die Sonderzeichen entfernen vOrt := replace(vOrt,’ ’ ||vSonder, vSonder); vOrt := replace(vOrt,vSonder ||’ ‘, vSonder); vOrt := replace(vOrt,’ ’ ||vSonder ||’ ‘, vSonder); – Ermitteln wieviele Sonderzeichen enthalten sind. vTemp := TRANSLATE(UPPER(vOrt) ,‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ .ÄÖÜÉÀÈ’ ,’############################################’); vTemp := REPLACE(vTemp,’#’); vAnzahlSonderzeichen := LENGTH(vTemp); if vAnzahlSonderzeichen >0 then ———————————————————————– – Mit Sonderzeichen, also mehrfache Ortsbezeichnungen ———————————————————————– dbms_output.put_line(’********************************************* ‘); dbms_output.put_line(‘AusbOrt: ’ ||vOrt); dbms_output.put_line(‘Anzahl Sonderzeichen :’ ||vAnzahlSonderzeichen); – –Am schluss des Ausbildungsort noch künstlich ein Sonderzeichen zufügen. vOrt := vOrt ||vSonder; vAnzahlSonderzeichen := vAnzahlSonderzeichen +1; –Init vLastPos := 1; vPos := 1; vLoopCount := 0; «SonderzeichenSucher» for i in 1..vAnzahlSonderzeichen loop vLoopCount := vLoopCount +1; vPos := instr(vOrt,vSonder,vLastPos+1); –ab der letzt aktuellen Position(+1) ein Sonderzeichen suchen if vPos >0 then dbms_output.put_line(’———————’); dbms_output.put_line(‘Loop : ’ ||vLoopCount); dbms_output.put_line(‘Pos : ’ ||vPos); dbms_output.put_line(‘LastPos: ’ ||vLastPos); vString := substr(vOrt,vLastPos,vPos-vLastPos); vString := replace(vString,vSonder); dbms_output.put_line(‘String : ’ ||vString); vLastPos := vPos; ——————————.——————– – Verarbeitung der aufgefundenen Strings (ort) – Wird nur einer als Ort erkannt (Lookup ist erfolgreich – erfogt) so wird dieser als Ausbildungsort genommen. ————————————————— vOrtLookupOid := glb_ort_lookup(vString); – if vOrtLookupOid > 0 – ort gefunden and NOT istErstesMalGefunden – noch nicht das 1.mal gefunden then dbms_output.put_line(‘Ort Lookup für String Nr. ’ ||vLoopCount ||’ 1. korrektes Auffinden ‘); istErstesMalGefunden := true; – elsif vOrtLookupOid > 0 – ort gefunden and istErstesMalGefunden – das 1. mal ist bereits aufgefunden then dbms_output.put_line(‘Ort Lookup für String Nr. ’ ||vLoopCount ||’ anderer Ort aus Ort-String bereits aufgefunden ‘); istMehrfachGefunden := true; – elsif vOrtLookupOid = -1 – (-1=no_data_found -999=too_many_rows) then dbms_output.put_line(‘Ort Lookup für String Nr. ’ ||vLoopCount ||’ NO_DATA_FOUND’); – elsif vOrtLookupOid = -999 – (-1=no_data_found -999=too_many_rows) then dbms_output.put_line(‘Ort Lookup für String Nr. ’ ||vLoopCount ||’ TOO_MANY_ROWS’); end if; —————— if istErstesMalGefunden and NOT istMehrfachGefunden then dbms_output.put_line(’…. INSERT IN Tabelle ….’); – INSERT INTO mig2005_temp_orte else dbms_output.put_line(’…. KEIN Insert in Tabelle da unklar …. ‘); end if; —————— end if; –Pos>0 end loop; –über Ortliste mit Sonderzeichen else ———————————————————————– – Keine Sonderzeichen, also normale einzelne Ortsbezeichnung ———————————————————————– dbms_output.put_line(’==============================================’); dbms_output.put_line(‘AusbOrt: ’ ||vOrt); vOrtLookupOid := glb_ort_lookup(vOrt); dbms_output.put_line(’…. INSERT IN Tabelle ….’); – INSERT INTO mig2005_temp_orte dbms_output.put_line(vOrtLookupOid); end if; end loop; dbms_output.put_line(’————ENDE————- ‘); –dbms_output.put_line(‘Match : ’ ||vCountMatch); –dbms_output.put_line(‘Fehler : ’ ||vCountFehler);

end;


Update 2024

Das PL SQL-Programm zur Ortserkennung und Auseinandertrennung von Ortschaften aus einem String, das im Jahr 2011 erstellt wurde, könnte immer noch relevant sein und gültige Ergebnisse liefern, wenn es heute im Jahr 2024 verwendet wird. Die grundlegende Funktionalität zur Trennung von Ortsnamen aus einem String bleibt wahrscheinlich unverändert, da die Logik der Ortsnamenidentifizierung in der Regel stabil ist.

Im Jahr 2024 könnte das PL SQL-Programm zur Ortserkennung möglicherweise aktualisiert oder optimiert worden sein, um den neuesten Anforderungen gerecht zu werden. Es könnte Anpassungen an Änderungen in der Datenstruktur oder den Eingabeformaten vorgenommen worden sein, um die Genauigkeit und Effizienz der Ortsnamenerkennung zu verbessern.

Es ist wahrscheinlich, dass das Programm weiterhin in der Datenbank von Unternehmen oder Organisationen verwendet wird, die Ortsdaten verarbeiten und Informationen aus Texten extrahieren müssen. Die Methode zur Identifizierung von Ortsnamen aus einem Text könnte mit der Zeit verbessert worden sein, um eine präzisere und schnellere Verarbeitung zu ermöglichen.

Im Jahr 2024 werden PL SQL-Programme immer noch in der Datenbankentwicklung eingesetzt, um komplexe Datenverarbeitungsaufgaben zu automatisieren und die Effizienz von Datenbankabfragen zu verbessern. Der Einsatz von PL SQL zur Ortsnamenerkennung könnte auch in Zukunft relevant bleiben, insbesondere für Unternehmen, die geografische Daten verwalten und analysieren.

Es ist möglich, dass neue Technologien wie maschinelles Lernen oder künstliche Intelligenz in die Ortsnamenerkennung integriert wurden, um die Genauigkeit der Ergebnisse weiter zu steigern. Durch den Einsatz moderner Technologien könnte die Effizienz des Programms verbessert und die Fehlerquote reduziert worden sein.

Insgesamt könnte das PL SQL-Programm zur Ortserkennung auch im Jahr 2024 eine wichtige Rolle in der Datenverarbeitung spielen und weiterhin von Entwicklern genutzt werden, um Ortsdaten aus Texten zu extrahieren und zu analysieren.

In conclusion, the PL SQL program for location recognition and separation of locations from a string created in 2011 may still be valid and relevant in the year 2024, with possible updates and enhancements to adapt to current requirements and technologies in data processing and analysis.