Lade...
 

CX_SYSTEM_OBJECT::CalculateNameVectorDistance

CX_SYSTEM_OBJECT::CalculateNameVectorDistance

231250
Beschreibung:

Diese Funktion bestimmt die - auf das Intervall (0...1) normierte - Distanz zweier Namensvektoren (STRING-Vektoren) zueinander und ist eine Generalisierung von CX_STRING::NormalizedDLDistance auf Vektoren von STRINGs. Im einfachsten Fall entspricht die errechnete Distanz der durchschnittlichen normalisierten DL-Distanz der der Stringpaare aus den Vektoren.

Konkret werden aus den beiden Vektoren die Stringpaare ermittelt, die zueinander die jeweils geringste normalisierte DL-Distanz aufweisen. Jeder String wird dabei exakt einem Stringpaar zugewiesen (wird also nicht mehrfach gewertet).

Hinweis: Durch die Suche der minimalen Distanz-Paare ist die Berechnung auch unabhängig von der Reihenfolge der STRINGs innerhalb des Vektors.

Falls beide Vektoren die gleiche Anzahl an Strings enthalten, dann wird die Distanz berechnet als:

Distance = SUM(normDLDistancePairs) / COUNT(normDLDistancePairs)

Falls einer der beiden Vektoren mehr Strings enthält, dann enthält dieser Vektor Strings, die keinem Stringpaar zugeordnet werden konnten. Diesen Strings kann eine Distanz von 1 zu dem leeren String "" zugeordnet werden. Da je nach Anwendungsfall eine unterschiedliche Gewichtung von nicht zugeordneten Strings gewünscht sein kann, lässt sich diese Gewichtung (≥ 0) für jeden der beiden Vektoren angeben, sodass eine andere Gewichtung verwendet werden kann, je nachdem aus welchem Vektor die Strings stammen, die keinem Stringpaar zugeordnet werden können. Wird eine Gewichtung von 0 angegeben, dann werden überschüssige Strings in der Distanzberechnung nicht berücksichtigt.

Die Formel wird für den generellen Fall im Nenner und Zähler um die errechnete Gewichtung der überschüssigen Strings erweitert:

Distance = (SUM(normDLDistancePairs) + (unmatchedStrings * unmatchedWeight)) / (COUNT(normDLDistancePairs) + (unmatchedStrings * unmatchedWeight))

Code-Beispiel:
"a" "b" Call(NormalizedDLDistance) // 1.0 "aa" "ab" Call(NormalizedDLDistance) // 0.5 // For single word vectors the distance is identical to NormalizedDLDistance ["aa"] ["ab"] 0 0 SystemObject Call(CalculateNameVectorDistance) // 0.5 // For multiple words the distance corresponds to the average distance between the word pairs ["a" "aa"] ["b" "ab"] 0 0 SystemObject Call(CalculateNameVectorDistance) // 0.75 (= (1.0 + 0.5) / 2) // Calculation is independent of the word ordering in the vector ["aa" "a"] ["b" "ab"] 0 0 SystemObject Call(CalculateNameVectorDistance) // 0.75 (= (1.0 + 0.5) / 2) // Number of words in vector can be different ["Homer" "Jay" "Simpson"] ["Bart" "Simpson"] 0 0 SystemObject Call(CalculateNameVectorDistance) // 0.375 (= (0 + 0.75) / 2) // The weight for unmatched words can be freely adjusted for each vector ["Homer" "Jay" "Simpson"] ["Bart" "Simpson"] 1 0 SystemObject Call(CalculateNameVectorDistance) // 0.583 (= (0 + 0.75 + 1) / (2+1)) ["Homer" "Jay" "Simpson"] ["Bart" "Simpson"] 2 0 SystemObject Call(CalculateNameVectorDistance) // 0.688 (= (0 + 0.75 + 2) / (2+2))

 

Stack
Stack Position Objekttyp Kurzbeschreibung
Stack(In) Top CX_AMOUNT Fehlergewichtung für nicht paarige Elemente aus zweitem Namensvektor (≥ 0)
  Top-1 CX_AMOUNT Fehlergewichtung für nicht paarige Elemente aus erstem Namensvektor (≥ 0)
  Top-2 VECTOR<STRING> Der zweite Namensvektor
  Top-3 VECTOR<STRING> Der erste Namensvektor
Stack(Out) Top CX_FLOAT Die Abweichung der beiden Vektoren als normalisierte Distanz im Intervall (0...1)
Funktionsaufruf: Call(CalculateNameVectorDistance)