Как сделать детектор плагиата на Python

В этой статье давайте узнаем, как создать средство проверки на плагиат и мощные функции модуля Difflib с помощью TipsMake.com!

Ткинтер и Диффлиб. Модули

Для создания детектора плагиата вы будете использовать модули Tkinter и Difflib. Tkinter — это простая кроссплатформенная библиотека, которую можно использовать для быстрого создания графических пользовательских интерфейсов.

Модуль Difflib является частью стандартной библиотеки Python, которая предоставляет классы и функции для сравнения строк, таких как строки, списки и файлы. Благодаря этому вы можете создавать такие программы, как автокоррекция текста, простая система контроля версий или инструмент для суммирования текста.

Как создать детектор плагиата на Python

Импортируйте необходимые модули. Определите метод load_file_or_display_contents(), который принимает в качестве аргументов entry и text_widget. Этот метод загрузит текстовый файл и отобразит его содержимое в текстовом виджете.

Используйте get(), чтобы получить путь к файлу. Если пользователь не вводит никакой информации, используйте askopenfilename(), чтобы открыть диалоговое окно файла и выбрать файл, который вы хотите проверить на плагиат. Если пользователь выбирает этот путь к файлу, он удаляет предыдущую запись, если она есть, от начала до конца и вставляет выбранный путь.

импортировать tkinter как tk из tkinter; ) entry.insert(tk.END, file_path)

Откройте файл в режиме чтения и сохраните содержимое в текстовой переменной. Удалите содержимое text_widget и вставьте текст, который вы получили ранее.

с open(file_path, ‘r’) как файл: text = file.read() text_widget.delete(1.0, tk.END) text_widget.insert(tk.END, text)

Определите метод compare_text(), который вы будете использовать для сравнения двух фрагментов текста и вычисления процентного сходства. Используйте класс Difflib SequenceMatcher() для сравнения строк и определения сходства. Установите для пользовательской функции сравнения значение «Нет», чтобы использовать сравнение по умолчанию и передать текст, который вы хотите сравнить.

Используйте масштабирование для определения подобия в формате с плавающей запятой, которое можно использовать для вычисления процентного сходства. Используйте get_opcodes() для получения группы операций, которые можно использовать для выделения похожих частей текста и возврата этой части вместе с процентом сходства.

def compare_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

Определите метод show_similarity(). Используйте get() для извлечения текста из обоих текстовых полей и передачи их в функцию compare_text(). Удалите содержимое полученного текстового поля и вставьте процент сходства. Удалите тег «такой же» из предыдущего выделения (если есть).

def show_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_percentage}%”) text_textbox1.tag_remove(“то же самое”, “1.0”, tk.END) text_textbox2.tag_remove(“то же самое”, “1.0”, tk.END)

get_opcode() возвращает 5 кортежей: строку кода операции, индекс начала первой строки, индекс конца первой строки, индекс начала второй строки и индекс конца второй строки.

Строка кода операции может иметь одно из четырех значений: заменить, удалить, вставить и равно. Вы должны использовать замену, когда часть текста в обеих строках отличается, и кто-то заменил часть содержимого другим. Удалить будет использоваться, когда часть текста существует в первой строке, а не во второй.

Вставка используется, когда часть текста присутствует не в первой строке, а во второй строке. Вы получаете равные результаты, когда части контента одинаковы. Сохраните все эти значения в соответствующих переменных. Если строка кода операции равна , добавьте тот же тег в текстовую строку.

для кода операции в 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(“то же самое”, f”1.0+{start2}c”, f”1.0+{end2}c”)

Инициализируйте корневое окно Tkinter. Назовите окно и определите рамку внутри него. Расположите раму с соответствующей прокладкой в ​​обоих направлениях. Определите две метки для отображения Text 1 и Text 2 . Установите родительский компонент, внутри которого он находится, и то, что он отображает.

Определите 3 текстовых поля, два для текста, который вы хотите сравнить, и одно для отображения результатов. Объявите родительский элемент, ширину и высоту, установите для параметра упаковки значение tk.WORD, чтобы программа переносила слова на ближайшую границу и не разрывала никакие слова между ними.

root = tk.Tk() root.title(“Инструмент сравнения текста”) 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, столбец=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)

Определите 3 кнопки, две для загрузки файлов и одну для сравнения. Определяет родительский элемент, текст, который он будет отображать, и функцию, которую он будет запускать при нажатии. Создайте два виджета ввода для ввода пути к файлу и определения родительского элемента и его ширины.

Расположите все эти элементы в строках и столбцах с помощью менеджера сетки. Используйте пакет для сортировки compare_button и 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=”Загрузить файл 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=”Загрузить файл 2″, command=lambda: load_file_or_display_contents(file_entry2, text_textbox2)) load_button2.grid(строка=2, столбец=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(“то же самое”, передний план=”красный”, фон=”светло-желтый”) text_textbox2.tag_configure(“то же самое”, передний план=”красный”, фон=”светло-желтый”)

Функция mainloop() указывает Python циклически проходить по событию Tkinter и прослушивать его до тех пор, пока вы не закроете окно.

корень.mainloop()

Соберите все вместе и запустите код для обнаружения плагиата.

Пример результатов работы инструмента обнаружения плагиата

При запуске этой программы она показывает окно. При нажатии кнопки «Загрузить файл 1» открывается диалоговое окно файла, в котором предлагается выбрать файл. При выборе файла эта программа отображает содержимое первого текстового поля. При вводе пути и нажатии кнопки «Загрузить файл 2» программа отображает содержимое во втором текстовом поле. Когда вы нажмете кнопку «Сравнить», у вас будет 100% сходство, и весь текст будет выделен точно.

Как сделать детектор плагиата в Python Изображение 1

Если вы добавите еще одну строку в текстовое поле, а затем нажмете «Сравнить», эта программа выделит ту же часть и сохранит остальные.

Как сделать детектор плагиата в Python Рисунок 2

Если сходств очень мало, программа выделяет некоторые буквы или слова, но процент сходства довольно низкий.

Как сделать детектор плагиата на Python. Изображение 3

Выше описано, как создать инструмент обнаружения плагиата в Python. Как видите, это довольно просто, не так ли? Удачи!

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *