From 3e911ef10449b4bf89134412f7939d69e9071534 Mon Sep 17 00:00:00 2001 From: warlegend24 <96477955+warlegend24@users.noreply.github.com> Date: Sat, 21 Oct 2023 13:54:06 +0530 Subject: [PATCH] Added a new project (Plagiarism_checker) Python project to check for plagiarism --- P/019_Plagiarism_Checker.ipynb | 156 +++++++++++++++++++++++++++++++++ P/Arthur.txt | 1 + P/Ben.txt | 1 + P/Clark.txt | 1 + P/README.md | 96 ++++++++++++++++++++ P/output.png | Bin 0 -> 25500 bytes 6 files changed, 255 insertions(+) create mode 100644 P/019_Plagiarism_Checker.ipynb create mode 100644 P/Arthur.txt create mode 100644 P/Ben.txt create mode 100644 P/Clark.txt create mode 100644 P/README.md create mode 100644 P/output.png diff --git a/P/019_Plagiarism_Checker.ipynb b/P/019_Plagiarism_Checker.ipynb new file mode 100644 index 00000000..9f95d77f --- /dev/null +++ b/P/019_Plagiarism_Checker.ipynb @@ -0,0 +1,156 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "All the IPython Notebooks in **Python Mini-Projects** series by Dr. Milaan Parmar are available @ **[GitHub](https://github.com/milaan9/91_Python_Mini_Projects)**\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Python Program to Check Plagiarism " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "ExecuteTime": { + "end_time": "2021-10-05T13:06:11.749110Z", + "start_time": "2021-10-05T13:06:09.467318Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Similarity data:\n", + " ('Ben.txt', 'Clark.txt', 0.408904884400347)\n", + "Similarity data:\n", + " ('Arthur.txt', 'Clark.txt', 0.5430431121089816)\n", + "Similarity data:\n", + " ('Arthur.txt', 'Ben.txt', 0.4595329317649595)\n" + ] + } + ], + "source": [ + "'''\n", + "Python Program to Check Plagiarism \n", + "'''\n", + "\n", + "# Import necessary modules!\n", + "import os\n", + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "from sklearn.metrics.pairwise import cosine_similarity\n", + "\n", + "student_files = [doc for doc in os.listdir() if doc.endswith('.txt')]\n", + "student_notes = [open(_file, encoding='utf-8').read()\n", + " for _file in student_files]\n", + "\n", + "\n", + "def vectorize(Text): return TfidfVectorizer().fit_transform(Text).toarray()\n", + "def similarity(doc1, doc2): return cosine_similarity([doc1, doc2])\n", + "\n", + "\n", + "vectors = vectorize(student_notes)\n", + "s_vectors = list(zip(student_files, vectors))\n", + "plagiarism_results = set()\n", + "\n", + "\n", + "def check_plagiarism():\n", + " global s_vectors\n", + " for student_a, text_vector_a in s_vectors:\n", + " new_vectors = s_vectors.copy()\n", + " current_index = new_vectors.index((student_a, text_vector_a))\n", + " del new_vectors[current_index]\n", + " for student_b, text_vector_b in new_vectors:\n", + " sim_score = similarity(text_vector_a, text_vector_b)[0][1]\n", + " student_pair = sorted((student_a, student_b))\n", + " score = (student_pair[0], student_pair[1], sim_score)\n", + " plagiarism_results.add(score)\n", + " return plagiarism_results\n", + "\n", + "\n", + "for data in check_plagiarism():\n", + " print(\"Similarity data:\\n\", data) " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "hide_input": false, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.8" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + }, + "varInspector": { + "cols": { + "lenName": 16, + "lenType": 16, + "lenVar": 40 + }, + "kernels_config": { + "python": { + "delete_cmd_postfix": "", + "delete_cmd_prefix": "del ", + "library": "var_list.py", + "varRefreshCmd": "print(var_dic_list())" + }, + "r": { + "delete_cmd_postfix": ") ", + "delete_cmd_prefix": "rm(", + "library": "var_list.r", + "varRefreshCmd": "cat(var_dic_list()) " + } + }, + "types_to_exclude": [ + "module", + "function", + "builtin_function_or_method", + "instance", + "_Feature" + ], + "window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/P/Arthur.txt b/P/Arthur.txt new file mode 100644 index 00000000..9fa79b09 --- /dev/null +++ b/P/Arthur.txt @@ -0,0 +1 @@ +Success can mean a variety of different things. Success is, quite simply, the accomplishment of a predetermined goal. To some people it could mean making money, cultivate and develop certain basic qualities, to others it could mean keeping everyone happy, but to me, it means achieving the goals and objective I have set for myself for my life. Besides working on your goals that would lead a person towards success it is very important to push your limit every day, take charge of your life, and keep learning. This experience enables us to think smartly to solve a critical problem and achieve success. It is very important to take care of your mind which could be done by eliminating negative thoughts and negative people from your life. I think in order to call something successful, both the result and the process should be great. Without success, you, the group, your company, your goals, dreams and even entire civilizations cease to survive. \ No newline at end of file diff --git a/P/Ben.txt b/P/Ben.txt new file mode 100644 index 00000000..f86f3729 --- /dev/null +++ b/P/Ben.txt @@ -0,0 +1 @@ +In order to be successful one needs cultivate and develop certain basic qualities. Success is, quite simply, the accomplishment of a predetermined goal. We consciously or subconsciously set goals for ourselves all the time. First of all, you must know aim and objective of your life. Unless you know your destination, you cannot set out on a journey. At first, you must by very clear in your objectives to be achieved. Finally, you should enjoy the overall process rather than the final outcome. There is no shortcut to success. Hard work is the only key to achieving it; it teaches us discipline, dedication and determination. There is no single right way to be successful. What works for you might not work for someone else. \ No newline at end of file diff --git a/P/Clark.txt b/P/Clark.txt new file mode 100644 index 00000000..f754a3c8 --- /dev/null +++ b/P/Clark.txt @@ -0,0 +1 @@ +Success is, quite simply, the accomplishment of a predetermined goal. Success is considered to be a term that describes two things. It also the combination of variety of different things. The first one is achievement of a certain major or minor goal. This could be succeeding in making a delicious dinner, or a more global thing succeeding in a career or job. The second definition of success is more broad and subjective. Success provides confidence, security, a sense of well-being, the ability to contribute at a greater level, hope and leadership. This experience enables us to think smartly to solve a critical problem and achieve success. Without success, you, the group, your company, your goals, dreams and even entire civilizations cease to survive. \ No newline at end of file diff --git a/P/README.md b/P/README.md new file mode 100644 index 00000000..ca83e675 --- /dev/null +++ b/P/README.md @@ -0,0 +1,96 @@ +

+Last Commit + +

+ + + +# Plagiarism Checker + +In this class, you'll learn how to check similarity between text (.txt) documents using cosine similarity + +In order to compute the simlilarity between on two text documents, the textual raw data is transformed into vectors ➑ **arrays of numbers** and then from that we are going to use a basic knowledge vector to compute the the similarity between them. + + +

+ +

+ +## Prerequisites: + +1. Python Basics +2. sklearn module + +--- + +## Install Necessary Modules: + +Open your [![Anaconda](https://img.shields.io/badge/Anaconda-342B029.svg?&style=flate&logo=anaconda&logoColor=white)](https://www.anaconda.com/products/individual) Prompt propmt and type and run the following command (individually): + + - pip install sklearn + +**[`Sklearn`](https://scikit-learn.org/)** (Scikit-learn) is the most useful and robust library for machine learning in Python. It provides a selection of efficient tools for machine learning and statistical modeling including classification, regression, clustering and dimensionality reduction via a consistence interface in Python. This library, which is largely written in Python, is built upon NumPy, SciPy and Matplotlib. + +Once Installed now we can import it inside our python code. + +--- + +## Frequently asked questions ❔ + +### How can I thank you for writing and sharing this tutorial? 🌷 + +You can Star Badge and Fork Badge Starring and Forking is free for you, but it tells me and other people that it was helpful and you like this tutorial. + +Go [**`here`**](https://github.com/milaan9/91_Python_Mini_Projects) if you aren't here already and click ➞ **`✰ Star`** and **`β΅– Fork`** button in the top right corner. You will be asked to create a GitHub account if you don't already have one. + +--- + +### How can I read this tutorial without an Internet connection? GIF + +1. Go [**`here`**](https://github.com/milaan9/91_Python_Mini_Projects) and click the big green ➞ **`Code`** button in the top right of the page, then click ➞ [**`Download ZIP`**](https://github.com/milaan9/91_Python_Mini_Projects/archive/refs/heads/main.zip). + + ![Download ZIP](https://github.com/milaan9/91_Python_Mini_Projects/blob/main/img/dnld_rep.png) + +2. Extract the ZIP and open it. Unfortunately I don't have any more specific instructions because how exactly this is done depends on which operating system you run. + +3. Launch ipython notebook from the folder which contains the notebooks. Open each one of them + + `Kernel > Restart & Clear Output` + +This will clear all the outputs and now you can understand each statement and learn interactively. + +If you have git and you know how to use it, you can also clone the repository instead of downloading a zip and extracting it. An advantage with doing it this way is that you don't need to download the whole tutorial again to get the latest version of it, all you need to do is to pull with git and run ipython notebook again. + +--- + +## Authors ✍️ + +I'm Dr. Milaan Parmar and I have written this tutorial. If you think you can add/correct/edit and enhance this tutorial you are most welcomeπŸ™ + +See [github's contributors page](https://github.com/milaan9/91_Python_Mini_Projects/graphs/contributors) for details. + +If you have trouble with this tutorial please tell me about it by [Create an issue on GitHub](https://github.com/milaan9/91_Python_Mini_Projects/issues/new). and I'll make this tutorial better. This is probably the best choice if you had trouble following the tutorial, and something in it should be explained better. You will be asked to create a GitHub account if you don't already have one. + +If you like this tutorial, please [give it a ⭐ star](https://github.com/milaan9/91_Python_Mini_Projects). + +--- + +## Licence πŸ“œ + +You may use this tutorial freely at your own risk. See [LICENSE](https://github.com/milaan9/91_Python_Mini_Projects/blob/main/LICENSE). + +Copyright (c) 2020 Dr. Milaan Parmar + +--- + +
+

Connect with me +

+

+ LinkedIn + Instagram + Facebook + Gmail +

+ + diff --git a/P/output.png b/P/output.png new file mode 100644 index 0000000000000000000000000000000000000000..e417edb871b377256d6aeea96f7c25dbd76ff308 GIT binary patch literal 25500 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 literal 0 HcmV?d00001