GoGPT Best VPN GoSearch

Значок OnWorks

sim_c - Інтернет у хмарі

Запустіть sim_c у постачальника безкоштовного хостингу OnWorks через Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

Це команда sim_c, яку можна запустити в постачальнику безкоштовного хостингу OnWorks за допомогою однієї з наших численних безкоштовних робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

ПРОГРАМА:

ІМ'Я


sim - знайти схожість у C, Java, Pascal, Modula-2, Lisp, Miranda або текстових файлах

СИНТАКСИС


sim_c [ -[defFiMnpPRsSTv] -r N -t N -w N -o F ] файл ... [ [ / | ] файл ... ]
sim_c ...
sim_java ...
sim_pasc ...
sim_m2 ...
sim_lisp ...
sim_mira ...
sim_text ...

ОПИС


Sim_c читає файли C файл ... і шукає подібні сегменти тексту; два
сегменти тексту програми подібні, якщо вони відрізняються лише макетом, коментарем, ідентифікаторами,
а також вміст чисел, рядків і символів. Якщо є прогони достатньої довжини
знайдено, вони відображаються на стандартному виході; кількість значущих жетонів у пробігу
дається в квадратних дужках.

Sim_java робить те саме для Java, sim_pasc для Pascal, sim_m2 для Modula-2, sim_mira та цінності
Міранда і sim_lisp для Lisp. Sim_text працює з довільним текстом, і це іноді
корисно для сценаріїв оболонки.

Програму можна використовувати для пошуку скопійованих фрагментів коду, які нібито не пов'язані
програми (з -s or -S), або для пошуку випадково дубльованого коду у великих проектах
-f or -F).

Якщо роздільник / or | присутній у списку вхідних файлів, файли поділені на a
група "нових" файлів (перед / or |) і група «старих» файлів; якщо немає / or
|, усі файли "нові". Старі файли ніколи не порівнюються один з одним. Дивіться також
опис -s та -S варіанти нижче.

Оскільки тестеру подібності потрібні імена файлів, щоб визначити схожість, він не може прочитати
зі стандартного введення.

Є наступні варіанти:

-d Вихід знаходиться в а різниця(1)-подібний формат замість стандартного 2-стовпцевого формату.

-e Кожен файл порівнюється із кожним файлом ізольовано; це знайде всю схожість
між усіма задіяними текстами, незалежно від повторюваного тексту (див. `Обчислення
Відсотки" нижче).

-f Запуски обмежені сегментами з балансуючими дужками, щоб виділити потенціал
рутинні тіла (не в sim_text).

-F Назви процедур у викликах повинні точно збігатися (а не в sim_text).

-i Імена файлів для порівняння зчитуються зі стандартного введення, включаючи a
можливий роздільник / or |; імена файлів мають бути один до рядка. Цей варіант
дозволяє вказувати дуже велику кількість імен файлів; він відрізняється від @
можливість, яку надають деякі компілятори, оскільки вона обробляє лише імена файлів, і так
не розпізнати аргументи параметра.

-M Інформація про використання пам’яті відображається на стандартному виводі помилки.

-n Знайдені подібності підсумовуються за назвою файлу, положенням та розміром, а не
відображається повністю.

-o F Результат записується у файл з ім'ям F.

-p Вихід наведено у відсотках подібності; див. «Розрахунок відсотків» нижче;
мається на увазі -e та -s.

-P As -p але показаний лише основний внесок; має на увазі -e та -s.

-r N Встановлено мінімальну довжину пробігу N одиниці; за замовчуванням 24 маркери, за винятком в
sim_text, де це 8 слів.

-R Каталоги у вхідному списку вводяться рекурсивно та всі файли, які вони містять
беруть участь у порівнянні.

-s Вміст файлу не порівнюється з самим собою (-s для "не себе").

-S Вміст нових файлів порівнюється лише зі старими файлами, а не між ними
самі

-t N У поєднанні з -p or -P параметри, встановлює поріг (у відсотках) нижче
які схожості не повідомлятимуться; за замовчуванням дорівнює 1, за винятком в sim_text,
де 20.

-T Виходить більш стисла та однорідна форма випуску, яка може бути більш придатною для
подальша обробка.

-v Друкує номер версії та дату компіляції на стандартному виводі, а потім зупиняється.

-w N Використовується ширина сторінки N колони; за замовчуванням 80.

-- (Секретна опція, яка друкує вхідні дані так, як їх бачить засіб перевірки схожості, і
потім зупиняється.)

Команда -p параметр призводить до рядків форми
F складається з х % матеріалу G
це означає, що x % тексту F також можна знайти в G. Зауважте, що це відношення не є
симетричний; насправді цілком можливо, щоб один файл складався на 100% з тексту
інший файл, тоді як інший файл складається лише з 1 % тексту першого файлу, якщо
їх довжина досить різна. The -P (велика P) параметр показує основний внесок для
тільки кожен файл. Це спрощує ідентифікацію набору файлів A[1] ... A[n], де
також присутня конкатенація цих файлів. Поріг можна встановити за допомогою -t
варіант; Зауважте, що деталізацію розпізнаного тексту все ще регулюється -r
параметр або його за замовчуванням.

Команда -r Опція контролює кількість «одиниць», які складають пробіг. Для програм, які
порівняти код мови програмування, одиниця – це лексична лексема відповідної мови;
коментар і стандартний матеріал преамбули (включення файлу тощо) ігноруються, а всі рядки
вважаються однаковими. Для sim_text одиниця — це «слово», яке визначається як будь-яка послідовність
з однієї або кількох літер, цифр або символів понад 127 (177 вісімкових), (для розміщення
літери, такі як ä, ø тощо).
Sim_text приймає пробіл як звичайний текст.

Команда -s та -S параметри контролюють, які файли порівнювати. Вхідні файли розділені на два
групи, нові та старі. За відсутності цих параметрів керування програми порівнюють
файли таким чином (для 4 нових файлів і 6 старих):
новий / старий <- перший файл
1 2 3 4 / 5 6 7 8 9 10
|-----------/-----------
п 1 | c /
e 2 | куб.см /
w 3 | CCC /
4 | cccc /
другий / / / / / / / / / / / / /
файл -> 5 | cccc /
o 6 | cccc /
л 7 | cccc /
d 8 | cccc /
9 | cccc /
10 | cccc /
де cs представляють порівняння файлів, а / розмежування між новим і старим
файли.
Використання -s параметр зменшує це до:
новий / старий <- перший файл
1 2 3 4 / 5 6 7 8 9 10
|-----------/-----------
п 1 | /
е 2 | c /
w 3 | куб.см /
4 | CCC /
другий / / / / / / / / / / / / /
файл -> 5 | cccc /
o 6 | cccc /
л 7 | cccc /
d 8 | cccc /
9 | cccc /
10 | cccc /
Команда -S параметр зменшує це ще до:
новий / старий <- перший файл
1 2 3 4 / 5 6 7 8 9 10
|-----------/-----------
п 1 | /
е 2 | /
w 3 | /
4 | /
другий / / / / / / / / / / / / /
файл -> 5 | cccc /
o 6 | cccc /
л 7 | cccc /
d 8 | cccc /
9 | cccc /
10 | cccc /

Програми можуть обробляти імена файлів UNICODE під Windows. Це актуально лише під
-R опція, оскільки немає можливості дати імена файлів UNICODE з командного рядка.

ОБМЕЖЕННЯ


Повторювані введення є прокляттям перевірки подібності. Якщо у нас є файл, що містить 4
копії ідентичного тексту,
A1 A2 A3 A4
де цифри служать лише для розрізнення ідентичних копій, існує 8 ідентичностей:
A1=A2, A1=A3, A1=A4, A2=A3, A2=A4, A3=A4, A1A2=A3A4 і A1A2A3=A2A3A4. З них лише 3
мають значення: A1=A2, A2=A3 і A3=A4. А для таблиці з 20 ідентичних рядків
інше, не незвичайне в програмі, є 715 ідентифікаторів, з яких максимум 19
значущим. Повідомлення про всі 715 з них однозначно неприпустимо.

Щоб виправити це, пошук ідентичностей виконується наступним чином: Для кожної позиції в
тексту, знайдено найбільший сегмент, копія якого не перекривається в тексті
слідуючи йому. Про цей сегмент і його копію повідомляється, і сканування відновлюється на позиції
відразу після сегмента. Для наведеного вище прикладу це призводить до тотожностей A1A2=A3A4
і A3=A4, що цілком задовільно, і для N приблизно однакові сегменти 2 журнал N
надаються повідомлення.

Це також добре працює, коли чотири однакові сегменти знаходяться в різних файлах:
Файл 1: A1
Файл 2: A2
Файл 3: A3
Файл 4: A4
Тепер комбіновані сегменти, такі як A1A2, не зустрічаються, і алгоритм знаходить прогони A1=A2,
A2=A3 і A3=A4, загалом N-1 пробігає, все інформативно.

Розрахунок Відсотки
Наведений вище підхід не підходить для отримання відсотка вмісту файлу, який
можна знайти в іншому файлі. Це вимагає окремого порівняння кожної пари файлів
представлений ac у матрицях вище; це те, що -e варіант робить. Під -e
опція сегмент File1:A1, розпізнаний у File2, знову буде розпізнаний у File3 і
Файл 4. У наведеному вище прикладі він створює запуски
Файл1:А1=Файл2:А2
Файл1:А1=Файл3:А3
Файл1:А1=Файл4:А4
Файл2:А2=Файл3:А3
Файл2:А2=Файл4:А4
Файл3:А3=Файл4:А4
на загальну суму ½N(N-1) працює.

ЧАС І ПРОСТІР ВИМОГИ


Подбали про дотримання вимог часу всіх внутрішніх процесів (майже)
лінійні за довжиною вхідних файлів, використовуючи різні таблиці. Якщо, однак, є
недостатньо пам'яті для таблиць, вони відкидаються в порядку неважливості, під яким
умови, що алгоритми повертаються до своєї квадратичної природи.

Вимоги до часу є квадратичними за кількістю файлів. Це означає, що, наприклад,
один файл розміром 64 МБ обробляється набагато швидше, ніж 8000 файлів розміром 8 КБ.

Програма вимагає 6 байт пам'яті для кожного токена введення; 2 байти на новий рядок
(не коли робимо відсотки); і приблизно 76 байт для кожного знайденого запуску.

ПРИКЛАДИ


Виклик
sim_c *.c
виділяє дублікат коду в каталозі. (Корисно видаляти згенеровані файли
спочатку.) Дзвінок
sim_c -f -F *.c
можна визначити їх далі.

Дзвінок
sim_text -e -p -s новий/* / старий/*
порівнює кожен файл у new/* з кожним файлом у new/* і old/*, і якщо будь-яка пара має більше,
20% спільного, повідомляється цей факт. Зазвичай подібність 30% і більше є значною;
менше 20% - ймовірно, збіг; а між ними сумнівно.

Дзвінок
sim_text -e -n -s -r100 new/* "|" старий/*
порівнює ті самі файли та звітує про великі загальні сегменти. (В | може бути використаний як a
сепаратор замість / на системах, де / оскільки змінюється параметр командного рядка
інтерпретатор команд.)

Обидва підходи хороші для виявлення плагіату.

Використовуйте sim_c онлайн за допомогою служб onworks.net


Безкоштовні сервери та робочі станції

Завантажте програми для Windows і Linux

Команди Linux

Ad




×
реклама
❤️Робіть покупки, бронюйте або купуйте тут — безкоштовно, це допомагає зберегти послуги безкоштовними.