Announcement

Collapse
No announcement yet.

Matchcode Generierung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Matchcode Generierung

    Hallo,
    ich beschäftige mich derzeit mit dem Vergleichen von Adressbeständen. Ist jemanden eine Routine bekannt, mit der ein Matchcode für die Dublettenprüfung erzeugt werden kann oder vielleicht ist auch jemand nur einfach Literatur zu dem Thema bekannt.

    Schönen Dank schon mal.
    Wolfgang

  • #2
    Hi,...<br>
    ich benötige ein paar mehr Infos.<br>
    Naja ich versuch es trotzdem ich hoffe ich treffe genau dein Problem. Angenommen man hat eine Tabelle in einer Datenbank mit dem Namen Adressen und möchte nun feststellen welche Daten Dubletten besitzen. <br>
    SELECT dummy1.ID, dummy1.Vorname, dummy1.Nachname
    FROM adressen AS dummy1
    WHERE 1 < (SELECT count(1) as Test From adressen as dummy2 where (dummy2.vorname = dummy1.vorname) and (dummy2.nachname = dummy1.nachname));<br>
    Wenn es nun drei Zeilen gibt in der Tabelle adressen mit dem Vornamen Wolfgang und dem Nachnamen Wendefeuer, dann würde diese abfrage alle drei Zeilen incl. ID liefern. Dann kann man selbst entscheiden welches der Vater Datensatz ist und die anderen ggf. löschen.<br>
    mfg<br>
    P

    Comment


    • #3
      Hallo Patrick,
      besten Dank für den Klärungsversuch, aber vielleicht war es wirklich etwas wenig Info von mir.
      Die direkten Vergleiche von Feldern (Vorname, Nachname, Strasse, Plz ... usw.) bringen nur einen gewissen Prozentsatz ca. 70% von Dubletten. Auch der Vergleich von nur den ersten Teilen von den Feldern ist nicht sehr viel mehr ergiebig. Was ist zum Beispiel bei "Juergen" und "Jürgen" oder Straßennamen "Karl-Marx-Straße" bzw. "Karl Marx Strasse"
      ich hoffe die Problematik wird nun etwas klarer.

      Gruß
      Wolfgan

      Comment


      • #4
        Das ist natürlich heikel. <br>
        Vorab: so was habe ich noch nicht gemacht ich schreibe mal kurz was mir ad hoc dazu einfällt.<br>
        Ich bezweifle zunächst das es einen Programmcode geben kann der alle etwaigen Fehler (es können ja auch Tippfehler existieren wie Jürgen und Jurgen) finden kann. Das heißt man hat immer eine Dunkelziffer an Dubletten, die man nicht finden kann. Finden kann man sie ggf. nur durch Menschenkraft (d.h. jemand tigert die Tabelle durch und sucht nach solchen "fehlerhaften" Dubletten).<br>
        Aber was hälst du von folgenden Lösungsansätzen:<br>
        Jeder Text wird in eine Funktion geschickt mit dem Namen Convert die als Ergebnis einen String liefert der die folgenden Eigenschaften hat: Convert"Karl-Marx-Straße" <br>
        -in dem übergebenen Text werden alle ü,ä,ö,ß umgewandelt zu ue,ae,oe,ss<br>
        -alle Sonderzeichen als auch Leerzeichen werden gelöscht so, daß nur noch Buchstaben a-z und A-Z in dem Text enthalten sind ggf. noch 1-0<br>
        -zu guter letzt wird ein upcase durchgeführt<br>
        <br>
        Resultat:<br>
        Convert"Karl-Marx-Straße" = KARLMARXSTRASSE<br>
        Convert"Karl Marx Strasse" = KARLMARXSTRASSE<BR>
        Convert"Jürgen" = JUERGEN<br>
        Convert"Juergen" = JUERGEN<br>

        Um Schreibfehler zu finden könnte man ggf. die zwei Strings vergleichen:<br>
        JUERGEN und JUERFEN<br>
        man vergleicht immer Text1[i] mit Text2[i] und wenn bei i = 8 7 Zeichen übereinstimmen ist es sehr wahrscheinlich, das es sich um ein und den selben Namen handelt jedoch mit einem Schreibfehler. Oder man vergleicht Text1[i] mit Text2[i] für i = 1 to length(text1) bis eine Unregelmäßigkeit auftritt. Dann vergleicht Text1[i] mit Text2[i] für i = length(text1) downto Unregelmäßigkeit. Damit kann man auch solche Fehler entdecken: JUERGEN und JURGEN<br>
        Solche Datensätze würde ich mir aber auf jeden Fall ausgeben lassen und selber entscheiden ob diese wirklich identisch sind oder nicht.

        Eine Funktion zum ersetzen solcher Zeichen (äöü) habe ich mal in diese Forum gesetzt muß man mal suchen unter Umlaute und so.
        Das ist alles was mir derzeit dazu einfällt. Falls dir das noch nicht weiterhilft, oder du noch andere aus diesem Forum zu diesem Thema hören willst ist es sehr wahrscheinlich am besten du setzt deine Frage nochmals ins Forum da eine Frage, zu der es schon Antworten gibt gerne übersprungen wird.<br>
        <br>
        Bis dann...<br>
        P

        Comment


        • #5
          Patrik,<br>
          Danke für die ausführliche Antwort. Das mit den Umlauten ist gelöst, das sind ja auch Basics. Deine Idee mit dem vergleichen der Buchstaben ist recht intressant, da werde ich mal genauer drüber nachdenken. Was mir in einem Bericht gelesen habe ist, das gute Systeme hier auch die häufigen Schreibfehler bei der generierung des Matchcodes berücksichtigen, da stand natürlich nicht wie das geht, aber als Beispiel wurde genannt, dass zum Beispiel das Zeichen "Y" immer mit "I" ersetzt wird, um eine vereinheitlichung der Schreibweise zu erreichen.
          <br>
          Mal sehen ob noch jemand was zu dem Thema weiss.....
          <br>
          gruss
          Wolfgan

          Comment


          • #6
            c't lesen hilft immer. Da war letztens ein phonetischer Algorithmus, der Kontext beruecksichtigt

            Comment


            • #7
              Ich wette es gibt zu Themen, die Dich Intressieren, in Büchern die ich lese, auch Hinweise und Tips, ich werde mir die Antwort merken.....
              <br>
              Wolfgan

              Comment


              • #8
                Hallo,

                zum Vergleich über eine unscharfe Suche verwende ich meistens den <b>Soundex</b>-Algorithmus. In meinem Buch <b>Client/Server Datenbankentwicklung mit Delphi</b> ist eine Anwendung zu finden, die den Soundex-Wert über eine mit Delphi entwickelte <b>UDF</b> (User Defined Function) direkt in der InterBase-Datenbank prüft (Trigger).

                Beim Soundex-Prinzip werden nur die relevanten Buchstaben gewichtet und in eine Zahl konvertiert - am Ende liegt ein 4 Zeichen grosser Soundex-Wert vor. Zum Beispiel ergeben D und T den gleichen Wert, doppelte Soundex-Werte werden gestrichen.

                Ergebnis: Die Schreibweisen <br>
                a) Schmitt <br>
                b) Schmied <br>
                c) Schmidt <br>
                ergeben alle den gleichen Soundex-Wert

                Comment


                • #9
                  Danke Herr Kosch,<br>
                  das Buch habe ich mir gestern noch besorgt und auch schon begonnen das entsprechende Kaitel zu lesen. Ist zwar leider für den falschen Server geschieben .. hi hi .. aber das stört nicht weiter bei diesem Probelem. Sonst ist es wohl ein Treffer. Danke.
                  <br>
                  Wolfgan

                  Comment


                  • #10
                    Herr Kosch,<br>
                    bei meinen Tests der Soundex Funktion ist mir aufgefallen, das Leerstrings zu fehlern führen. --- Nicht definierter Rückgabewert der Funktion --- Ich habe dieses behoben und dann läuft es wirklich schön.
                    Noch mal Danke.<br>
                    Wolfgan

                    Comment


                    • #11
                      Soundex wurde ja schon genannt. In der c't war vor Urzeiten mal ein Artikel zur Levenstein-Distanz (hoffentlich richtig geschrieben). Einfach mal die Suchmöglichkeiten des Heise-Servers nutzen und dann ggf. Artikel-Kopie nachbestellen oder Heft in der nächsten Uni-Bibliothek ansehen.

                      Jürge

                      Comment


                      • #12
                        Hallo,

                        ist SoundEx nicht für den englischen Sprachraum?

                        Wie sieht den das Regelwerk für den deutschen aus?

                        Gruß
                        Ral

                        Comment


                        • #13
                          Hallo Ralf,

                          Ich verwende das engl. soundex für den Import einer Bestell-Email wo eine Adresse angegeben ist, die Suche mit soundex in einem Datenbestand klappt hervoragend (ausschuss vieleicht 5%) wo er den Datensatz nicht findet und einen neuen Kunden anlegt.

                          ich tausche nur vorher ß -> ss , mache aus straße -> str und und und...

                          bis denne

                          Marti

                          Comment

                          Working...
                          X