DedSec Project

Πρακτικά scripts: αναζήτηση, JSON και έλεγχος CSV — DedSec Project

Πρακτικά scripts: αναζήτηση, JSON και έλεγχος CSV 01. Κανονικοποίηση κειμένου αναζήτησης Τι κάνει ο κώδικας Η normalize() στο 01_normalize_search.py χρησιμοποιεί casefold, NFD decomposition…

01. Κανονικοποίηση κειμένου αναζήτησης

Τι κάνει ο κώδικας

Η normalize() στο 01_normalize_search.py χρησιμοποιεί casefold, NFD decomposition και αφαίρεση combining marks. Έτσι ΣΥΝΑΡΤΗΣΗ και συναρτηση δίνουν κοινό search key. Αφαιρούνται και τονισμοί λατινικών χαρακτήρων. Αυτό αφορά αναζήτηση και όχι αυθεντικοποίηση, filenames ή μοναδικά identifiers: διαφορετικές τιμές μπορεί να συμπέσουν.

Εκτέλεση

Τρέξε python 01_normalize_search.py. Τα tests καλύπτουν κεφαλαία ελληνικά, τόνους, συνδυασμένους λατινικούς χαρακτήρες, κενή συμβολοσειρά και None. Αναμενόμενο μήνυμα: search normalization checks passed. Ο έλεγχος τύπου προηγείται του casefold, ώστε μη έγκυρα δεδομένα να μη δώσουν ασαφές AttributeError.

Ανεξάρτητη άσκηση

Φτιάξε τίτλους café, cafe, προγραμματισμός και προγραμματισμοσ. Διατήρησε το αρχικό κείμενο για εμφάνιση και χώρισε το normalized search index. Σύγκρινε NFD με NFKC σε compatibility characters. Σε πολλές γλώσσες οι τόνοι αλλάζουν τη σημασία, άρα η αφαίρεσή τους μπορεί να ενώσει διαφορετικές λέξεις.

Περιορισμοί

Το Python codepoint comparison δεν είναι πλήρης γλωσσικός αλγόριθμος ταξινόμησης. Unicode confusables δεν γίνονται αναγκαστικά ίσα μετά από NFD. Μη χρησιμοποιείς search normalization για authorization. Κώδικας: 01_normalize_search.py. Πηγή: https://docs.python.org/3/library/unicodedata.html

02. Έλεγχος ρυθμίσεων JSON

Πραγματικό schema

Το parsing JSON ελέγχει μόνο τη σύνταξη. Η validate() στο 02_validate_config.py απαιτεί ακριβώς enabled (πραγματικό bool) και max_items (ακέραιο 1 έως 1000). Απορρίπτει άγνωστα και ελλιπή keys. Στην Python το bool είναι subclass του int, επομένως απλό isinstance μπορεί να δεχτεί true ως αριθμό· ο ακριβής type check το αποτρέπει.

Εκτέλεση tests

Τρέξε python 02_validate_config.py. Η θετική περίπτωση δέχεται ενεργή ρύθμιση με 12 items. Οι απορρίψεις καλύπτουν enabled ως string, max_items ως boolean, μηδενική τιμή, επιπλέον debug, ελλιπή keys και arrays. Αναμενόμενο μήνυμα: configuration schema checks passed. Ο validator δεν γράφει αρχεία και δεν καλεί υπηρεσίες.

Πρακτική εργασία

Πρόσθεσε CLI που διαβάζει local UTF-8 JSON και καλεί validate πριν από οποιαδήποτε παρενέργεια. Ξεχώρισε FileNotFoundError από JSONDecodeError και ValueError schema. Τα messages πρέπει να δίνουν ονόματα πεδίων, όχι μυστικές τιμές. Πρόσθεσε προαιρετικό description με σαφή allowlist και αντίστοιχα tests.

Σημαντικό όριο

Η json.loads δέχεται duplicate keys και κρατά συνήθως την τελευταία τιμή. Αν θέλεις να απαγορεύεις duplicates, χρειάζεται object_pairs_hook· ο έλεγχος τελικού dict δεν αρκεί. Πηγαίος κώδικας: 02_validate_config.py. Τεκμηρίωση: https://docs.python.org/3/library/json.html

03. Σύνοψη CSV με άκυρες γραμμές

Μορφή και υπολογισμός

Το 03_csv_statistics.py διαβάζει CSV με ακριβή header name,score μέσω csv.DictReader. Ελέγχει τα δύο πεδία και απορρίπτει επιπλέον στήλες, κενά, μη αριθμητικά δεδομένα και nan/inf. Το statistics.fmean υπολογίζει μέσο όρο μόνο από έγκυρους αριθμούς. Οι απορρίψεις αναφέρουν τη φυσική γραμμή όπου τελειώνει το CSV record.

Αρχικοί έλεγχοι

Τρέξε python 03_csv_statistics.py. Με Ada 10, Grace 20 και Lin invalid προκύπτουν count=2, mean=15.0, bad_lines=[4]. Επιπλέον δοκιμές ελέγχουν όνομα με κόμμα σε εισαγωγικά, non-finite score και περιττό cell.

Προσοχή στο line numbering

Μία εγγραφή με εισαγωγικά μπορεί να καλύπτει περισσότερες φυσικές γραμμές. Το reader.line_num δείχνει την τελευταία γραμμή που καταναλώθηκε, όχι απλό αριθμό εγγραφής. Το DictReader παρακάμπτει κενές φυσικές γραμμές. Αν το format τις απαγορεύει, απαιτείται ξεχωριστός έλεγχος. Το strict CSV parsing δεν καλύπτει κάθε business rule.

Επέκταση

Πρόσθεσε όρια βαθμού 0 έως 100 και επιβεβαίωσε ότι -1/101 δεν επηρεάζουν average. Για πολύ μεγάλα αρχεία χρησιμοποίησε file handle με newline="" χωρίς να αποθηκεύεις όλους τους βαθμούς και εξέτασε την αριθμητική ακρίβεια. Κώδικας: 03_csv_statistics.py. Πηγή: https://docs.python.org/3/library/csv.html

Πρόσθετη τεχνική ανάλυση

Η ανάλυση πεδίων CSV και η ερμηνεία φύλλου είναι διαφορετικά όρια εμπιστοσύνης. Επικύρωσε σχήμα και τύπους εισαγωγής και όρισε ανεξάρτητη πολιτική εξαγωγής για περιεχόμενο που μοιάζει με τύπο. Τα σωστά εισαγωγικά διατηρούν τη δομή CSV χωρίς να αποδεικνύουν προβολή μη έμπιστης εισόδου ως απλό κείμενο.

Συμβόλαια εισαγωγής CSV και όρια τύπων υπολογιστικών φύλλων