Мне нужно объединить XML-файлы с различной структурой, используя PHP. Я делаю это;Объединить XML-файлы на основе сходства записей
- Прочитайте первый файл XML с помощью
simplexml_load_file()
- переформатировать элементы с использованием новой структуры с помощью
SimpleXMLElement()
класса - Сделайте то же самое для другого файла, увеличивающимся первый
SimpleXMLElement()
экземпляр - Сохранить вновь объединенный файл XML ,
Пока все хорошо. Сложная часть: первый файл имеет ок. 3000 записей, а второй файл - 5000. Почти 2000 из этих записей на самом деле одинаковы; просто, может быть, несколько букв отличаются. Как например; «Lenovo G50-70 CoreI5», а другой может быть «Lenovo G5070 I5».
Вопрос в том, как я могу сопоставить запись первого файла с равной записью второго файла; так что на самом деле это всего лишь одна запись в целом, в новом объединенном файле?
Я использую функцию similar_text()
функции PHP и SmithWatermanGotoh, чтобы рассчитать подобие, и это соответствует значению 86%; которого достаточно для меня. Но повторить все записи другого файла, чтобы соответствовать только одной записи, приходит совершенно неразумно и ресурс, потребляющий меня. Beucase означает ок. 7 Мбайт загруженного в память файла занимает минимум 15 000 итераций каждый раз, когда я сохраняю новый обновленный файл.
Я считаю, что нужно вставить все записи в таблицу базы данных и использовать Sphinx Search для сопоставления записей; но я не уверен, действительно ли это помогает.
Если проблема с памятью, могут помочь [генераторы] (http://php.net/manual/ro/language.generators.overview.php). – Andrew
Я думаю, что главная проблема здесь заключается в сложности 'similar_text()'. Если бы я был вами, я определяю набор правил для форматирования каждой записи уникальным способом, тогда вы можете легко найти дубликаты. –
@CasimiretHippolyte, я не мог практиковать ваше предложение четко, не так ли, пожалуйста? Кстати, есть те же самые записи, что и дубликаты; но есть также записи, которые на деле совпадают, но не точные дубликаты. Как и данный пример в вопросе. – Turab