0

Я новичок в обучении машинам, но пытаюсь исследовать, если можно использовать машинное обучение для сравнения двух АСТ (абстрактное синтаксическое дерево) исходного кода, чтобы узнать, похожи они или нет.Изучение искровой машины Сравнение АСТ

В идеале, сделайте некоторую подготовку, используя некоторый набор данных и соберите любые два заданных АСТ, чтобы найти сходства.

Любые предложения здесь?

ответ

1

Кажется, вы ожидали, что алгоритм машинного обучения сделает тяжелый подъем обнаружения относительного «расстояния» между двумя АСТ. То, что вряд ли. Вместо этого вы можете рассмотреть общую структуру двух деревьев: имеют ли они одинаковое количество узлов на каждом уровне дерева. Если они делают - для значительного большинства дерева, по крайней мере - тогда вы могли бы пожелать, чтобы определить один из двух подходов для «метрики расстояния» между двумя деревьями:

  • количество различных узлов значений

  • относительная разница значений узлов - возможно, традиционное расстояние Левенштейна .. но, скорее, сравнение, которое понимает семантику конкретного языка, чтобы увидеть, насколько они похожи. Например. будучи в состоянии понять, что две структуры представляют один и тот же оператор, но потенциально с несущественными пробелами или другими отличиями форматирования. Или, может быть, разные имена переменных, но идентичные семантики.

  • Еще одна дополнительная проверка может определять, сколько поддеревьев одинаково. Тогда для расходящихся поддерев определят метрики пространства в состоянии найти структурные сходства/различия только для этого поддерева

Резюме не: «ничего из коробки для всей проблемы - но вы можете использовать существующие идеи/алгоритмы для конкретных локализованных случаев ".