möglichkeit für warscheinlichstes Suchergebnis

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Also ich hab gestern mal mit SOUNDEX rumgespielt und die Ergebnisse waren schonmal nicht schlecht. Dazu jetzt noch ein paar Verknüpfungen und Filter mit einbauen und dann wirds für den Anfang reichen. Wie sich das dann bei Städten mit richtig vielen Straßen verhält muss ich halt mal ausprobieren.
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Kann man nicht einen Spamfilter missbrauchen?
- von denen gibt es genug (auch mit python Anbindung)
- Doku / Beispiele sollten auch genug vorhanden sein

Ich hatte die Idee Bogofilter für ein (Web)Recherchetool zu verwenden.

cu Sebastian
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Du sprichst jetzt sicherlich von einem bayesschen Filter, oder nicht? Bayes-Filter "erkennen" Kontext, kein Wort was falsch geschrieben ist. Die Anwendungsgebiete sind völlig andere (zumindest im Normalfall).
--- Heiko.
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Da der Link zu dem Soundex Modul nicht mehr aktuell ist gibts hier einen Link zu einer compilierten Win32 Version.

www.python-forum.de/downloads/Levenshtein.pyd

Gruß
Damaskus
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Warum dann nicht get_close_matches aus dem Standardmodul difflib?
MfG
HWK
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

jens hat geschrieben:Theoretisch geht das auch mit Google-Maps, allerdings ist Deutschland noch nicht mit Strassen versehen...
Wie nicht mit Strassen versehen?
Also Strassenname sind drin und Routen planen ist doch auch möglich oder?

Gruss

PS: map.google.com hab ich nur in der Schweiz gebraucht, nicht Deutschland.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

rayo hat geschrieben:Wie nicht mit Strassen versehen?
Also Strassenname sind drin und Routen planen ist doch auch möglich oder?
Manchmal ist es recht hilfreich, sich einmal näher anzuschauen, wann der Beitrag erstellt wurde.
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Ach immer das doofe ausgraben :) tja dann wars wohl nichts

Gruss
Benutzeravatar
Kai Borrmann
User
Beiträge: 29
Registriert: Sonntag 7. Januar 2007, 09:11
Wohnort: Berlin

Damaskus hat geschrieben:Da der Link zu dem Soundex Modul nicht mehr aktuell ist gibts hier einen Link zu einer compilierten Win32 Version.

www.python-forum.de/downloads/Levenshtein.pyd

Gruß
Damaskus
Danke für den Tipp.

Nun habe ich sie in das Verzeichnis C:\Python25\Lib\site-packages runtergeladen.

Wie bekomme ich diese Datei dann zum Laufen?

Wenn ich draufklicke, kommt nur Buchstabensalat, es wird also wohl anders zu machen sein?
Dr. Kai Borrmann
Sperlingsgasse 1
10178 Berlin
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

``import Levenshtein``
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
OldBoy
User
Beiträge: 41
Registriert: Samstag 12. Januar 2008, 20:39

Hier 2 Loesungen in Standard-Python:

Code: Alles auswählen

def dist_lev(a, b):
    """
    Calculates the Levenshtein distance between a and b.
    Written by Magnus Lie Hetland (hetland.org)
    """
    n, m = len(a), len(b)
    if n > m:
        a,b = b,a
        n,m = m,n

    current = range(n+1)
    dummy = [n] * (n+1)
    for i in range(1,m+1):
        previous =  current
        current = dummy[:]
        current[0] = i
        for j in range(1, n+1):
            add = previous[j]+1
            delete = current[j-1]+1
            change = previous[j-1]
            if a[j-1] != b[i-1]: change += 1
            current[j] = min(add, delete, change)
            
    return current[n]

def dist_ratio(a, b):
    s = difflib.SequenceMatcher(None, a, b)
    return s.ratio()
z.B.

Code: Alles auswählen

>>> a = 'Meier'
>>> b = 'Mayer'
>>> dist_lev(a,b)
2
>>> dist_ratio(a,b)
0.59999999999999998
>>> dist_lev(a,a)
0
>>> dist_ratio(a,a)
1.0

Noch ein paar Tipps:
  • - vor dem Vergleich die Texte normalisieren
    (Gross-/Kleinschreibung, Sonderzeichen, Vereinheitlichung ( St/Str/Strasse))
    - bei langen Namen duerfen auch die Abweichungen groesser sein
    - anwendungsspezifische Sonderfaelle pruefen
    (z.B: Alleestr./Allerstr. in Essen, Iran/Irak bei Laendern)
Wer konkrete Hilfe braucht, kann sich gerne per PN an mich wenden. Ich habe dies Aufgabenstellung in den letzten Jahren intensiv im Bereich Laenderangabe/Region/Telefongesellschaft bearbeitet.

Gruss

OldBoy
Antworten