Per calcolare la somiglianza tra due documenti, creo un vettore di funzionalità contenente il termine frequenze. Ma poi, per il prossimo passo, non riesco a decidere tra "Cosine similarity" e "Hamming distance".somiglianza cosine vs distanza di Hamming
La mia domanda: hai esperienza con questi algoritmi? Quale ti dà risultati migliori?
In aggiunta a ciò: Potrebbe dirmi come codificare la similarità del coseno in PHP? Per distanza di Hamming, ho già il codice:
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));
}
Non voglio usare qualsiasi altro algoritmo. Mi piacerebbe solo avere un aiuto per decidere tra entrambi.
E forse qualcuno può dire qualcosa su come migliorare gli algoritmi. Otterrete risultati migliori se filtrate le parole di arresto o le parole comuni?
Spero che tu possa aiutarmi. Grazie in anticipo!
Grazie mille. :) Ma la soluzione di Mike (risposta selezionata) non è migliore? Il codice è più breve e sembra essere veloce come il tuo. Quali sono le differenze? – caw
La funzione di Mike non è esattamente esatta. Prova 'echo check (array ('a', 'b', 'c'), array ('a', 'b', 'c'));' Dovrebbe restituire 1 (cos (0)) ma la sua funzione restituisce 0,33. :( – Toto
La tua funzione è veramente corretta? Fornisce 0,71 per [1, 1, 1] e [1, 1, 0]. Ma http://www.miislita.com/searchito/binary-similarity-calculator.html dà 0,82?! È ancora necessario dividere il valore di somiglianza per la lunghezza del documento? – caw