Um die Ähnlichkeit zwischen zwei Dokumenten zu berechnen, erstelle ich einen Merkmalsvektor, der den Begriff Frequenzen enthält. Aber dann kann ich mich für den nächsten Schritt nicht zwischen "Cosine similarity" und "Hamming distance" entscheiden.Kosinusähnlichkeit vs Hamming-Abstand
Meine Frage: Haben Sie Erfahrung mit diesen Algorithmen? Welcher gibt dir bessere Ergebnisse?
Zusätzlich dazu: Können Sie mir sagen, wie man die Cosinus-Ähnlichkeit in PHP codiert? Für Hamming Abstand habe ich bereits den Code:
function check ($terms1, $terms2) {
$counts1 = array_count_values($terms1);
$totalScore = 0;
foreach ($terms2 as $term) {
if (isset($counts1[$term])) $totalScore += $counts1[$term];
}
return $totalScore * 500/(count($terms1) * count($terms2));
}
Ich möchte keinen anderen Algorithmus verwenden. Ich möchte nur Hilfe haben, um zwischen beiden zu entscheiden.
Und vielleicht kann jemand etwas sagen, wie man die Algorithmen verbessern kann. Werden Sie bessere Ergebnisse erzielen, wenn Sie die Stoppwörter oder die allgemeinen Wörter herausfiltern?
Ich hoffe, Sie können mir helfen. Danke im Voraus!
Vielen Dank. :) Aber ist Mikes Lösung (ausgewählte Antwort) nicht besser? Der Code ist kürzer und scheint so schnell zu sein wie deins. Was sind die Unterschiede? – caw
Mike's Funktion ist nicht wirklich genau. Probiere 'echo check (Array ('a', 'b', 'c'), Array ('a', 'b', 'c'));' Es sollte 1 (cos (0)) aber seine Funktion zurückgeben gibt 0.33 zurück. :( – Toto
Ist Ihre Funktion wirklich richtig? Es gibt 0,71 für [1, 1, 1] und [1, 1, 0]. Aber http://www.mislita.com/searchito/binary-similarity-calculator.html gibt 0.82 ?! Ist es noch notwendig, teilen Sie den Ähnlichkeitswert durch die Dokumentlänge? – caw