Buongiorno,
avrei bisogno di trovare il modo di estrarre il campo ID da un file xml e se nel campo testuale c'è il testo "simile" (in cui magari cambiano solo da 1 alle 4 parole) prelevare il suo campo Id e fallo puntare all' id del secondo XML creando una sorta di mappa fatta da id1=>id2 in cui al primo id corrisponde il secondo in cui c'è la stessa frase o leggermente diversa salvato in un txt.
Ho utilizzato PHP per estrarre i 2 XML e ho anche buttato tutto su un DB sql e così facendo ho trovato le stringhe uguali.
Ho provato a utilizzare poi cose come levenshtein, str_pos ecc. ma con scarsi risultati.
Gli XML hanno struttura simile e hanno da controllare 4956 record e hanno la seguente struttura:


codice:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DATAPACKET Version="2.0">
    <METADATA>
        <FIELDS>
                 <FIELD>
                 <FIELD>
                <FIELD>
                <FIELD>...

    </FIELDS>
        <PARAMS AUTOINCVALUE="5543"/>
    </METADATA>
    <ROWDATA>
        <ROW Id="1" Blocco="01001" Domanda="01" Risposta="TRUE" Capitolo="01" Indice="A01" Argomento="A" SubArgomento="1" Figura="" FiguraBlk="" Difficolta="3" Testo="............." Audio1="07001_70001" Info1="" Gruppo1="1256"/>

    </ROWDATA>
</DATAPACKET>
Ho provato levenshtein e finediff ma forse sono io che non riesco a farlo funzionare.
Qualcuno ha delle idee su come trovare le stringhe che si "assomigliano di più" tra due file? Ho già messo i file in array multidim con 3 campi, id,testo e risposta.
Dovrei provare a vedere se hanno campo Testo il più uguale possibile, e il valore di risposta(TRUE o FALSE) uguale. A questo punto stampo un file con ID_xml1=> ID_xml2.
Idee?

Qui di seguito il codice per trasformare xml in array e qualche tentativo:

codice:

if (file_exists('QQM2015.XML')) {


 //   $xml1 = simplexml_load_file('QQM2015.XML');
  //  $xml2 = simplexml_load_file('QQM2021.XML');


    $xml1 = "QQM2015.XML";
    $xml2 = "QQM2021.XML";
   /* $xml1 = "x1.XML";
    $xml2 = "x2.XML";*/
    xml_to_array($xml1,$xml2,$conn);


  //  echo(json_encode($arr_finale_xml1)."\r\n");  
    
} else {
    exit('Failed to open test.xml.');
}






function xml_to_array($xml1,$xml2,$conn){


    $content1 = utf8_encode(file_get_contents($xml1));
    $content2 = utf8_encode(file_get_contents($xml2));
    //$xmlfile = file_get_contents($xml1);
    $ob1= simplexml_load_string($content1);
    $ob2= simplexml_load_string($content2);
    $json1  = json_encode($ob1);
    $json2  = json_encode($ob2);
    $configData1 = json_decode($json1, true);
    $configData2 = json_decode($json2, true);
  //  echo "&lt;pre&gt;";
   $array_tot1=array();
   $array_id1=array();
   $array_rx1=array();
   $array_tot2=array();
   $array_id2=array();
   $array_rx2=array();


    for($i=0;$i<sizeof($configData1["ROWDATA"]["ROW"]);$i++){
        //echo(json_encode($configData["ROWDATA"]["ROW"][0]["@attributes"]["Testo"])."\n\r");
        array_push($array_tot1,$configData1["ROWDATA"]["ROW"][$i]["@attributes"]["Testo"]);
        array_push($array_id1,$configData1["ROWDATA"]["ROW"][$i]["@attributes"]["Id"]);
        array_push($array_rx1,$configData1["ROWDATA"]["ROW"][$i]["@attributes"]["Risposta"]);
    }


    for($m=0;$m<sizeof($configData2["ROWDATA"]["ROW"]);$m++){
        //echo(json_encode($configData["ROWDATA"]["ROW"][0]["@attributes"]["Testo"])."\n\r");
        array_push($array_tot2,$configData2["ROWDATA"]["ROW"][$m]["@attributes"]["Testo"]);
        array_push($array_id2,$configData2["ROWDATA"]["ROW"][$m]["@attributes"]["Id"]);
        array_push($array_rx2,$configData2["ROWDATA"]["ROW"][$m]["@attributes"]["Risposta"]);
    }


    


    
    $arr_finale_xml1=array();
    $arr_finale_xml2=array();


    for($j=0;$j<sizeof($array_tot1);$j++){
        $arr_fin1=array(
            "id"=>$array_id1[$j],
            "Testo"=>$array_tot1[$j],
            "Risposta"=>$array_rx1[$j]
        );


        array_push($arr_finale_xml1,$arr_fin1);
    }




    for($k=0;$k<sizeof($array_tot2);$k++){
        $arr_fin2=array(
            "id"=>$array_id2[$k],
            "Testo"=> $array_tot2[$k],
            "Risposta"=> $array_rx2[$k]
        );


        array_push($arr_finale_xml2,$arr_fin2);
    }




  finediff($conn,$arr_finale_xml1,$arr_finale_xml2);
 
    
}



function finediff($conn,$arr_finale_xml1,$arr_finale_xml2){
    $result=array();
    for($i=0;$i<sizeof($arr_finale_xml1);$i++){
        $t1= $arr_finale_xml1[$i]["Testo"];
        $t1rx= $arr_finale_xml1[$i]["Risposta"];
        $t1=str_replace(" ","",$t1);
     
        $arr_fin2=array();
        for($j=0;$j<sizeof($arr_finale_xml2);$j++){
            $t2=$arr_finale_xml2[$j]["Testo"];
            $t2rx= $arr_finale_xml2[$j]["Risposta"];
            $t2=str_replace(" ","",$t2);
          
            array_push($arr_fin2,$arr_finale_xml2[$j]);
         //   $diff_opcodes = FineDiff::getDiffOpcodes($t1, $t2);
            //$opcodes = FineDiff::getDiffOpcodes($arr_finale_xml1[$i]["Testo"], $arr_finale_xml2[$j]["Testo"],FineDiff::$wordGranularity);
            
           
            
        }
        $pippo=function ($a,$b) use ($t1){
                
            $pino=FineDiff::getDiffOpcodes($t1,$a["Testo"]);
            $pluto=FineDiff::getDiffOpcodes($t1,$b["Testo"]);
            $result1=countdiff($pino);
            $result2=countdiff($pluto);


            $differenza=$result1-$result2;
            return $differenza;
        };
        usort($arr_fin2,$pippo);
        file_put_contents("mappa_pippo.txt","'".$arr_finale_xml1[$i]["id"]."'=>". json_encode($arr_fin2[0]["id"]).PHP_EOL,FILE_APPEND);  
       
     //   if(!in_array($arr_fin2,$result)){
           // $result=array_slice($arr_fin2,0,5);
           // file_put_contents("mappa_pippo.txt", json_encode($result).PHP_EOL.PHP_EOL,FILE_APPEND);   
       // }
        
          
        
        
    }
}