Bangun alat pemeriksa salinan Anda sendiri dan pelajari tentang kemampuan canggih modul Difflib.

Karena konten digital semakin populer, semakin penting untuk melindunginya dari penyalinan dan penyalahgunaan. Alat pendeteksi plagiarisme dapat membantu guru mengevaluasi karya siswa, institusi memeriksa makalah penelitian, dan penulis mendeteksi pencurian kekayaan intelektual mereka.

Membangun alat plagiarisme dapat membantu Anda memahami pencocokan urutan, operasi file, dan antarmuka pengguna. Anda juga akan menjelajahi teknik pemrosesan bahasa alami (NLP) untuk menyempurnakan aplikasi Anda.

Modul Tkinter dan Difflib

Untuk membuat pendeteksi plagiarisme, Anda akan menggunakan Tkinter dan modul Difflib. Tkinter adalah perpustakaan lintas platform yang sederhana yang dapat Anda gunakan untuk membuat antarmuka pengguna grafis dengan cepat.

Modul Difflib adalah bagian dari pustaka standar Python yang menyediakan kelas dan fungsi untuk membandingkan urutan seperti string, daftar, dan file. Dengannya, Anda dapat membuat program seperti koreksi otomatis teks, yang disederhanakan

instagram viewer
sistem kontrol versi, atau alat peringkasan teks.

Cara Membuat Detektor Plagiarisme Menggunakan Python

Anda dapat menemukan seluruh kode sumber membangun pendeteksi plagiarisme menggunakan Python di sini repositori GitHub.

Impor modul yang diperlukan. Tentukan metode, load_file_or_display_contents() yang mengambil pintu masuk Dan text_widget sebagai argumen. Metode ini akan memuat file teks dan menampilkan isinya dalam widget teks.

Menggunakan mendapatkan() metode untuk mengekstrak jalur file. Jika pengguna belum memasukkan apa pun, gunakan askopenfilename() metode untuk membuka jendela dialog file untuk memilih file yang diinginkan untuk pemeriksaan plagiarisme. Jika pengguna memilih jalur file, hapus entri sebelumnya, jika ada, dari awal hingga akhir dan masukkan jalur yang mereka pilih.

import tkinter as tk
from tkinter import filedialog
from difflib import SequenceMatcher

defload_file_or_display_contents(entry, text_widget):
file_path = entry.get()

ifnot file_path:
file_path = filedialog.askopenfilename()

if file_path:
entry.delete(0, tk.END)
entry.insert(tk.END, file_path)

Buka file dalam mode baca dan simpan konten di teks variabel. Kosongkan isi text_widget dan masukkan teks yang Anda ekstrak sebelumnya.

with open(file_path, 'r') as file:
text = file.read()
text_widget.delete(1.0, tk.END)
text_widget.insert(tk.END, text)

Tentukan metode, bandingkan_teks() yang akan Anda gunakan untuk membandingkan dua potong teks dan menghitung persentase kemiripannya. Gunakan Difflib SequenceMatcher() kelas untuk membandingkan urutan dan menentukan kesamaan. Setel fungsi perbandingan khusus ke Tidak ada untuk menggunakan perbandingan default, dan meneruskan teks yang ingin Anda bandingkan.

Gunakan metode rasio untuk mendapatkan kesamaan dalam format floating-point yang dapat Anda gunakan untuk menghitung persentase kesamaan. Menggunakan get_opcodes() metode untuk mengambil serangkaian operasi yang dapat Anda gunakan untuk menyorot bagian teks yang serupa dan mengembalikannya bersama dengan persentase kesamaan.

defcompare_text(text1, text2):
d = SequenceMatcher(None, text1, text2)
similarity_ratio = d.ratio()
similarity_percentage = int(similarity_ratio * 100)

diff = list(d.get_opcodes())
return similarity_percentage, diff

Tentukan metode, show_similarity(). Menggunakan mendapatkan() metode untuk mengekstrak teks dari kedua kotak teks dan meneruskannya ke bandingkan_teks() fungsi. Kosongkan isi textbox yang akan menampilkan hasil dan masukkan persentase kesamaan. Hapus "sama" tag dari penyorotan sebelumnya (jika ada).

defshow_similarity():
text1 = text_textbox1.get(1.0, tk.END)
text2 = text_textbox2.get(1.0, tk.END)
similarity_percentage, diff = compare_text(text1, text2)
text_textbox_diff.delete(1.0, tk.END)
text_textbox_diff.insert(tk.END, f"Similarity: {similarity_percentage}%")
text_textbox1.tag_remove("same", "1.0", tk.END)
text_textbox2.tag_remove("same", "1.0", tk.END)

Itu get_opcode() metode mengembalikan lima tupel: string opcode, indeks awal dari urutan pertama, indeks akhir urutan pertama, indeks awal urutan kedua, dan indeks akhir urutan kedua urutan.

String opcode dapat berupa salah satu dari empat kemungkinan nilai: ganti, hapus, sisipkan, dan sama. Kamu akan mendapatkan mengganti ketika sebagian teks di kedua urutan berbeda, dan seseorang mengganti satu bagian dengan yang lain. Kamu akan mendapatkan menghapus ketika sebagian teks ada di urutan pertama tetapi bukan yang kedua.

Anda mendapatkan menyisipkan ketika sebagian teks tidak ada di urutan pertama tetapi ada di urutan kedua. Anda menjadi sama jika bagian teksnya sama. Simpan semua nilai ini dalam variabel yang sesuai. Jika string opcode adalah setara, Tambahkan sama tag ke urutan teks.

for opcode in diff:
tag = opcode[0]
start1 = opcode[1]
end1 = opcode[2]
start2 = opcode[3]
end2 = opcode[4]

if tag == "equal":
text_textbox1.tag_add("same", f"1.0+{start1}c", f"1.0+{end1}c")
text_textbox2.tag_add("same", f"1.0+{start2}c", f"1.0+{end2}c")

Inisialisasi jendela root Tkinter. Tetapkan judul jendela dan tentukan bingkai di dalamnya. Atur bingkai dengan padding yang sesuai di kedua arah. Tentukan dua label untuk ditampilkan Teks 1 Dan Teks 2. Tetapkan elemen induk tempat ia harus berada dan teks yang harus ditampilkan.

Tentukan tiga kotak teks, dua untuk teks yang ingin Anda bandingkan dan satu untuk menampilkan hasilnya. Deklarasikan elemen induk, lebar, dan tinggi, dan setel opsi bungkus ke tk. KATA untuk memastikan bahwa program membungkus kata-kata di batas terdekat dan tidak memecahkan kata apa pun di antaranya.

root = tk.Tk()
root.title("Text Comparison Tool")
frame = tk.Frame(root)
frame.pack(padx=10, pady=10)

text_label1 = tk.Label(frame, text="Text 1:")
text_label1.grid(row=0, column=0, padx=5, pady=5)
text_textbox1 = tk.Text(frame, wrap=tk.WORD, width=40, height=10)
text_textbox1.grid(row=0, column=1, padx=5, pady=5)
text_label2 = tk.Label(frame, text="Text 2:")
text_label2.grid(row=0, column=2, padx=5, pady=5)
text_textbox2 = tk.Text(frame, wrap=tk.WORD, width=40, height=10)
text_textbox2.grid(row=0, column=3, padx=5, pady=5)

Tentukan tiga tombol, dua untuk memuat file dan satu untuk perbandingan. Tentukan elemen induk, teks yang harus ditampilkan, dan fungsi yang harus dijalankan saat diklik. Buat dua widget entri untuk memasukkan jalur file dan menentukan elemen induk beserta lebarnya.

Atur semua elemen ini dalam baris dan kolom menggunakan pengelola kisi. Gunakan paket untuk mengatur tombol_bandingkan dan text_textbox_diff. Tambahkan padding yang sesuai jika perlu.

file_entry1 = tk.Entry(frame, width=50)
file_entry1.grid(row=1, column=2, columnspan=2, padx=5, pady=5)
load_button1 = tk.Button(frame, text="Load File 1", command=lambda: load_file_or_display_contents(file_entry1, text_textbox1))
load_button1.grid(row=1, column=0, padx=5, pady=5, columnspan=2)
file_entry2 = tk.Entry(frame, width=50)
file_entry2.grid(row=2, column=2, columnspan=2, padx=5, pady=5)
load_button2 = tk.Button(frame, text="Load File 2", command=lambda: load_file_or_display_contents(file_entry2, text_textbox2))
load_button2.grid(row=2, column=0, padx=5, pady=5, columnspan=2)
compare_button = tk.Button(root, text="Compare", command=show_similarity)
compare_button.pack(pady=5)
text_textbox_diff = tk.Text(root, wrap=tk.WORD, width=80, height=1)
text_textbox_diff.pack(padx=10, pady=10)

Sorot teks yang ditandai sama dengan latar belakang kuning dan warna font merah.

text_textbox1.tag_configure("same", foreground="red", background="lightyellow")
text_textbox2.tag_configure("same", foreground="red", background="lightyellow")

Itu mainloop() fungsi memberi tahu Python untuk menjalankan loop acara Tkinter dan mendengarkan acara sampai Anda menutup jendela.

root.mainloop()

Satukan semuanya dan jalankan kode untuk mendeteksi plagiarisme.

Contoh Keluaran dari Plagiarism Detector

Ketika Anda menjalankan program, itu akan menampilkan jendela. Saat memukul Muat File 1 tombol, dialog file terbuka dan meminta Anda untuk memilih file. Saat memilih file, program menampilkan konten di dalam kotak teks pertama. Saat memasuki jalan dan memukul Muat File 2, program menampilkan konten di kotak teks kedua. Saat memukul Membandingkan tombol, Anda mendapatkan kesamaan sebagai 100%, dan menyorot seluruh teks untuk kesamaan 100%.

Jika Anda menambahkan baris lain ke salah satu kotak teks dan tekan Membandingkan, program menyoroti bagian yang serupa dan mengabaikan sisanya.

Jika ada sedikit atau tidak ada kemiripan, program menyoroti beberapa huruf atau kata, tetapi persentase kemiripannya cukup rendah.

Menggunakan NLP untuk Deteksi Plagiarisme

Meskipun Difflib adalah metode yang ampuh untuk perbandingan teks, metode ini peka terhadap perubahan kecil, memiliki pemahaman konteks yang terbatas, dan seringkali tidak efektif untuk teks berukuran besar. Anda harus mempertimbangkan untuk mengeksplorasi Pemrosesan Bahasa Alami karena dapat melakukan analisis semantik teks, mengekstrak fitur yang bermakna, dan memiliki pemahaman kontekstual.

Selain itu, Anda dapat melatih model Anda untuk berbagai bahasa dan mengoptimalkannya untuk efisiensi. Beberapa teknik yang dapat Anda gunakan untuk deteksi plagiarisme meliputi Jaccard similarity, cosine similarity, word embeddings, latent sequence analysis, dan sequence-to-sequence model.