अपना खुद का कॉपी चेकर टूल बनाएं और डिफ्लिब मॉड्यूल की शक्तिशाली क्षमताओं के बारे में जानें।

जैसे-जैसे डिजिटल सामग्री की लोकप्रियता बढ़ी है, इसे नकल और दुरुपयोग से बचाना पहले से कहीं अधिक महत्वपूर्ण हो गया है। साहित्यिक चोरी का पता लगाने वाला उपकरण शिक्षकों को छात्रों के काम का मूल्यांकन करने, संस्थानों को शोध पत्रों की जांच करने और लेखकों को उनकी बौद्धिक संपदा की चोरी का पता लगाने में मदद कर सकता है।

साहित्यिक चोरी उपकरण बनाने से आपको अनुक्रम मिलान, फ़ाइल संचालन और उपयोगकर्ता इंटरफ़ेस को समझने में मदद मिल सकती है। आप अपने एप्लिकेशन को बेहतर बनाने के लिए प्राकृतिक भाषा प्रसंस्करण (एनएलपी) तकनीकों का भी पता लगाएंगे।

टिंकर और डिफ्लिब मॉड्यूल

साहित्यिक चोरी डिटेक्टर बनाने के लिए, आप टिंकर और डिफ्लिब मॉड्यूल का उपयोग करेंगे। टिंकर एक सरल, क्रॉस-प्लेटफ़ॉर्म, लाइब्रेरी है जिसे आप बनाने के लिए उपयोग कर सकते हैं ग्राफिकल यूजर इंटरफेस जल्दी से।

डिफ़लिब मॉड्यूल पायथन मानक लाइब्रेरी का हिस्सा है जो स्ट्रिंग्स, सूचियों और फ़ाइलों जैसे अनुक्रमों की तुलना करने के लिए कक्षाएं और फ़ंक्शन प्रदान करता है। इसके साथ, आप टेक्स्ट ऑटो-करेक्टर, सरलीकृत जैसे प्रोग्राम बना सकते हैं

instagram viewer
संस्करण नियंत्रण प्रणाली, या एक पाठ सारांशीकरण उपकरण।

पायथन का उपयोग करके साहित्यिक चोरी डिटेक्टर कैसे बनाएं

आप इसमें पायथन का उपयोग करके साहित्यिक चोरी डिटेक्टर का निर्माण करने वाला संपूर्ण स्रोत कोड पा सकते हैं गिटहब रिपॉजिटरी.

आवश्यक मॉड्यूल आयात करें. एक विधि परिभाषित करें, लोड_फ़ाइल_या_डिस्प्ले_सामग्री() वह प्राप्त करता है प्रवेश और text_widget तर्क के रूप में. यह विधि एक टेक्स्ट फ़ाइल लोड करेगी और उसकी सामग्री को टेक्स्ट विजेट में प्रदर्शित करेगी।

उपयोग पाना() फ़ाइल पथ निकालने की विधि. यदि उपयोगकर्ता ने कुछ भी दर्ज नहीं किया है, तो इसका उपयोग करें आस्कओपेनफ़ाइलनाम() साहित्यिक चोरी की जांच के लिए वांछित फ़ाइल का चयन करने के लिए फ़ाइल संवाद विंडो खोलने की विधि। यदि उपयोगकर्ता फ़ाइल पथ का चयन करता है, तो पिछली प्रविष्टि, यदि कोई हो, को प्रारंभ से अंत तक साफ़ करें और उनके द्वारा चयनित पथ डालें।

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)

फ़ाइल को रीड मोड में खोलें और सामग्री को इसमें संग्रहीत करें मूलपाठ चर। text_widget की सामग्री साफ़ करें और वह पाठ डालें जो आपने पहले निकाला था।

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

एक विधि परिभाषित करें, तुलना_पाठ() इसका उपयोग आप पाठ के दो टुकड़ों की तुलना करने और उनकी समानता प्रतिशत की गणना करने के लिए करेंगे। डिफ्लिब का प्रयोग करें सीक्वेंसमैचर() अनुक्रमों की तुलना करने और समानता निर्धारित करने के लिए कक्षा। कस्टम तुलना फ़ंक्शन को इस पर सेट करें कोई नहीं डिफ़ॉल्ट तुलना का उपयोग करने के लिए, और उस टेक्स्ट को पास करें जिसकी आप तुलना करना चाहते हैं।

फ़्लोटिंग-पॉइंट प्रारूप में समानता प्राप्त करने के लिए अनुपात विधि का उपयोग करें जिसका उपयोग आप समानता प्रतिशत की गणना करने के लिए कर सकते हैं। उपयोग get_opcodes() संचालन के एक सेट को पुनः प्राप्त करने की विधि जिसका उपयोग आप पाठ के समान भागों को हाइलाइट करने और समानता प्रतिशत के साथ वापस करने के लिए कर सकते हैं।

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

एक विधि परिभाषित करें, दिखाओ_समानता(). उपयोग पाना() दोनों टेक्स्ट बॉक्स से टेक्स्ट निकालने और उन्हें पास करने की विधि तुलना_पाठ() समारोह। टेक्स्टबॉक्स की सामग्री को साफ़ करें जो परिणाम प्रदर्शित करेगा और समानता प्रतिशत सम्मिलित करेगा। हटाना "वही" पिछली हाइलाइटिंग से टैग (यदि कोई हो)।

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)

get_opcode() विधि पांच टुपल्स लौटाती है: ऑपकोड स्ट्रिंग, पहले अनुक्रम का प्रारंभ सूचकांक, अंतिम सूचकांक पहले अनुक्रम का, दूसरे अनुक्रम का प्रारंभ सूचकांक, और दूसरे का अंतिम सूचकांक अनुक्रम।

ऑपकोड स्ट्रिंग चार संभावित मानों में से एक हो सकती है: प्रतिस्थापित करें, हटाएं, डालें और बराबर करें। आपको मिल जायेगा बदलना जब दोनों अनुक्रमों में पाठ का एक भाग भिन्न हो, और किसी ने एक भाग को दूसरे से बदल दिया हो। आपको मिल जायेगा मिटाना जब पाठ का एक भाग पहले अनुक्रम में मौजूद हो लेकिन दूसरे में नहीं।

आपको मिला डालना जब पाठ का एक भाग पहले अनुक्रम में अनुपस्थित है लेकिन दूसरे में मौजूद है। जब पाठ के भाग समान हों तो आप बराबर हो जाते हैं। इन सभी मानों को उचित वेरिएबल्स में संग्रहीत करें। यदि ऑपकोड स्ट्रिंग है बराबर, जोड़ें वही पाठ अनुक्रम को टैग करें.

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")

टिंकर रूट विंडो को प्रारंभ करें। विंडो का शीर्षक सेट करें और उसके अंदर एक फ़्रेम परिभाषित करें। फ़्रेम को दोनों दिशाओं में उचित पैडिंग के साथ व्यवस्थित करें। प्रदर्शित करने के लिए दो लेबल परिभाषित करें पाठ 1 और पाठ 2. वह मूल तत्व सेट करें जिसमें उसे रहना चाहिए और वह टेक्स्ट सेट करें जो उसे प्रदर्शित करना चाहिए।

तीन टेक्स्टबॉक्स परिभाषित करें, दो उन टेक्स्ट के लिए जिनकी आप तुलना करना चाहते हैं और एक परिणाम प्रदर्शित करने के लिए। मूल तत्व, चौड़ाई और ऊंचाई घोषित करें और रैप विकल्प सेट करें टी.के. शब्द यह सुनिश्चित करने के लिए कि प्रोग्राम शब्दों को निकटतम सीमा पर लपेटता है और बीच में कोई शब्द नहीं तोड़ता है।

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)

तीन बटन परिभाषित करें, दो फ़ाइलें लोड करने के लिए और एक तुलना के लिए। मूल तत्व, उसे प्रदर्शित होने वाला टेक्स्ट और क्लिक करने पर उसे निष्पादित होने वाले फ़ंक्शन को परिभाषित करें। फ़ाइल पथ को इनपुट करने और उसकी चौड़ाई के साथ मूल तत्व को परिभाषित करने के लिए दो प्रविष्टि विजेट बनाएं।

ग्रिड प्रबंधक का उपयोग करके इन सभी तत्वों को पंक्तियों और स्तंभों में व्यवस्थित करें। व्यवस्थित करने के लिए पैक का उपयोग करें तुलना_बटन और यह text_textbox_diff. जहां आवश्यक हो वहां उचित पैडिंग जोड़ें।

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)

पीले पृष्ठभूमि और लाल फ़ॉन्ट रंग के साथ समान रूप से चिह्नित टेक्स्ट को हाइलाइट करें।

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

मुख्य घेरा() फ़ंक्शन पायथन को टिंकर ईवेंट लूप चलाने और विंडो बंद करने तक ईवेंट सुनने के लिए कहता है।

root.mainloop()

इन सबको एक साथ रखें और साहित्यिक चोरी का पता लगाने के लिए कोड चलाएँ।

साहित्यिक चोरी डिटेक्टर का उदाहरण आउटपुट

जब आप प्रोग्राम चलाते हैं, तो यह एक विंडो प्रदर्शित करता है। मारने पर फ़ाइल 1 लोड करें बटन, एक फ़ाइल संवाद खुलता है और आपसे एक फ़ाइल चुनने के लिए कहता है। फ़ाइल चुनने पर, प्रोग्राम पहले टेक्स्ट बॉक्स के अंदर सामग्री प्रदर्शित करता है। रास्ते में घुसने और टकराने पर फ़ाइल 2 लोड करें, प्रोग्राम दूसरे टेक्स्ट बॉक्स में सामग्री प्रदर्शित करता है। मारने पर तुलना करना बटन, आपको 100% समानता मिलती है, और यह 100% समानता के लिए संपूर्ण पाठ को हाइलाइट करता है।

यदि आप किसी टेक्स्टबॉक्स में एक और पंक्ति जोड़ते हैं और हिट करते हैं तुलना करना, प्रोग्राम समान हिस्से को हाइलाइट करता है और बाकी को छोड़ देता है।

यदि बहुत कम या कोई समानता नहीं है, तो प्रोग्राम कुछ अक्षरों या शब्दों को हाइलाइट करता है, लेकिन समानता का प्रतिशत बहुत कम है।

साहित्यिक चोरी का पता लगाने के लिए एनएलपी का उपयोग करना

जबकि डिफ्लिब पाठ तुलना के लिए एक शक्तिशाली तरीका है, यह छोटे बदलावों के प्रति संवेदनशील है, इसमें संदर्भ की सीमित समझ है, और अक्सर बड़े पाठों के लिए अप्रभावी है। आपको प्राकृतिक भाषा प्रसंस्करण की खोज पर विचार करना चाहिए क्योंकि यह पाठ का अर्थपूर्ण विश्लेषण कर सकता है, सार्थक विशेषताएं निकाल सकता है और इसमें प्रासंगिक समझ होती है।

इसके अलावा, आप अपने मॉडल को विभिन्न भाषाओं के लिए प्रशिक्षित कर सकते हैं और दक्षता के लिए इसे अनुकूलित कर सकते हैं। साहित्यिक चोरी का पता लगाने के लिए आप जिन कुछ तकनीकों का उपयोग कर सकते हैं उनमें जैककार्ड समानता, कोसाइन समानता, शब्द एम्बेडिंग, अव्यक्त अनुक्रम विश्लेषण और अनुक्रम-से-अनुक्रम मॉडल शामिल हैं।