Ini adalah perintah sim_mira yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS
PROGRAM:
NAMA
sim - temukan kesamaan dalam C, Java, Pascal, Modula-2, Lisp, Miranda, atau file teks
RINGKASAN
sim_c [ -[defFiMnpPRsSTv] -r N -t N -w N -o F ] berkas ... [ [ / | ] berkas... ]
sim_c ...
sim_java ...
sim_pasc ...
sim_m2 ...
sim_lisp ...
sim_mira ...
sim_teks ...
DESKRIPSI
Sim_c membaca file C fillet ... dan mencari segmen teks yang serupa; dua
segmen teks program serupa jika hanya berbeda dalam tata letak, komentar, pengidentifikasi,
dan isi angka, string dan karakter. Jika ada lintasan dengan panjang yang cukup adalah
ditemukan, mereka dilaporkan pada keluaran standar; jumlah token signifikan dalam proses
diberikan di antara tanda kurung siku.
Sim_java melakukan hal yang sama untuk Jawa, sim_pasc untuk Pascal, sim_m2 untuk Modula-2, sim_mira untuk
Miranda, dan sim_lisp untuk Lisp. Sim_teks bekerja pada teks arbitrer dan kadang-kadang
berguna pada skrip shell.
Program ini dapat digunakan untuk menemukan potongan kode yang disalin dalam konon tidak terkait
program (dengan -s or -S), atau untuk menemukan kode yang digandakan secara tidak sengaja dalam proyek yang lebih besar
(dengan -f or -F).
Jika pemisah / or | hadir dalam daftar file input, file dibagi menjadi a
sekelompok file "baru" (sebelum / or |) dan sekelompok file "lama"; jika tidak ada / or
|, semua file "baru". File lama tidak pernah dibandingkan satu sama lain. Lihat juga
deskripsi dari -s dan -S opsi di bawah ini.
Karena penguji kesamaan membutuhkan nama file untuk menunjukkan kesamaan, itu tidak dapat dibaca
dari masukan standar.
Ada opsi berikut:
-d Outputnya dalam diffFormat seperti (1) alih-alih format 2 kolom default.
-e Setiap file dibandingkan dengan setiap file secara terpisah; ini akan menemukan semua kesamaan
antara semua teks yang terlibat, terlepas dari teks berulang (lihat `Menghitung
Persentase di bawah).
-f Jalankan dibatasi untuk segmen dengan tanda kurung penyeimbang, untuk mengisolasi potensi
badan rutin (tidak dalam sim_teks).
-F Nama-nama rutinitas dalam panggilan harus sama persis (bukan di sim_teks).
-i Nama file yang akan dibandingkan dibaca dari input standar, termasuk a
pemisah yang mungkin / or |; nama file harus satu baris. Pilihan ini
memungkinkan sejumlah besar nama file untuk ditentukan; berbeda dengan @
fasilitas yang disediakan oleh beberapa kompiler karena hanya menangani nama file, dan tidak
tidak mengenali argumen opsi.
-M Informasi penggunaan memori ditampilkan pada output kesalahan standar.
-n Kesamaan yang ditemukan diringkas berdasarkan nama file, posisi dan ukuran, bukan
ditampilkan secara penuh.
-o F Outputnya ditulis ke file bernama F.
-p Output diberikan dalam persentase kesamaan; lihat `Menghitung Persentase' di bawah;
menyiratkan -e dan -s.
-P As -p tetapi hanya kontributor utama yang ditampilkan; menyiratkan -e dan -s.
-r N Panjang lari minimum diatur ke N unit; defaultnya adalah 24 token, kecuali di
sim_teks, di mana itu adalah 8 kata.
-R Direktori dalam daftar input dimasukkan secara rekursif, dan semua file yang dikandungnya
terlibat dalam perbandingan.
-s Isi file tidak dibandingkan dengan dirinya sendiri (-s untuk "not self").
-S Isi file baru dibandingkan dengan file lama saja - bukan antara
diri.
-t N Dalam kombinasi dengan -p or -P opsi, tetapkan ambang (dalam persen) di bawah
kesamaan mana yang tidak akan dilaporkan; defaultnya adalah 1, kecuali di sim_teks,
dimana 20.
-T Bentuk keluaran yang lebih singkat dan seragam dihasilkan, yang mungkin lebih cocok untuk
pengolahan pasca.
-v Mencetak nomor versi dan tanggal kompilasi pada keluaran standar, lalu berhenti.
-w N Lebar halaman yang digunakan diatur ke N kolom; defaultnya adalah 80.
-- (Opsi rahasia, yang mencetak input saat pemeriksa kesamaan melihatnya, dan
kemudian berhenti.)
-p hasil opsi dalam garis formulir
F terdiri untuk x% bahan G
artinya x % dari teks F juga dapat ditemukan di G. Perhatikan bahwa hubungan ini bukan
simetris; sebenarnya sangat mungkin untuk satu file terdiri dari 100% teks dari
file lain, sedangkan file lainnya hanya terdiri dari 1% teks dari file pertama, jika
panjangnya cukup berbeda. NS -P (kapital P) opsi menunjukkan kontributor utama untuk
setiap file saja. Ini menyederhanakan identifikasi satu set file A[1] ... A[n], di mana
penggabungan file-file ini juga ada. Ambang batas dapat diatur menggunakan -t
pilihan; perhatikan bahwa perincian teks yang dikenali masih diatur oleh -r
pilihan atau defaultnya.
-r pilihan mengontrol jumlah "unit" yang merupakan lari. Untuk program yang
membandingkan kode bahasa pemrograman, unit adalah token leksikal dalam bahasa yang bersangkutan;
komentar dan materi pembukaan standar (penyertaan file, dll.) diabaikan dan semua string
dianggap sama. Untuk sim_teks unit adalah "kata" yang didefinisikan sebagai urutan apa pun
dari satu atau lebih huruf, angka, atau karakter lebih dari 127 (177 oktal), (untuk mengakomodasi
huruf seperti , , dll.).
Sim_teks menerima teks spasi sebagai teks biasa.
-s dan -S pilihan mengontrol file mana yang akan dibandingkan. File input dibagi menjadi dua
kelompok, baru dan lama. Dengan tidak adanya opsi kontrol ini, program membandingkan
file demikian (untuk 4 file baru dan 6 yang lama):
baru / lama <- file pertama
1 2 3 4 / 5 6 7 8 9 10
|-------------/-------------
n 1 | C /
e 2 | cc /
w 3 | cc /
4 | cccc /
kedua / / / / / / / / / / / / /
berkas -> 5 | cccc /
o 6 | cccc /
l 7 | cccc /
h 8 | cccc /
9 | cccc /
10 | cccc /
di mana cs mewakili perbandingan file, dan / demarkasi antara baru dan lama
file.
Menggunakan -s opsi mengurangi ini menjadi:
baru / lama <- file pertama
1 2 3 4 / 5 6 7 8 9 10
|-------------/-------------
n 1 | /
e 2 | C /
w 3 | cc /
4 | cc /
kedua / / / / / / / / / / / / /
berkas -> 5 | cccc /
o 6 | cccc /
l 7 | cccc /
h 8 | cccc /
9 | cccc /
10 | cccc /
-S opsi mengurangi ini lebih lanjut menjadi:
baru / lama <- file pertama
1 2 3 4 / 5 6 7 8 9 10
|-------------/-------------
n 1 | /
dan 2 | /
w 3 | /
4 | /
kedua / / / / / / / / / / / / /
berkas -> 5 | cccc /
o 6 | cccc /
l 7 | cccc /
h 8 | cccc /
9 | cccc /
10 | cccc /
Program dapat menangani nama file UNICODE di bawah Windows. Ini hanya relevan di bawah
-R pilihan, karena tidak ada cara untuk memberikan nama file UNICODE dari baris perintah.
PEMBATASAN
Masukan berulang adalah kutukan pemeriksaan kesamaan. Jika kita memiliki file yang berisi 4
salinan teks yang identik,
A1 A2 A3 A4
di mana angka hanya berfungsi untuk membedakan salinan yang identik, ada 8 identitas:
A1=A2, A1=A3, A1=A4, A2=A3, A2=A4, A3=A4, A1A2=A3A4, dan A1A2A3=A2A3A4. Dari jumlah tersebut, hanya 3
bermakna: A1=A2, A2=A3, dan A3=A4. Dan untuk tabel dengan 20 baris yang identik untuk masing-masing
lainnya, tidak biasa dalam sebuah program, ada 715 identitas, yang paling banyak 19 adalah
berarti. Melaporkan semua 715 dari mereka jelas tidak dapat diterima.
Untuk mengatasinya, pencarian identitas dilakukan sebagai berikut: Untuk setiap posisi di
teks, segmen terbesar ditemukan, di mana salinan yang tidak tumpang tindih terjadi dalam teks
mengikutinya. Segmen itu dan salinannya dilaporkan dan pemindaian dilanjutkan di posisinya
tepat setelah segmen. Untuk contoh di atas ini menghasilkan identitas A1A2=A3A4
dan A3=A4, yang cukup memuaskan, dan untuk N segmen identik kira-kira 2 mencatat N
pesan diberikan.
Ini juga berfungsi dengan baik ketika empat segmen identik berada di file yang berbeda:
File1: A1
File2: A2
File3: A3
File4: A4
Sekarang segmen gabungan seperti A1A2 tidak terjadi, dan algoritme menemukan run A1=A2,
A2=A3, dan A3=A4, dengan total N-1 berjalan, semua informatif.
Menghitung Persentase
Pendekatan di atas tidak cocok untuk mendapatkan persentase konten file yang
dapat ditemukan di file lain. Ini membutuhkan membandingkan secara terpisah setiap pasangan file
diwakili oleh ac dalam matriks di atas; ini adalah apa -e pilihan tidak. Di bawah -e
opsi segmen File1:A1, dikenali di File2, akan dikenali lagi di File3 dan
berkas4. Dalam contoh di atas menghasilkan run
Berkas1:A1=Berkas2:A2
Berkas1:A1=Berkas3:A3
Berkas1:A1=Berkas4:A4
Berkas2:A2=Berkas3:A3
Berkas2:A2=Berkas4:A4
Berkas3:A3=Berkas4:A4
total N(N-1) berjalan
WAKTU DAN SPACE PERSYARATAN
Perawatan telah diambil untuk menjaga persyaratan waktu dari semua proses internal (hampir)
linier dalam panjang file input, dengan menggunakan berbagai tabel. Namun, jika ada
tidak cukup memori untuk tabel, mereka dibuang dalam urutan yang tidak penting, di mana
kondisi algoritma kembali ke sifat kuadrat mereka.
Persyaratan waktu kuadrat dalam jumlah file. Ini berarti bahwa, misalnya,
satu file 64 MB memproses jauh lebih cepat daripada file 8000 8 kB.
Program ini membutuhkan 6 byte memori untuk setiap token di input; 2 byte per baris baru
(bukan saat melakukan persentase); dan sekitar 76 byte untuk setiap proses yang ditemukan.
CONTOH
Panggilan
sim_c *.c
menyoroti kode duplikat di direktori. (Berguna untuk menghapus file yang dihasilkan
pertama.) Sebuah panggilan
sim_c -f -F *.c
dapat menunjukkan mereka lebih lanjut.
Sebuah panggilan
sim_text -e -p -s baru/* / lama/*
membandingkan setiap file di new/* dengan setiap file di new/* dan lama/*, dan jika ada pasangan yang memiliki lebih dari itu
20% kesamaan, fakta itu dilaporkan. Biasanya kesamaan 30% atau lebih signifikan;
lebih rendah dari 20% mungkin kebetulan; dan di antaranya diragukan.
Sebuah panggilan
sim_text -e -n -s -r100 baru/* "|" tua/*
membandingkan file yang sama, dan melaporkan segmen umum yang besar. (NS | dapat digunakan sebagai
pemisah bukannya / pada sistem di mana / sebagai parameter baris perintah dihancurkan oleh
penerjemah perintah.)
Kedua pendekatan itu bagus untuk deteksi plagiarisme.
Gunakan sim_mira online menggunakan layanan onworks.net