Допустим, есть некоторое (большое) количество курсовых работ
(по технологии программирования) с исходными кодами. нужно определить, насколько похожи эти
исходники. т.е сравнить их на наличие одинаковых(или очень похожих похожих) кусков кода.
И на основе этого анализа, вывести, например коэффициент подобия или процент
подобия, или в каких именно работах найдены совпадения...
Иными словам нужно написать программу-aнaлизaтор кода для этого...
Искал в Инете, но ничего похожего не нашел..как приваили по словао "анализатор" понималось
что-то другое: компилятор, анализатор скрытых ошибок и т.д.
Может быть, у кого-нибудь есть идеи или советы...или какие-нибудь разработки....
буду благоарен любому помощи...
Здравствуйте, Mavlyudov, Вы писали:
M>Допустим, есть некоторое (большое) количество курсовых работ M>(по технологии программирования) с исходными кодами. нужно определить, насколько похожи эти M>исходники. т.е сравнить их на наличие одинаковых(или очень похожих похожих) кусков кода.
у нас такое есть готовое см FuzzySearch Library здесь
если хочешь экспериментировать — тогда смотри "расстояние редактирования"
Re[2]: 'анaлизaтор' программного кода
От:
Аноним
Дата:
24.04.06 21:26
Оценка:
Здравствуйте, Relayer, Вы писали:
R>у нас такое есть готовое см FuzzySearch Library здесь R>если хочешь экспериментировать — тогда смотри "расстояние редактирования"
спасибо...
т.е несколько исходников курсовых работ(в моем случае)
можно считать за текст, доускающий ошибки (текст с ошибками)....
или, как написано в описании это и есть апкроксимация соответствия строк.
В данном ситуации, думаю, будет целесообразно использовать такие функции,как
CompareStringFuzzy и CompareTextFuzzy..
а исхоников нет.. они только продаются..
P.S. на счет "расстояния редактирования".
использовал поисковик сайта. нашел наиболее интересное:
"алгоритм вычисления похожести строк"...
слышал еще про self organizing maps и разделение на кластеры...
Здравствуйте, Аноним, Вы писали:
А>спасибо... А>т.е несколько исходников курсовых работ(в моем случае) А>можно считать за текст, доускающий ошибки (текст с ошибками)....
Ушлые студенты перед сдачей очень часто меняют форматирование кода. Зачастую автоматическим форматтером, подкрутив у него code conventions. Если рассматиривать код как текст, расстояние редактирования будет плохой метрикой. Я бы предложил парсить код в AST и считать расстояние редактирования между двумя AST.
Miroff wrote: > Ушлые студенты перед сдачей очень часто меняют форматирование кода. > Зачастую автоматическим форматтером, подкрутив у него code conventions.
Всех перекинуть в k&r с помощью indent. > Если рассматиривать код как текст, расстояние редактирования будет > плохой метрикой. Я бы предложил парсить код в AST и считать расстояние > редактирования между двумя AST.
умные ушлые студенты переименовывают всё, что переименовывается и бьют
какую-нибудь процедуру в случайном месте.. Последнее, правда, требует
понимания программы, зато требует много сил для автоматического обнаружения.
Здравствуйте, Miroff, Вы писали:
M>Ушлые студенты перед сдачей очень часто меняют форматирование кода. Зачастую автоматическим форматтером, подкрутив у него code conventions. Если рассматиривать код как текст, расстояние редактирования будет плохой метрикой. Я бы предложил парсить код в AST и считать расстояние редактирования между двумя AST.
это все решается токенизацией и полным игнорированием форматирования
Здравствуйте, Аноним, Вы писали:
А>В данном ситуации, думаю, будет целесообразно использовать такие функции,как А>CompareStringFuzzy и CompareTextFuzzy..
CompareTextFuzzy. собственно оня для этого и писалась — выяснить насколько два фрагмента текста похожи друг на друга.
А>а исхоников нет.. они только продаются..
звыняй, но кушать то хочется
А>слышал еще про self organizing maps и разделение на кластеры...
ой... ты бы еще нейросети вспомнил хотя если есть год свободного времени — можно и это попробовать.
Здравствуйте, Mavlyudov, Вы писали:
M>Может быть, у кого-нибудь есть идеи или советы...или какие-нибудь разработки.... M>буду благоарен любому помощи...
Я делал так:
1) В эталонном исходнике выделял некоторые ключевые конструкции, характерные для данного автора
2) Составлял их них регулярные выражения
3) Парсил прочие работы в поисках совпадений