Le plagiat est une mauvaise pratique qui consiste à copier ou s'inspirer fortement d'une œuvre sans citer son auteur et en faisant passer cette œuvre pour la sienne.
On suppose qu’un texte est plagié lorsque le nombre de mots communs dépasse la moitié du nombre de mots du texte d’origine.
Exemple :
Texte d’origine :
"CE PROGRAMME PERMET DE TROUVER LE NOMBRE DE MOTS IDENTIQUES DANS DEUX VERSIONS DU MEME TEXTE."
Texte à tester :
"ENTRE DEUX VERSIONS DU MEME DOCUMENT CE LOGICIEL PERMET DE CHERCHER LE NOMBRE DE MOTS IDENTIQUES."
Les mots communs aux deux textes sont :
DEUX – VERSIONS – DU – MEME – CE – PERMET – DE – LE – NOMBRE – DE – MOTS – IDENTIQUES
Le texte testé est plagié. En effet, le nombre de mots communs aux deux textes est égal à 12, dépassant ainsi la moitié du nombre de mots du texte d’origine qui est 16.
On se propose d’écrire un programme Python qui permet de saisir deux textes T1 et T2 ayant un même nombre de mots, de vérifier si T2 est plagiat de T1 selon le principe décrit précédemment et d’afficher un message correspondant.
Remarques :
1- T1 et T2 sont deux chaînes commençant obligatoirement par une lettre, composée au maximum de 200 caractères, se terminant par un point et ne pouvant contenir que des lettres majuscules et des espaces.
2- Le programme doit enlever les espaces superflus (garder un seul espace entre deux mots consécutifs et ne garder aucun espace avant le point de fin de texte).
Dans cet algorithme, On va utiliser 5 fonctions :
Algorithme du programme Principal
1 2 3 4 5 6 7 8 9 10 11 12 |
Algorithme test_texte_plagie Debut Ecrire('saisir le texte t1 original') t1<-saisie_texte() Ecrire('saisir le texte t2 a tester') t2<-saisie_texte() Si test_plagiat(t1,t2,nbr_mots(t1)) alors Ecrire('Le texte t2 est non plagie') Sinon Ecrire('Le texte t2 est plagie') Fin si Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
t1 | chaîne des caractères |
t2 | chaîne des caractères |
La fonction supprimer_espaces
Cette fonction enlève les espaces superflus pour garder un seul espace entre deux mots consécutifs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
fonction supprimer_espaces(ch:chaine):chaine Début Tant que (ch[0]==' '): # elimnier tous les espaces au début de la chaine ch=Sous_chaine(ch,1,long(ch)) Fin tant que Tant que ((ch[long(ch)-1]==' '): # elimnier tous les espaces a la fin de la chaine ch=Sous_chaine(ch,0,long(ch)-1) Fin tant que Tant que (Pos(ch,' ')>0) faire ch<-ch.replace(" ", " ") # remplacer les doubles espaces par un seul espace Fin tant que retourner ch Fin |
La fonction verif_nom
Cette fonction vérifie que le nom saisi est forme uniquement des lettres majuscules et/ou espaces, se termine par un point et ne dépasse pas 200 caractères.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
fonction verif_nom(ch:chaine):booleen Début #si le texte saisi est forme au maximum 200 caracteres et se termine par un point Si long(ch)<=200 et ch[len(ch)-1]=='.' alors i<-0 # verifier si la chaine est forme uniquement des lettres et/ou espaces Tant que (i<long(ch)-2) et (('A'<=ch[i<='Z') ou ch[i]=' ') faire i<-i+1 Fin tant que retourner ('A'<=ch[i]<='Z') ou (ch[i]=' ') Sinon retourner Faux Fin si Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La fonction nbr_mots
Cette fonction retourne le nombre des mots qui forment un texte.
1 2 3 4 5 6 7 8 9 10 11 12 |
fonction nbr_mots(ch:chaine):entier Début i<-0 cp<-0 Tant que (i<long(ch)) faire Si ((ch[i]==' ') ou (i==len(ch)-1)) alors cp<-cp+1 i<-i+1 Fin si Fin tant que retourner cp Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
cp | entier |
La fonction saisie_texte
Cette fonction saisit une chaîne des caractères formée au maximum 200 lettres majuscules et se termine par un point.
1 2 3 4 5 6 7 8 9 10 11 |
fonction saisie_texte():chaine Début Ecrire("donner texte forme des lettres majuscules et/ou espaces:\n") Lire(ch) Tant que (verif_nom(ch)==Faux) faire Ecrire("donner texte forme des lettres majuscules et/ou espaces:\n") Lire(ch) Fin tant que ch<-supprimer_espaces(ch) retourner ch Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
ch | chaîne des caractères |
La fonction test_plagiat
Cette fonction vérifie si le texte t2 est plagiat du texte original t1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
fonction test_plagiat(t1:chaine;t2:chaine,nbr_mots:entier):booleen Début i<-0 cp<-0 ch2<-'' Tant que (i<long(t2)-1) faire Si ('A'<=t2[i]<='Z') alors ch2<-ch2+t2[i] Fin si Si ((t2[i]=' ') or (i==len(t2)-2)) : Si Pos(t1,ch2)>=0 alors # si le mot du texte t2 se trouve dans le texte t1 cp<-cp+1 Fin si ch2<-'' Fin si i=i+1 Fin tant que Si cp <= (nbr_mots//2) alors retourner Vrai # si le texte t2 n 'est pas une copie du texte t2 Sinon retourner Faux # si le texte t2 est une copie du texte t2 Fin si Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
cp | entier |
ch2 | chaîne des caractères |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
def supprimer_espaces (ch) : while(ch[0]==' '): # elimnier tous les espaces au début de la chaine ch=ch[1:len(ch)] while(ch[len(ch)-1]==' '): # elimnier tous les espaces a la fin de la chaine ch=ch[0:len(ch)-1] while (ch.find(' ')>0): ch=ch.replace(" ", " ") # remplacer les doubles espaces apar un seul espace return ch def verif_nom(ch): if len(ch)<=200 and ch[len(ch)-1]=='.' : #si le texte saisi est forme au maximum 200 caracteres et se termine par un point i=0 # verifier si la chaine est forme uniquement des lettres majuscules et/ou espaces while (i<len(ch)-2) and (('A'<=ch[i]<='Z')or ch[i]==' '): i=i+1 return ('A'<=ch[i]<='Z')or (ch[i]==' ') else: return False def saisie_texte(): ch=input("donner texte forme des lettres majuscules et/ou espaces:\n") while (verif_nom(ch)==False): ch=input("donner texte forme des lettres majuscules et/ou espaces:\n") ch=supprimer_espaces(ch) return ch def nbr_mots(ch): i=0 cp=0 while (i<len(ch)): if ((ch[i]==' ') or (i==len(ch)-1)) : cp=cp+1 i=i+1 return cp def test_plagiat(t1,t2,nbr_mots): i=0 cp=0 ch2='' while (i<len(t2)-1): if ('A'<=t2[i]<='Z'): ch2=ch2+t2[i] if ((t2[i]==' ') or (i==len(t2)-2)) : if t1.find(ch2)>=0 : cp=cp+1 ch2='' i=i+1 if cp <= (nbr_mots//2) : return True else: return False #programme principal print('saisir le texte t1 original') t1=saisie_texte() print('saisir le texte t2 a tester') t2=saisie_texte() if test_plagiat(t1,t2,nbr_mots(t1)): print('Le texte t2 est non plagie') else: print('Le texte t2 est plagie') |
Exécution du programme
1- Cas du texte t2 est une copie du texte t1
2- Cas du texte t2 n'est pas une copie du texte t2
Pour créer une application en Python et Designer QT qui va saisir deux textes et vérifier l'originalité du deuxième texte par rapport au premier texte, on va suivre ces étapes:
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLineEdit
nommé 't1' pour entrer le texte original.
QLineEdit
nommé 't2' pour entrer le texte à vérifier son originalité.
QPushButton
nommé 'test_bt' pour tester si le texte t2 est plagiat de t1
QLabel
nommé 'msg' pour afficher des messages d'erreur et résultât du test d'originalité du texte t2.
Enregistrez le fichier avec l'extension .ui
, par exemple plagiat-interface.ui
.
Voici un exemple de script Python qui utilise l'interface graphique générée par Qt Designer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets from numpy import array a=array([str]*30) # declaration du tableau des noms joueurs score=array([int()]*30) # declaration du tableau des essais app = QApplication([]) windows = loadUi ("plagiat-interface.ui") # Fonction qui supprime des espaces de la chaine des carcatères def supprimer_espaces (ch) : while(ch[0]==' '): # elimnier tous les espaces au début de la chaine ch=ch[1:len(ch)] while(ch[len(ch)-1]==' '): # elimnier tous les espaces a la fin de la chaine ch=ch[0:len(ch)-1] while (ch.find(' ')>0): ch=ch.replace(" ", " ") # remplacer les doubles espaces apar un seul espace return ch def verif_nom(ch): if len(ch)<=200 and ch[len(ch)-1]=='.' : #si le texte saisi est forme au maximum 200 caracteres et se termine par un point i=0 # verifier si la chaine est forme uniquement des lettres majuscules et/ou espaces while (i<len(ch)-2) and (('A'<=ch[i]<='Z')or ch[i]==' '): i=i+1 return ('A'<=ch[i]<='Z')or (ch[i]==' ') else: return False def nbr_mots(ch): i=0 cp=0 while (i<len(ch)): if ((ch[i]==' ') or (i==len(ch)-2)) : cp=cp+1 i=i+1 return cp def test_plagiat(): t1 = windows.t1.text() t2 = windows.t2.text() windows.msg.clear() if verif_nom(t1) and verif_nom(t2): i=0 cp=0 ch2='' while (i<len(t2)-1): if ('A'<=t2[i]<='Z'): ch2=ch2+t2[i] if ((t2[i]==' ') or (i==len(t2)-2)) : if t1.find(ch2)>=0 : cp=cp+1 ch2='' i=i+1 if cp <= (nbr_mots(t1)//2) : windows.msg.setText("Le texte t2 est non plagie") else: windows.msg.setText("Le texte t2 est plagie") else: windows.msg.setText("donner texte forme des lettres majuscules et/ou espaces:") windows.test_bt.clicked.connect ( test_plagiat ) windows.show() app.exec_() |
Exécution du programme
1) Cas du texte t2 est une copie du texte t1
2) Cas du texte t2 n'est pas une copie du texte t2
Vous pouvez voir aussi :
La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
+216 92 886 231
medaliprof@gmail.com
Site robotique réalisé par Mohamed Ali-Prof Info