Mi sono trovato in un problema analogo: avevo URL tutti di uno stesso sito e dovevo ragruppare li uguali. Ho risolto con un sistema a mappe: prendo gli URL, separe le Query, ordino le query, riallaccio Query e URL, riverifico congruenza, prendo gli URL, li confronto uno ad uno, verifico la similitudine percentuale, li collego ad una mappa per similitudine.
A questo punto è l'utente finale che deve impostare la vera somiglianza.

Per il tuo problema devi fare una cosa un po diversa:
[list=1][*]Caricare ogni pagina in una variabile PHP file_get_contents() [*]Rimuovere tutti i tag strip_tags() [*]Confrontare tutte le variabili embro a membro e una ad una per trovare la somiglianza percentuale con quelle già nel DB similar-text() [/list=1]

Per il confronto con silar-text, la parte più difficile, ti propongo la mia soluzione (lascia perdere il contesto che è completamente diverso)
Codice PHP:
function like($url) {
global 
$settings;
    
$url model_url($url);            # model_url() ordina i parametri dell'url dopo il ? ed elimina cose come 'http' e 'www'
    
$url2 model_url($urlfalse); # model_url() non ordina dopo il ? 
    
    
$sql query("SELECT id FROM " PREFIX "map WHERE address = '" $url "' LIMIT 1");
    if(
rows($sql) == 1) { $sql assoc($sql); return $sql['id']; } //No problems, subito trovato...
        
    
$url_array explode('?'$url); //Separo stringa e URL

    //Eseguo prima interrogazione: cerco pagine mappa che cotengono interrogazioni    
    
$sql query("SELECT id, address FROM " PREFIX "map WHERE address LIKE '" $url_array[0] . "%'");
        if(
rows($sql) != 0)
        {
            
/* Questa parte � abbastanza astrusa: lo scopo � trovare la maggiore corrispondenza possibile fra due URL per
            maggior numero di parametri; ovvero, ad esempio, localhost/page.php?a=1&b=2 � simile a localhost/page.php?a=1.
                1. Faccio un ciclo con tutti i possiili valori che assomigliano
                2. Separo Query e URL (imposto sempre come chiave array l'id per $sql)
                3. Il valore ottenuto entra in un ciclo dove separo tutti i parametri della query
                4. Se un valore non viene trovato, passo al valore di $sql successivo
                5. Se sono stati trovati e mi trovo all'ultimo valore possibile; imposto questa variabile come possibile. */
            
if($settings['queryaspage'] == 1)
            {
                while(
$fetch assoc($sql)) {
                    
$mii[$fetch['id']] = explode('?'$fetch['address']);
                        if(!empty(
$mii[$fetch['id']][1]))
                        {
                        
$mii[$fetch['id']] = $mii[$fetch['id']][1];
                        
$values[$fetch['id']] = explode('&'$mii[$fetch['id']]);
                            foreach((array)
$values[$fetch['id']] as $key => $value) {
                                if(! 
strstr($url_array[1], $value)) break;
                                elseif(
count($values[$fetch['id']])-== $key) {
                                    
$videor[$fetch['id']] = $fetch['address'];
                                }
                            }
                        }    
                }
            
            
/*
                PARTE CHE TI INTERESSA: CONFRONTO FRA STRINGHE MEMBRO A MEMBRO
            /*
            
            /* $videor contiene tutti i possibili valori reputati veri. Li analizzo con un contronto percentuale
            fra stringhe. La più simile corrisponde all'URL esatto. */
                
if(is_array($videor))
                {
                
$url_len strlen($url);
                    foreach((array)
$videor as $key => $value) {
                        
$value_len strlen($value);
                        
$is_it[$key] = similar_text($value$url);
                        if(
$value_len >= $url_len)
                            
$is_it[$key] = (100*$is_it[$key])/$value_len;
                        else 
$is_it[$key] = (100*$is_it[$key])/$url_len;
                    }
                    
$real_address max($is_it);
                    return 
$real_id array_search($real_address$is_it);
                }
            } else
            {
                while(
$fetch assoc($sql)) {
                    
$mii[$fetch['id']] = explode('?'$fetch['address']);
                    
$mii[$fetch['id']] = $mii[$fetch['id']][0];
                    if(
$url2 == $mii[$fetch['id']]) return $fetch['id'];
                }
            }    
        }    
    
//Se non esistono pagine simili, contenenti un'interrogazione, cerco almeno la pagina esatta.    
    
$sql assoc(query("SELECT id FROM " PREFIX "map WHERE address = '" $url "' LIMIT 1"));                        #PLUG
    
if(count($sql) == 1) return $sql['id'];
    
$sql assoc(query("SELECT id FROM " PREFIX "map WHERE address LIKE '" $url "' LIMIT 1"));                        #PLUG
    
if(count($sql) == 1) return $sql['id'];
    
        
return 
false;