1
0
ypv před 2 roky
rodič
revize
83a8d968f5
3 změnil soubory, kde provedl 133 přidání a 3 odebrání
  1. 5 3
      plagiat_1.v2.py
  2. 119 0
      plagiat_full.v2.py
  3. 9 0
      ПКС/2022-23/README.md

+ 5 - 3
plagiat_1.v2.py

@@ -17,13 +17,14 @@ from thefuzz import fuzz
 # директория файла (на уровень выше, для структуры репозиториев 2 сем. 2022-23)
 BASE_DIR = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
 # проверяемая директория
-# LECTION_DIR = os.path.join("EASvZI", "Лекции")
-LECTION_DIR = os.path.join("TZI", "Лекции", "ПМ3.2")
+# LECTION_DIR = os.path.join("ISRPO", "Лекции")
+LECTION_DIR = os.path.join("EASvZI", "Лекции")
+# LECTION_DIR = os.path.join("TZI", "Лекции", "ПМ3.2")
 
 # кого проверяем
 who = "Савкин"
 # ссылка для проверки
-url = "http://213.155.192.79:3001/ypv/TZI/raw/master/%d0%9b%d0%b5%d0%ba%d1%86%d0%b8%d0%b8/%d0%9f%d0%9c3.2/%d0%9f2.2.100_%d0%9f%d1%80%d0%b8%d0%bd%d1%86%d0%b8%d0%bf%d1%8b_%d1%83%d1%81%d1%82%d1%80%d0%be%d0%b9%d1%81%d1%82%d0%b2%d0%b0_%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b_%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d0%bd%d0%b5%d0%bd%d0%b8%d1%8f_%d1%81%d1%80%d0%b5%d0%b4%d1%81%d1%82%d0%b2_%d0%b0%d1%83%d1%82%d0%b5%d0%bd%d1%82%d0%b8%d1%84%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d0%b8_%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d1%82%d0%b5%d0%bb%d1%8f/u19-23Cherkasov.md"
+url = "http://213.155.192.79:3001/blvk032get/EASvZI/raw/bfb65053795a35785a8cefb1a261cfe3e5d17112/%d0%9b%d0%b5%d0%ba%d1%86%d0%b8%d0%b8/1.2.300_%d0%a1%d1%82%d0%b0%d0%b4%d0%b8%d0%b8_%d0%b6%d0%b8%d0%b7%d0%bd%d0%b5%d0%bd%d0%bd%d0%be%d0%b3%d0%be_%d1%86%d0%b8%d0%ba%d0%bb%d0%b0_%d0%90%d0%98%d0%a1/Bulavko.md"
 
 # ------------------------------- / НАСТРОЙКИ ------------
 
@@ -163,6 +164,7 @@ for readme_str in readme_list:
         print(f"проверяю {variant_name}")
         t, variant_uri = readme_str.split("(")
         variant_uri = variant_uri.replace("),", "")
+        variant_uri = variant_uri.replace(")", "")
         variant_uri = variant_uri.strip()
         
         variant_path = os.path.join(BASE_DIR, LECTION_DIR, variant_uri)

+ 119 - 0
plagiat_full.v2.py

@@ -0,0 +1,119 @@
+# взаимная проверка всех файлов в указанной папке
+import os
+from difflib import SequenceMatcher
+from tqdm import tqdm
+import datetime
+import requests
+
+# download stopwords corpus, you need to run it once
+import nltk
+#nltk.download("stopwords")
+from nltk.corpus import stopwords
+import pymorphy2
+from string import punctuation
+
+from thefuzz import fuzz
+
+# ------------------------------- НАСТРОЙКИ ------------
+# директория файла (на уровень выше, для структуры репозиториев 2 сем. 2022-23)
+BASE_DIR = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
+# проверяемая директория
+LECTION_DIR = os.path.join(BASE_DIR, "EASvZI", "2022-23", "Самостоятельная_работа_1")
+
+# ------------------------------- / НАСТРОЙКИ ------------
+
+
+def log(str: str = None):
+    global out_str
+    if str == None:
+        print()
+        out_str += "\n"
+    else:
+        print(str)
+        out_str += f"{str}\n"
+
+
+
+#Create lemmatizer and stopwords list
+morph = pymorphy2.MorphAnalyzer()
+russian_stopwords = stopwords.words("russian")
+
+#Preprocess function
+def preprocess_text(text):
+    translator = str.maketrans(punctuation, ' '*len(punctuation))
+    words = text.translate(translator)
+    words = words.lower().split()
+    
+    # очистка от прилегающего к слову мусора (слово, "или так")
+    clear_words = []
+    for word in words:
+        clear_word = ""
+        for s in word:
+            if not s in punctuation:
+                clear_word = clear_word + s
+        clear_words.append(clear_word)
+    tokens = []
+    tokens = [morph.parse(token)[0].normal_form for token in clear_words if token not in russian_stopwords\
+            and token != " " \
+            and token.strip() not in punctuation \
+            ]
+
+    text = " ".join(tokens)    
+    return tokens, text
+
+
+
+out_str = ""
+now = datetime.datetime.now().strftime('%d-%m-%Y %H:%M')
+log(f"Время проверки: {now}")
+
+
+files_paths = []
+files = os.listdir(LECTION_DIR)
+for file in files:
+    file_path = os.path.join(LECTION_DIR, file)
+    filename, fileext = os.path.splitext(file)
+
+    if os.path.isfile(file_path) and (fileext=='.md'):
+        files_paths.append(file_path)
+
+
+for file_1 in files_paths:
+    for file_2 in files_paths:
+        if (file_1 != file_2):
+            small_filename_1 = str(file_1).replace(LECTION_DIR, "").strip("\\")
+            small_filename_2 = str(file_2).replace(LECTION_DIR, "").strip("\\")
+            try:
+                with open(file_1, encoding="utf-8") as f_1:
+                    str1 = f_1.read()
+                    f_1.close()
+            except:
+                with open(file_1, encoding="cp1251") as f_1:
+                    str1 = f_1.read()
+                    f_1.close()
+
+            try:
+                with open(file_2, encoding="utf-8") as f_2:
+                    str2 = f_2.read()
+                    f_2.close()
+            except:
+                with open(file_2, encoding="cp1251") as f_2:
+                    str2 = f_2.read()
+                    f_2.close()
+
+
+            str1_tokens, str1_uniq_text = preprocess_text(str1)
+            str2_tokens, str2_uniq_text = preprocess_text(str2)
+
+            # пересечение множеств 
+            min_tokens_len = min([len(set(str1_tokens)), len(set(str2_tokens))])
+            c = list(set(str1_tokens) & set(str2_tokens))
+            ratio = (1 - (len(c) / min_tokens_len)) * 100
+            log(f"уникальность {small_filename_1} / {small_filename_2}: {ratio:.2f}%")
+    log()
+
+with open(os.path.join(LECTION_DIR, "log.txt"), "w", encoding="utf-8") as f_log:
+    f_log.write(out_str)
+    f_log.close()
+
+

+ 9 - 0
ПКС/2022-23/README.md

@@ -4,6 +4,11 @@
 
 Лисеенко - Мобильная игра "" на Unity  
 Никипелов - Чат-мессенджер на WPF  
+Ермаков К. - Создание оптимизированной системы репликации персонажа между сервером и клиентом в UE4
+Москаленко - СУБД "Магазин спорттоваров"
+Лапченко К. - СУБД "Магазин компьютерных комплектующих"
+Оболенский А. - Квантовые компьютеры
+Герасименко А. - Технологии компьютерных игр
 
 
 
@@ -18,6 +23,10 @@
 ██    ██   ██   ██      ██       ██   ██     ███   ██████     ██████
 
 
+01Feb23 Ср. 2П
+**Опоздание:**  
+**Отсутств:** Ермаков, Левинсас
+
 
 25Jan23 Ср. 2П
 **Опоздание:**