Ich muss anders strukturierte XML-Dateien mit PHP kombinieren. Was ich tue ist;Kombinieren Sie XML-Dateien basierend auf der Ähnlichkeit des Eintrags
- erste XML-Datei lesen
simplexml_load_file()
- Reformieren die Elemente eine neue Struktur mit
SimpleXMLElement()
Klasse - Machen Sie dasselbe für die andere Datei verwenden, Erhöhen der erste
SimpleXMLElement()
Instanz - Speichern Sie die neu kombiniert XML-Datei .
So weit so gut. Der schwierige Teil ist, erste Datei hat ca. 3000 Einträge und die zweite Datei hat 5000. Fast 2000 dieser Einträge sind eigentlich gleich; vielleicht unterscheiden sich ein paar Buchstaben. Wie zum Beispiel; "Lenovo G50-70 CoreI5" und die andere könnte "Lenovo G5070 I5" sein.
Die Frage ist, wie kann ich einen Eintrag der ersten Datei mit dem gleichen Eintrag der zweiten Datei übereinstimmen; so dass es eigentlich nur einen Eintrag in der neuen kombinierten Datei gibt?
Ich benutze beide similar_text()
Funktion von PHP und SmithWatermanGotoh, um Ähnlichkeit zu berechnen, und es matches mit einem Ergebnis von 86%; Das ist genug für mich. Aber das Iterieren aller Einträge der anderen Datei, um nur einem Eintrag zu entsprechen, ist für mich ziemlich unklug und ressourcenintensiv. Beucase bedeutet ca. 7MBs Datei in den Speicher geladen, die jedes Mal, wenn ich eine neue aktualisierte Datei speichere, mindestens 15.000 Iterationen durchführe.
Ich überlege, alle Einträge in eine Datenbanktabelle einzufügen und Sphinx Search zu verwenden, um Einträge zu finden; aber ich bin mir nicht sicher, ob es wirklich genug hilft.
Wenn Speicher ein Problem ist, können [Generatoren] (http://php.net/manual/ro/language.generators.overview.php) helfen. – Andrew
Ich denke, das Hauptproblem ist die Komplexität von 'ashite_text()'. Wenn ich Sie wäre, würde ich eine Reihe von Regeln definieren, um jeden Eintrag auf eine einzigartige Weise zu formatieren, dann können Sie die Duplikate leicht finden. –
@CasimiretHippolyte, ich könnte Ihren Vorschlag nicht klar üben, würden Sie bitte genauer? Übrigens, es gibt genau dieselben Einträge, auch Duplikate genannt; aber es gibt auch Einträge, die gleiche, aber nicht exakte Duplikate sind. Wie das angegebene Beispiel in der Frage. – Turab