Есть спецы по Machine Learning и AI?
Как можно решить такую задачу: есть два комплекта HTML-файлов с почти одинаковым контентом, но разной версткой – назовем его training set, и один комплект в дизайне №1. Задача – получить для этого последнего комплекта набор файлов в дизайне №2 – назовем его for processing, используя знания, полученные из training set, в лучшем возможном виде.
В training set у каждой пары A и B есть фрагменты, которые можно назвать “шаблоном”, и фрагменты, которые можно назвать “данными”. Например, заголовок статьи – данные, а обертка вокруг него – шаблон. После обработки N файлов система должна определить где данные, а где – шаблон, причем как в дизайне №1, так и в дизайне №2, а также уметь распознавать данные в файлах в дизайне №1 из for processing, и вставлять их в соответствующие места шаблона дизайна №2 для каждого из файлов for processing.
Как это сделать?
Ниже рассуждения вслух, в фейсбуке сохраняю для себя. Если в теме – подключайтесь)
Первое, что приходит в голову, это переводить файлы в связанный список тегов и фрагментов текста как для дизайна№1, так и для его counterpart в дизайне №2. Затем искать одинаковые фрагменты максимальной длины во всех файлах дизайна №1 – эти фрагменты будут с большой вероятностью частью шаблона. Одинаковые фрагменты, стоящие рядом – объединять в один покрупнее, но при этом сохранять и составляющие кусочки. Получится такой набор деревьев, с вершинами, состоящими из тегов и букв, и корнями, состоящими из больших фрагментов, которые в обоих файлах одинаковые. Сделать это для всех оставшихся пар файлов, получить тучу подобных деревьев. Далее нужно обработать деревья и найти максимально крупные фрагменты, общие у большинства. Общие фрагменты в дизайне №1 будут предложены как шаблон, а различающиеся – как элементы данных.
Подобный анализ проводится и для дизайна №2.
Фрагменты, помеченные как данные, сопоставляются автоматически, так как по идее должно быть полное соответствие. Если в отдельных случаях нет полного соответствия, опираемся на большинство.
В итоге, для дизайна №1 и дизайна №2 у нас получаются две последовательности, состоящие из узлов “фрагмент шаблона” и “фрагмент данных”. Именуем последовательности, присваивая одинаковые имена фрагментам данных у последовательности для дизайна №1 и последовтаельности для дизайна №2. Шаблоны просто нумеруем.
Далее обрабатываем дизайн №1 у for processing, выделяя у него фрагменты, помеченные как шаблон у learning set. Если они идут в том же порядке, то между ними – данные. А они уже помечены, и собираем данные в порядке, заданном результатами обработки дизайна №2. Если какие-то фрагменты не находятся, то помечаем данные штуки для ручной обработки. Если какие-то данные не находятся – то просто забиваем.
Эти решения далее вручную корректируются аналитиком.
Но такой подход работать не будет, если learning set содержит списки переменной длины, такие как список товаров, например. Система не назовет дизайн №1 похожим для 10 товаров и для 20. Она получит последовательности “фрагмент шаблона” и “фрагмент данных” разной длины, и после обработки статистически получит какую-то одну последовательность. Теоретически, можно отдельным механизмом находить паттерны повторяющиеся, и как-то это помечать.
Вдруг кто-то знает готовые решения или подходы к решению задачи? Интересная тема ж.
