Обнаружение паттернов в сегментах кода - PullRequest
0 голосов
/ 03 февраля 2011

С учетом двух или более образцов текста, в частности сегментов кода, каков наиболее эффективный способ определения различий образцов и формирования шаблона, соответствующего каждому образцу?

Например, приведены следующие примеры кода:

cd ~/workspaces/project/tmp1/bin
rsync --recursive --progress /data/local/documents* data

cd ~/workspaces/project/we32usZ/bin
rsync --recursive --progress /data/local/lib* data

cd ~/workspaces/project/oiususs/bin
rsync --recursive --progress /data/local/usr* data

Как бы я вывел этот шаблон (где $ varN обозначает переменную с подстановочными знаками)?

cd ~/workspaces/project/$var1/bin
rsync --recursive --progress /data/local/$var2* data

Мой первоначальный подход состоит в том, чтобы сравнивать два образца, сравнивая каждую i-ю букву до тех пор, пока не будет найдено различие, затем искать, где заканчивается «переменная» часть текста, а затем повторить это для других образцов. Однако это кажется очень неэффективным и, очевидно, предполагает, что тексты очень похожи с самого начала. Есть ли лучший способ?

1 Ответ

0 голосов
/ 02 марта 2011

Для примера, который вы упомянули, может помочь вариант множественного выравнивания последовательностей . В основном вы ищете консервативные подстроки во всех сегментах вашего кода с помощью динамического программирования.

...