Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Alternativen zu Soundex-Verfahren

Forumthread: Alternativen zu Soundex-Verfahren

Alternativen zu Soundex-Verfahren
Frank
Hallo,
ich habe eine Tabelle in der ich die Werte einer Spalte mittels Soundex auf Ähnlichkeit mit einem einzugebenden Wert in E2 abgleiche (enthaltene Werte und eingegebene Suchbegriffe sind immer in Englisch und E2 befindet sich auf dem gleichen Blatt wie die Daten).
Grundsätzlich klappt das ganz gut, allerdings liefert Soundex sehr schlechte bzw. ungenaue Ergebnisse, wenn der eingegebene Suchbegriff etwas länger ist oder Text am Anfang enthält, der nicht in der Spalte für den Abgleich enthalten ist (z.B. findet die Suche so für "Tom Meier" nichts, wenn in der Tabelle nur "Meier" eingetragen ist).
Kennt jemand einen Code, der hier feinere Ergebnisse (bei englischer Sprache) liefert oder mehr Möglichkeiten zur Anpassung bietet ? Vielleicht hat jemand auch schon mal mit Metaphone oder Levenshtein gearbeitet, dazu habe ich bisher noch keine VBA-Beispiele gefunden.
Freue mich über jeden Tipp !
Viele Grüße und vielen Dank im Voraus,
Frank
Anzeige
AW: Alternativen zu Soundex-Verfahren
05.08.2012 17:54:09
fcs
Hallo Tom,
es ist doch logisch, dass ein Wort bei phonetischem Vergleich nicht mehr als ähnlich betrachtet wird, wenn wie im Beispiel "Tom Meier" zu "Meier" 44% der Zeichen unterschiedlich sind.
ggf. solltest du deinen phonetischen Vergleich noch um eine Instring-/Teiltextsuche erweitern.
Oder eine Suche, die erst auf identisch prüft und dann auf enthält und als letze Variante dann ggf. enthält eines der der eingegeben Wörter. Ein einfache Variante kann man sicherlich per VBA realisieren. Aber bei fehlenden Buchstaben oder Buchstabendrehern braucht es schon eine vorgeschaltete Rechtschreibprüfung oder sehr ausgefeilte Vergleichsalgorythmen.
Gruß
Franz
Anzeige
AW: Alternativen zu Soundex-Verfahren
05.08.2012 18:15:51
Josef

Hallo Frank,
schau mal hier die Beispielmappe von Ransi. http://www.office-loesung.de/ftopic283167_0_0_asc.php
Allerdings funktionieren solche Vergleiche immer nur für ein einzelnes Wort und nicht für zusammengesetzte Wöter!

« Gruß Sepp »

Anzeige
AW: Alternativen zu Soundex-Verfahren
05.08.2012 18:33:09
Frank
Hallo Sepp,
vielen Dank !
Der Thread zu Double Metaphone in Deinem Link ist leider nicht mehr vollständig aktiv.
Hast Du eine Idee, wo man sonst noch Code-Beispiele dazu finden kann ?
Über Google war ich da bisher leider nicht erfolgreich.
Viele Güße,
Frank
AW: Alternativen zu Soundex-Verfahren
05.08.2012 18:43:21
Josef

Hallo Frank,
mit den Suchbegriffen "VBA Metaphone" liefert Tante Google über 200.000 Treffer, da musst du halt ein wenig stöbern.

« Gruß Sepp »

Anzeige
AW: Alternativen zu Soundex-Verfahren
05.08.2012 20:08:32
Frank
Hallo Sepp,
ich habe nach einigem Suchen folgenden Code gefunden - mir ist hier allerdings nicht klar, wie ich diesen konkret in meiner Tabelle anwende, wenn der Suchbegriff in E2 steht und dieDaten für den Abgleich in Spalte W.
Kann mir hier jemand weiterhelfen ?
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************
Option Explicit
Function mp(s1 As String, s2 As String) As Double
Dim t As String
Dim i As Long, n As Long
'ensure s1 is shorter string - remove if undesired
If Len(s1) > Len(s2) Then
t = s1
s1 = s2
s2 = t
End If
n = Len(s1)
i = 1
t = s1
'eliminate chars from s1 that aren't in s2
Do While i If InStr(s2, Mid(t, i, 1)) > 0 Then
i = i + 1
Else
t = Left(t, i - 1) & Mid(t, i + 1)
n = n - 1
End If
Loop
mp = mpr(t, s2) / CDbl(Len(s1))
End Function
'call this only from mp() and recursively to give the
'number of chars in s1 matching chars in order in s2
'
Private Function mpr(ByVal s1 As String, s2 As String) As Long
Dim i As Long, n1 As Long, p As Long, q As Long, m As Long
n1 = Len(s1)
q = 1
'find each char from s1 in substrings of s2 to
'the right of the previously matched char in s2
For i = 1 To n1
p = InStr(q, s2, Mid(s1, i, 1))
If p > 0 Then q = p + 1 Else Exit For
Next i
If i > n1 Then
'if the For-loop above completed, i = n1 + 1 AND all
'chars in s1 were found in s2 in order, so all done
mpr = n1
Else
'no joy, time for recursion with substrings of s1
For i = 1 To n1
m = mpr(Left(s1, i - 1) & Mid(s1, i + 1), s2)
If m > mpr Then mpr = m 'store longest match found
If mpr = n1 - 1 Then Exit For 'if longest substring matches, all done
Next i
End If
End Function
Viele Grüße ,
Frank
Anzeige
AW: Alternativen zu Soundex-Verfahren
05.08.2012 20:10:51
Josef

Hallo Frank,
da währe eine Beispieltabelle mit Beschreibung hilfreich.

« Gruß Sepp »

Anzeige
AW: Alternativen zu Soundex-Verfahren
05.08.2012 20:11:01
Josef

Hallo Frank,
da währe eine Beispieltabelle mit Beschreibung hilfreich.

« Gruß Sepp »

Anzeige
;
Anzeige

Infobox / Tutorial

Alternativen zu Soundex-Verfahren in Excel


Schritt-für-Schritt-Anleitung

  1. Vorbereitung der Tabelle: Stelle sicher, dass Deine Daten in einer Spalte (z.B. Spalte W) stehen und der Suchbegriff in Zelle E2 eingegeben wird.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Modul erstellen: Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.

  4. Code einfügen: Kopiere den folgenden Code in das Modul:

    Option Explicit
    Function mp(s1 As String, s2 As String) As Double
       Dim t As String
       Dim i As Long, n As Long
       If Len(s1) > Len(s2) Then
           t = s1
           s1 = s2
           s2 = t
       End If
       n = Len(s1)
       i = 1
       t = s1
       Do While i < n + 1
           If InStr(s2, Mid(t, i, 1)) > 0 Then
               i = i + 1
           Else
               t = Left(t, i - 1) & Mid(t, i + 1)
               n = n - 1
           End If
       Loop
       mp = mpr(t, s2) / CDbl(Len(s1))
    End Function
    
    Private Function mpr(ByVal s1 As String, s2 As String) As Long
       Dim i As Long, n1 As Long, p As Long, q As Long, m As Long
       n1 = Len(s1)
       q = 1
       For i = 1 To n1
           p = InStr(q, s2, Mid(s1, i, 1))
           If p > 0 Then q = p + 1 Else Exit For
       Next i
       If i > n1 Then
           mpr = n1
       Else
           For i = 1 To n1
               m = mpr(Left(s1, i - 1) & Mid(s1, i + 1), s2)
               If m > mpr Then mpr = m
               If mpr = n1 - 1 Then Exit For
           Next i
       End If
    End Function
  5. Funktion anwenden: Verwende die Funktion mp() in Deiner Excel-Tabelle, um die Ähnlichkeit zwischen E2 und den Werten in Spalte W zu überprüfen. Zum Beispiel: =mp(E2; W1).


Häufige Fehler und Lösungen

  • Fehler: Funktion gibt #NAME? zurück
    Lösung: Stelle sicher, dass Du die Funktion korrekt in die Zelle eingegeben hast und dass das VBA-Modul ordnungsgemäß gespeichert wurde.

  • Fehler: Ergebnisse sind ungenau
    Lösung: Überprüfe, ob die Daten in Spalte W korrekt formatiert sind und keine überflüssigen Leerzeichen enthalten.


Alternative Methoden

  • Metaphone: Eine phonetische Algorithmus-Alternative, die genauere Ergebnisse liefern kann. Du kannst nach "VBA Metaphone" suchen, um passende Codebeispiele zu finden.

  • Levenshtein-Distanz: Eine Methode, um die Ähnlichkeit zwischen zwei Zeichenfolgen zu berechnen. Es gibt viele Implementierungen im Internet, die Du in Excel verwenden kannst.


Praktische Beispiele

Angenommen, Du hast folgende Werte in Spalte W:

  • "Meier"
  • "Meyer"
  • "Meyerhoff"

Wenn Du "Tom Meier" in E2 eingegeben hast, kannst Du die Funktion wie folgt verwenden:

=mp(E2; W1) für "Meier"
=mp(E2; W2) für "Meyer"
=mp(E2; W3) für "Meyerhoff"

Diese Funktionen helfen Dir, die Ähnlichkeit zwischen dem Suchbegriff und den Daten zu analysieren.


Tipps für Profis

  • Kombiniere Algorithmen: Nutze verschiedene Algorithmen wie Soundex und Levenshtein gemeinsam, um die Genauigkeit zu erhöhen.

  • Erstelle eine benutzerdefinierte Funktion: Wenn Du häufig ähnliche Suchen durchführen musst, erstelle eine benutzerdefinierte Funktion, die alle Algorithmen kombiniert und das beste Ergebnis zurückgibt.


FAQ: Häufige Fragen

1. Was ist Soundex in Excel?
Soundex ist eine phonetic algorithm used for indexing names by sound, as pronounced in English.

2. Wie kann ich die Soundex-Funktion in Excel verwenden?
Die Soundex-Funktion kann über VBA implementiert werden, um Ähnlichkeiten zwischen Wörtern zu vergleichen.

3. Gibt es kostenlose Alternativen zu Soundex?
Ja, Algorithmen wie Metaphone oder Levenshtein sind hervorragende Alternativen, die Du verwenden kannst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige