tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
608
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    kuscheltier kuscheltier ist offline Mitglied
    Registriert seit
    Mar 2004
    Beiträge
    17
    Hey und Hallo,

    Vorwort:
    vielleicht hat ja jemand von euch eine Idee wie ich das folgende Problem lösen kann/ könnte. Mein Arbeitgeber entwickelt eine Handelssoftware, wo in der Datenbank auch die Adressen der Kunden (Name, Strasse, PLZ, ... ) gespeichert werden.

    Die EU gibt in regelmäßigen Abständen eine Sanktionsliste im XML Format raus, die Adressdaten enhält. Diese in der XML enthaltenen Daten spiegeln Personen/ Unternehmungen nieder, mit denen man lieber keinen Handel betreiben sollte (z.B. Saddam Hussein, Bin Laden, ...) Jetzt soll ich ein Programm entwickeln mit den ich die Adressdaten aus der XML Datei gegen die Adressdaten unserer Software vergleichen muss, was soweit bis auf die eigentliche Prüfung nun auch fertig ist.


    Problembeschreibung:
    Mein Problem ist einfach jenes, dass die Daten in der XML Datei als auch die aus unserer Software ja seltens von den Anwendern genauso gepflegt werden.
    z.B.: Firmenname Ltd, Firmenname Ltd., Firmenname Limited für Firmenbezeichnungen oder Berlinerstrasse 1, Berliner Strasse 1, Berliner Str. 1 für Strassennamen

    Kennt jemand eine Methode/ Algorithmus wie ich zwei Zeichenketten miteinander auf Ähnlichkeit vergleichen kann. Diese Methode/ Algorithmus mir evtl. einen Zahlenwert zurückgeben zu wieviel Prozent die beiden Zeichenketten übereinstimmen.

    Oder überhaupt eine Anregung wie ich diesen Notwendigen Vergleich realisieren könnte bzw.wie ich da vorgehen könnte ?!

    MFG, Maik
     

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi,

    In den Einzelnen Felder hast du ja Stichworte "Ltd", "Firmenname",... diese Einzelnen Worte könntest du in den von euch gespeicherten Daten suchen.
    Dafür könntest du die IndexOf()-Methode der String-KLasse nutzen. Wenn dir diese -1 zurück gibt, ist das Wort in dem zu durchsuchenden String nicht enthalten.
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    kuscheltier kuscheltier ist offline Mitglied
    Registriert seit
    Mar 2004
    Beiträge
    17
    Das funktioniert theoretisch schon, aber praktisch ist es leider nicht. Problem ist ja nunmal das ich keine Möglichkeiten habe die Zeichenketten anhand eines festen "Trenners" zu spliten. Mal ist es ein . (Punkt), denn ein Freizeichen, denn ein - (Minus) ,...

    Aus der XML bekomme ich aktuell fast 6000 Sätze, einige Kunden von uns haben über 100.000 Adresseb. Wenn ich das nach deiner Idee umsetzen würde, würde das Programm Ewigkeiten laufen da ich das ganze eh nur iterieren kann mit allen Möglichen Varianten die es gibt...
     

  4. #4
    Registriert seit
    Mar 2001
    Ort
    München
    Beiträge
    4.785
    Soundex könnte helfen.

    Das ist ein Algorythmus der ähnlich klingende Wörter findet. Also auch ähnliche Zeichenketten.
    http://de.wikipedia.org/wiki/Soundex

    Du musst die bekommene Adresse in jeweils kleine Teile zerlegen. Diese Teile mit den Teilen der gespeicherten Adresse und den besten Soundex wert übernehmen.
    Wenn jedes Teil mit dem anderen Teil verglichen wurde errechne einen Durschnitts Soundex wert. Wenn der höher ist als von dir angegeben dann sollte der Kontakt gleich sein.

    Frag mich nicht nach der .net Soundex Implementierung. Ich weiss nur das es eine geben wird
     
    Erst wenn der letzte Programmierer eingesperrt...
    ...und die letzte Idee patentiert ist, werdet ihr merken, dass Anwälte nicht programmieren können.
    -------------------
    chris: hey Tom hast du eigentlich ne Freundin
    jdar: ich bin tutorials.de Mod!

  5. #5
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    Tztz Chris, kurz Googlen könntest aber schon: A SoundEx implementation in .NET
     
    With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
    Aaron Satie

    Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
    Captain Jean-Luc Picard, Stardate ~41294.5

    Tutorials.de chattet. Hier gibts auch .net Support ^^
    Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de

    (moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions

  6. #6
    kuscheltier kuscheltier ist offline Mitglied
    Registriert seit
    Mar 2004
    Beiträge
    17
    Danke schonmal für die Informationen aber habe da noch eine paar Verständnissfragen...

    Also mein Objekt besitzt die folgenden Eigenschaften PLZ, Ort, Land, Strasse, Name1, Name2, Name3. Das Objekt der XML Datei die Eigenschaften Zipcode, Country, City, Firstname, Lastname, MIddlename, Wholename. Daraus ist sicherlich erkennbar welche Werte ich miteinander vergleichen muss...

    Du musst die bekommene Adresse in jeweils kleine Teile zerlegen. Diese Teile mit den Teilen der gespeicherten Adresse und den besten Soundex wert übernehmen.
    Wenn jedes Teil mit dem anderen Teil verglichen wurde errechne einen Durschnitts Soundex wert. Wenn der höher ist als von dir angegeben dann sollte der Kontakt gleich sein.
    habe ich mal eine Verständnissfrage...

    DIesen zitierten Teil verstehe ich gerade nicht, könntest du mir dies evtl. nocheinmal anders (vielleicht mit den Eigenschaften Oben) ausschnittsweise erläutern wie du das meinst ?!


    MFG, Maik
     

  7. #7
    Registriert seit
    Mar 2001
    Ort
    München
    Beiträge
    4.785
    Zitat Zitat von Alexander Schuc
    Tztz Chris, kurz Googlen könntest aber schon: A SoundEx implementation in .NET
    Wieso sollte ich?

    Wäre Java oder Python das Thema gewesen hätte ich auch ein Link spendiert und nicht nur ein Begriff. Aber .net'ler dürfen nicht zu viel liebe von mir erwarten
     
    Erst wenn der letzte Programmierer eingesperrt...
    ...und die letzte Idee patentiert ist, werdet ihr merken, dass Anwälte nicht programmieren können.
    -------------------
    chris: hey Tom hast du eigentlich ne Freundin
    jdar: ich bin tutorials.de Mod!

  8. #8
    kuscheltier kuscheltier ist offline Mitglied
    Registriert seit
    Mar 2004
    Beiträge
    17
    Zitat Zitat von Christian Fein
    Wieso sollte ich?

    Wäre Java oder Python das Thema gewesen hätte ich auch ein Link spendiert und nicht nur ein Begriff. Aber .net'ler dürfen nicht zu viel liebe von mir erwarten
    Magst mir vielleicht auch meine Frage noch beantworten oder erläutern? Sofern du ein entsprechendes Java (oder auch C++) Tutorial hättest, könntest mir einen Link gerne mitteilen. Ich bin da nicht so und Java kann ich auch lesen/ programmieren. Nur das oben genannte Problem muss ich leider diesmal in C# realisieren...
     

  9. #9
    Registriert seit
    Mar 2001
    Ort
    München
    Beiträge
    4.785
    Nun ich meine wenn du eine Adresse / Namen hast:

    Gates Bill, Redmond, USA-Virginia

    dann teile deine Adresse mit einem gezielten

    Nur mal schemenhaft mit Python. Für Java / C# habe ich nach einem Fussball abend mit 2 Flachen Bier keinen Sinn mehr

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    adress = "Gates Bill, Redmond, Virginia, USA
    parts = adress.split(',| |;')
    results = []
    for p in parts:
         presults = []
         for s in soundexparts:
            presults.add(getSoundexResult(p,s))
         results.add(max(presults))
    end = sum(results) / len(results)

    so in etwa.
     
    Erst wenn der letzte Programmierer eingesperrt...
    ...und die letzte Idee patentiert ist, werdet ihr merken, dass Anwälte nicht programmieren können.
    -------------------
    chris: hey Tom hast du eigentlich ne Freundin
    jdar: ich bin tutorials.de Mod!

Ähnliche Themen

  1. Klassifizierung von Zeichenketten
    Von jenny1106 im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 06.03.10, 23:03
  2. Antworten: 10
    Letzter Beitrag: 14.11.07, 13:34
  3. Antworten: 5
    Letzter Beitrag: 12.06.06, 07:28
  4. Zeichenketten vergleichen...
    Von GuenniFD im Forum C/C++
    Antworten: 13
    Letzter Beitrag: 11.01.05, 13:17
  5. Zeichenketten formatieren
    Von BigBenny im Forum Javascript & Ajax
    Antworten: 7
    Letzter Beitrag: 13.08.03, 16:10